上下文是对象在其激活时创建及其属性的隐式所有者。 更多...
数据结构 | |
struct | VPIParallelForConfig |
存储 ParallelFor 配置。 更多... | |
宏 | |
#define | VPI_INVALID_CONTEXT ((VPIContext)-1) |
表示上下文已被销毁或由于其他原因而无效。 | |
类型定义 | |
typedef void(* | VPIParallelTask) (int taskId, int threadId, void *vpiData) |
并行任务函数指针类型。 | |
typedef void(* | VPIParallelForCallback) (VPIParallelTask task, int taskCount, void *vpiData, void *userData) |
Parallel for 回调函数指针类型。 更多... | |
typedef void * | VPINativeThreadHandle |
操作系统特定线程句柄的句柄。 | |
typedef struct VPIContextImpl * | VPIContext |
上下文的句柄。 | |
函数 | |
VPIStatus | vpiContextCreate (uint64_t flags, VPIContext *ctx) |
创建上下文实例。 更多... | |
VPIStatus | vpiContextCreateWrapperCUDA (uint64_t flags, CUcontext cudaCtx, VPIContext *ctx) |
创建包装 CUDA 上下文的上下文实例。 更多... | |
void | vpiContextDestroy (VPIContext ctx) |
销毁上下文实例及其拥有的所有资源。 更多... | |
VPIStatus | vpiContextSetParallelFor (VPIContext ctx, const VPIParallelForConfig *config) |
控制上下文拥有的 CPU 设备的低级任务并行性。 更多... | |
VPIStatus | vpiContextGetParallelFor (VPIContext ctx, VPIParallelForConfig *config) |
返回由 vpiContextSetParallelFor 设置的参数。 更多... | |
VPIStatus | vpiContextGetCurrent (VPIContext *ctx) |
获取调用线程的上下文。 更多... | |
VPIStatus | vpiContextSetCurrent (VPIContext ctx) |
设置调用线程的上下文。 更多... | |
VPIStatus | vpiContextPush (VPIContext ctx) |
将上下文推送到每个线程的上下文堆栈,并将此上下文设置为调用线程的当前上下文。 更多... | |
VPIStatus | vpiContextPop (VPIContext *ctx) |
从每个线程的上下文堆栈中弹出一个上下文,并将其保存到 ctx 变量中。 更多... | |
VPIStatus | vpiContextGetFlags (VPIContext ctx, uint64_t *flags) |
获取当前上下文标志。 更多... | |
特殊上下文 | |
#define | VPI_GLOBAL_CONTEXT ((VPIContext)0x610BA1C1D) |
全局上下文标识符。 | |
上下文是对象在其激活时创建及其属性的隐式所有者。
这是一个顶层类,用于管理所有其他 API 对象的生命周期和属性。 具体来说,它具有以下属性
\ref VPI_BACKEND_CUDA|\ref VPI_BACKEND_CPU
标志。CUcontext
实例关联 - 这应该允许进行多 GPU 处理。struct VPIParallelForConfig |
数据字段 | ||
---|---|---|
int | maxThreads | parallel_for 实现代码使用的最大线程数。 必须大于 0。 将数字设置为 N 意味着并行 for 实现将使用任务 ID 在 0 到 N-1 之间的任务 functor。 使用此范围之外的线程 ID 调用任务 functor 是不合法的,并且会导致未定义的行为。 |
VPIParallelForCallback | callback | 指向 parallel_for 实现的指针。 如果传递 null,上下文将回退到默认的内部 parallel_for 实现。 parallel_for 实现必须是线程安全的。 内部 API 实现可能会同时从不同的线程调用此函数。 |
void * | userData | 传递给回调函数的用户定义的 opaque 指针,保持不变。 |
typedef void(* VPIParallelForCallback) (VPIParallelTask task, int taskCount, void *vpiData, void *userData) |
#include <vpi/Types.h>
Parallel for 回调函数指针类型。
此函数的串行(参考)实现可能如下所示
并行实现应具有等效的行为;也就是说,运行 0 到 taskCount-1 之间的所有任务,并阻止调用线程,直到所有任务完成。 threadId
参数应介于 0 和 maxThreads-1 之间 (
maxThreads
设置为零的实现可以将任意 threadId
值传递给任务函数。VPIStatus vpiContextCreate | ( | uint64_t | flags, |
VPIContext * | ctx | ||
) |
#include <vpi/Context.h>
创建上下文实例。
上下文拥有以下在其激活时创建的对象
上下文中启用的后端限制了在上下文处于活动状态时创建对象时可以启用的允许后端。
上下文已创建,并且内部资源已分配。 但它尚未分配给调用线程。 为此,请使用 vpiContextSetCurrent 或 vpiContextPush。
[in] | flags | 位字段,用于指定上下文的所需特性。
|
[out] | ctx | 指向将接收新上下文句柄的内存的指针。 |
VPI_ERROR_INVALID_ARGUMENT | 输出 ctx 为 NULL。 |
VPI_ERROR_INVALID_ARGUMENT | flags 无效。 |
VPI_ERROR_INVALID_ARGUMENT | 未给出任何后端,并且设置了 VPI_REQUIRE_BACKENDS。 |
VPI_ERROR_INVALID_OPERATION | 请求的后端在当前系统中不可用。 |
VPI_SUCCESS | 操作执行成功。 |
VPIStatus vpiContextCreateWrapperCUDA | ( | uint64_t | flags, |
CUcontext | cudaCtx, | ||
VPIContext * | ctx | ||
) |
#include <vpi/Context.h>
创建包装 CUDA 上下文的上下文实例。
每当创建的上下文处于活动状态时,CUDA 操作都将在包装的上下文下进行。
关于在此上下文处于活动状态时创建的对象的行为与 vpiContextCreate 相同。
[in] | flags | 位字段,用于指定上下文的所需特性。
|
[in] | cudaCtx | CUDA 上下文句柄,要包装。
|
[out] | ctx | 指向将接收创建的上下文句柄的内存的指针。 |
VPI_ERROR_INVALID_ARGUMENT | 输出 ctx 为 NULL。 |
VPI_ERROR_INVALID_ARGUMENT | flags 无效。 |
VPI_ERROR_INVALID_ARGUMENT | cudaCtx 为 NULL 或不代表有效的 CUDA 上下文。 |
VPI_ERROR_OUT_OF_MEMORY | 没有足够的资源来创建上下文。 |
VPI_ERROR_INVALID_OPERATION | 请求的后端在当前系统中不可用。 |
VPI_SUCCESS | 操作执行成功。 |
void vpiContextDestroy | ( | VPIContext | ctx | ) |
#include <vpi/Context.h>
销毁上下文实例及其拥有的所有资源。
无论上下文在多少线程中处于活动状态,都将被销毁。 调用函数有责任确保在 vpiContextDestroy 执行时,没有使用 ctx 发出 API 调用。
上下文销毁后,将同步与之关联的所有流,然后销毁与之关联的所有对象。
如果上下文是调用线程的当前上下文,那么它也将从当前线程的上下文堆栈中弹出,就像调用了 vpiContextPop 一样。 如果上下文是其他线程的当前上下文,那么它将保持为这些线程的当前上下文,并且尝试从这些线程访问它将导致错误 VPI_ERROR_INVALID_CONTEXT。
[in] | ctx | 上下文句柄。 允许传递 NULL,函数对此不执行任何操作。 传递 VPI_GLOBAL_CONTEXT 也使其不执行任何操作,因为无法销毁全局上下文。 |
VPIStatus vpiContextSetParallelFor | ( | VPIContext | ctx, |
const VPIParallelForConfig * | config | ||
) |
#include <vpi/Context.h>
控制上下文拥有的 CPU 设备的低级任务并行性。
此函数允许用户重载 CPU 后端使用的 parallel_for 实现。 在正在执行 CPU 处理的上下文中更改此 parallel_for 实现是未定义的,并且可能导致应用程序崩溃。
创建上下文时,使用的 parallel_for 实现是默认实现。 它允许每个 CPU 任务平等地使用所有可用的核心。
[in] | ctx | 上下文句柄。
|
[in] | config | 指向 parallel_for 配置的指针。 传递 NULL 将使上下文回退到其默认的内部实现。 |
VPI_ERROR_INVALID_ARGUMENT | ctx 为 NULL 或无效。 |
VPI_SUCCESS | 操作执行成功。 |
VPIStatus vpiContextGetParallelFor | ( | VPIContext | ctx, |
VPIParallelForConfig * | config | ||
) |
#include <vpi/Context.h>
返回由 vpiContextSetParallelFor 设置的参数。
[in] | ctx | 上下文句柄。
|
[out] | config | 指向 parallel_for 配置的指针。
|
VPI_ERROR_INVALID_ARGUMENT | 输出 config 指针为 NULL。 |
VPI_ERROR_INVALID_ARGUMENT | ctx 为 NULL 或无效。 |
VPI_SUCCESS | 操作执行成功。 |
VPIStatus vpiContextGetCurrent | ( | VPIContext * | ctx | ) |
#include <vpi/Context.h>
获取调用线程的上下文。
[out] | ctx | 指向上下文句柄的指针。
|
VPI_ERROR_INVALID_ARGUMENT | 输出 ctx 为 NULL。 |
VPI_ERROR_INVALID_CONTEXT | 当前上下文已销毁。 |
VPI_SUCCESS | 操作执行成功 |
VPIStatus vpiContextSetCurrent | ( | VPIContext | ctx | ) |
#include <vpi/Context.h>
设置调用线程的上下文。
如果上下文堆栈不为空,此函数将替换线程堆栈的顶部(当前上下文)。
[in] | ctx | 上下文句柄。
|
VPI_ERROR_INVALID_ARGUMENT | ctx 为 NULL 或无效值。 |
VPI_SUCCESS | 操作执行成功。 |
VPIStatus vpiContextPush | ( | VPIContext | ctx | ) |
#include <vpi/Context.h>
将上下文推送到每个线程的上下文堆栈,并将此上下文设置为调用线程的当前上下文。
[in] | ctx | 上下文句柄。
|
VPI_ERROR_INVALID_CONTEXT | ctx 无效。 |
VPI_ERROR_INVALID_ARGUMENT | ctx 为 NULL。 |
VPI_ERROR_INVALID_OPERATION | 堆栈大小超出有效范围。 |
VPI_ERROR_INVALID_CONTEXT | 当前上下文已销毁。 |
VPI_SUCCESS | 操作执行成功 |
VPIStatus vpiContextPop | ( | VPIContext * | ctx | ) |
#include <vpi/Context.h>
从每个线程的上下文堆栈中弹出一个上下文,并将其保存到 ctx 变量中。
弹出操作后,上下文堆栈顶部的上下文将成为调用线程的当前(活动)上下文。
[out] | ctx | 指向接收弹出上下文的上下文句柄的指针。 如果为 NULL,它仍会弹出上下文,但不会返回它。 |
VPI_ERROR_INVALID_OPERATION | 无法从空堆栈中弹出。 |
VPI_SUCCESS | 操作执行成功。 |
VPIStatus vpiContextGetFlags | ( | VPIContext | ctx, |
uint64_t * | flags | ||
) |
#include <vpi/Context.h>
获取当前上下文标志。
此函数可用于验证当前上下文的底层后端支持。
[in] | ctx | 上下文句柄。
|
[out] | flags | 指向将设置为当前上下文标志的变量的指针。
|
VPI_ERROR_INVALID_ARGUMENT | 输出 flags 为 NULL。 |
VPI_ERROR_INVALID_ARGUMENT | ctx 为 NULL。 |
VPI_ERROR_INVALID_CONTEXT | ctx 无效。 |
VPI_ERROR_INVALID_CONTEXT | 当前上下文已销毁。 |
VPI_SUCCESS | 操作执行成功。 |