用于流同步和定时的事件表示。 更多...
类型定义 | |
typedef struct VPIEventImpl * | VPIEvent |
事件的句柄。 | |
函数 | |
VPIStatus | vpiEventCreate (uint64_t flags, VPIEvent *event) |
创建事件实例。 更多... | |
void | vpiEventDestroy (VPIEvent event) |
销毁事件实例以及它拥有的所有资源。 更多... | |
VPIStatus | vpiEventRecord (VPIEvent event, VPIStream stream) |
在此调用时捕获事件中流命令队列的内容。 更多... | |
VPIStatus | vpiEventSync (VPIEvent event) |
阻塞调用线程,直到事件被信号通知。 更多... | |
VPIStatus | vpiEventQuery (VPIEvent event, VPIEventState *state) |
查询事件当前捕获的所有工作的状态。 更多... | |
VPIStatus | vpiEventElapsedTimeMillis (VPIEvent start, VPIEvent end, float *msec) |
计算两个已完成事件之间经过的时间(以毫秒为单位)。 更多... | |
VPIStatus | vpiEventGetFlags (VPIEvent event, uint64_t *flags) |
返回事件创建期间传递的事件标志。 更多... | |
事件特定的标志。 | |
#define | VPI_EVENT_DISABLE_TIMESTAMP (1ULL << 63) |
禁用事件信号的时间戳。 更多... | |
用于流同步和定时的事件表示。
API 中的每个计算函数都相对于调用线程异步执行,即立即返回而不等待完成。有两种与后端同步的方法。一种是等待 VPIStream 队列中的所有命令都使用 vpiStreamSync 调用完成。 这种方法虽然简单,但不允许细粒度的(“等待直到函数 X 完成”)或设备间的(“在设备 B 中运行函数 A 之前,等待设备 D 中的函数 C 完成”)同步。 这就是 VPIEvent 对象发挥作用的地方。 从概念上讲,它们对应于二进制信号量,旨在紧密模仿 CUDA API 中的事件
#define VPI_EVENT_DISABLE_TIMESTAMP (1ULL << 63) |
#include <vpi/Event.h>
创建事件实例。
[输入] | flags | 位字段,指定事件的所需特性。
|
[输出] | event | 指向将接收创建的事件句柄的内存的指针。
|
VPI_ERROR_INVALID_ARGUMENT | 输出 event 句柄为 NULL。 |
VPI_ERROR_INVALID_ARGUMENT | flags 无效。 |
VPI_ERROR_INVALID_ARGUMENT | 未给定后端,并且设置了 VPI_REQUIRE_BACKENDS。 |
VPI_ERROR_OUT_OF_MEMORY | 没有足够的资源来分配事件。 |
VPI_ERROR_INVALID_CONTEXT | 当前上下文无效。 |
VPI_ERROR_INVALID_OPERATION | 请求的后端在当前上下文中未启用。 |
VPI_SUCCESS | 操作成功执行。 |
void vpiEventDestroy | ( | VPIEvent | event | ) |
#include <vpi/Event.h>
销毁事件实例以及它拥有的所有资源。
[输入] | event | 要销毁的事件句柄。它可以为 NULL。在这种情况下,该函数不执行任何操作。
|
#include <vpi/Event.h>
在此调用时捕获事件中流命令队列的内容。
当记录的所有任务都完成后,事件将被信号通知,并且等待它的调用将被解除阻塞。
可以在同一事件上多次调用此函数,但是现有的 vpiEventSync / vpiStreamWaitEvent 调用不受后续 vpiEventRecord 调用的影响。 这意味着它们将等待先前 vpiEventSync / vpiStreamWaitEvent 调用时事件描述的命令队列任务的事件完成。
该操作将隐式刷新流。
[输入] | event | 一个事件句柄。
|
[输入] | stream | 一个流句柄,其包含待执行任务的命令队列将被记录在事件中。
|
VPI_ERROR_INVALID_ARGUMENT | event 为 NULL 或不代表 VPIEvent 实例。 |
VPI_ERROR_INVALID_ARGUMENT | stream 为 NULL 或无效,或者不代表 VPIStream 实例。 |
VPI_ERROR_INVALID_ARGUMENT | 事件没有启用流所需的后端。 |
VPI_ERROR_INTERNAL | 事件没有任何启用的后端用于记录。 |
VPI_ERROR_INVALID_CONTEXT | 当前上下文无效。 |
VPI_SUCCESS | 操作成功执行。 |
#include <vpi/Event.h>
阻塞调用线程,直到事件被信号通知。
当 vpiEventRecord 捕获的所有任务都完成或未捕获任何任务时,该事件被视为已信号通知。
[输入] | event | 一个事件句柄。
|
VPI_ERROR_INVALID_ARGUMENT | event 为 NULL 或不代表 VPIEvent 实例。 |
VPI_SUCCESS | 操作成功执行。 |
VPIStatus vpiEventQuery | ( | VPIEvent | event, |
VPIEventState * | state | ||
) |
#include <vpi/Event.h>
查询事件当前捕获的所有工作的状态。
[输入] | event | 一个事件句柄。
|
[输出] | state | 指向将接收事件状态的内存的指针。 仅当返回的状态为 VPI_SUCCESS 时,返回的状态才有效。 |
VPI_ERROR_INVALID_ARGUMENT | 输出 state 指针为 NULL。 |
VPI_SUCCESS | 操作成功执行。 |
#include <vpi/Event.h>
计算两个已完成事件之间经过的时间(以毫秒为单位)。
[输入] | start | 标记时间间隔开始的事件句柄。
|
[输入] | end | 标记时间间隔结束的事件句柄
|
[输出] | msec | 指向变量的指针,该变量将被设置为事件信号之间的时差。
|
VPI_ERROR_INVALID_ARGUMENT | start 或 end 为 NULL 或不代表 VPIEvent 实例。 |
VPI_ERROR_INVALID_ARGUMENT | 输出 msec 指针为 NULL。 |
VPI_ERROR_INVALID_OPERATION | 至少一个事件创建时禁用了时间戳。 |
VPI_ERROR_NOT_READY | 至少一个事件未完成/信号通知。 |
VPI_SUCCESS | 操作成功执行。 |
#include <vpi/Event.h>
返回事件创建期间传递的事件标志。
[输入] | event | 一个事件句柄。
|
[输出] | flags | 指向将保存事件标志的内存的指针。
|
VPI_ERROR_INVALID_ARGUMENT | event 为 NULL 或不代表 VPIEvent 实例。 |
VPI_ERROR_INVALID_ARGUMENT | flags 为 NULL。 |
VPI_SUCCESS | 操作成功执行。 |