6.19. 事件管理
本节介绍底层 CUDA 驱动程序应用程序编程接口的事件管理功能。
函数
- CUresult cuEventCreate ( CUevent* phEvent, unsigned int Flags )
- 创建事件。
- CUresult cuEventDestroy ( CUevent hEvent )
- 销毁事件。
- CUresult cuEventElapsedTime ( float* pMilliseconds, CUevent hStart, CUevent hEnd )
- 计算两个事件之间经过的时间。
- CUresult cuEventElapsedTime_v2 ( float* pMilliseconds, CUevent hStart, CUevent hEnd )
- 计算两个事件之间经过的时间。
- CUresult cuEventQuery ( CUevent hEvent )
- 查询事件的状态。
- CUresult cuEventRecord ( CUevent hEvent, CUstream hStream )
- 记录事件。
- CUresult cuEventRecordWithFlags ( CUevent hEvent, CUstream hStream, unsigned int flags )
- 记录事件。
- CUresult cuEventSynchronize ( CUevent hEvent )
- 等待事件完成。
函数
- CUresult cuEventCreate ( CUevent* phEvent, unsigned int Flags )
-
创建事件。
参数
- phEvent
- - 返回新创建的事件
- Flags
- - 事件创建标志
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_OUT_OF_MEMORY
描述
为当前上下文创建事件 *phEvent,并使用以下标志指定Flags。 有效标志包括
-
CU_EVENT_DEFAULT: 默认事件创建标志。
-
CU_EVENT_BLOCKING_SYNC: 指定创建的事件应使用阻塞同步。使用 cuEventSynchronize() 等待使用此标志创建的事件的 CPU 线程将阻塞,直到事件实际被记录。
-
CU_EVENT_DISABLE_TIMING: 指定创建的事件不需要记录计时数据。当与 cuStreamWaitEvent() 和 cuEventQuery() 一起使用时,使用此标志指定且未指定 CU_EVENT_BLOCKING_SYNC 标志创建的事件将提供最佳性能。
-
CU_EVENT_INTERPROCESS: 指定创建的事件可以被 cuIpcGetEventHandle() 用作进程间事件。CU_EVENT_INTERPROCESS 必须与 CU_EVENT_DISABLE_TIMING 一起指定。
注意请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventRecord, cuEventQuery, cuEventSynchronize, cuEventDestroy, cuEventElapsedTime, cudaEventCreate, cudaEventCreateWithFlags
- CUresult cuEventDestroy ( CUevent hEvent )
-
销毁事件。
参数
- hEvent
- - 要销毁的事件
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_HANDLE
描述
销毁由以下指定的事件hEvent.
事件可以在完成之前销毁(即,当 cuEventQuery() 将返回 CUDA_ERROR_NOT_READY 时)。在这种情况下,调用不会阻塞事件的完成,任何关联的资源将在完成时自动异步释放。
注意请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventRecord, cuEventQuery, cuEventSynchronize, cuEventElapsedTime, cudaEventDestroy
- CUresult cuEventElapsedTime ( float* pMilliseconds, CUevent hStart, CUevent hEnd )
-
计算两个事件之间经过的时间。
参数
- pMilliseconds
- - 时间间隔在hStart和hEnd单位:毫秒
- hStart
- - 起始事件
- hEnd
- - 结束事件
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_HANDLE, CUDA_ERROR_NOT_READY, CUDA_ERROR_UNKNOWN
描述
计算两个事件之间经过的时间(以毫秒为单位,分辨率约为 0.5 微秒)。
如果任一事件最后记录在非 NULL 流中,则结果时间可能大于预期(即使两者都使用相同的流句柄)。发生这种情况是因为 cuEventRecord() 操作是异步发生的,并且不能保证测量的延迟实际上仅在两个事件之间。任何数量的其他不同流操作都可能在两个测量的事件之间执行,从而以显着的方式改变时序。
如果尚未在任一事件上调用 cuEventRecord(),则返回 CUDA_ERROR_INVALID_HANDLE。如果已在两个事件上调用 cuEventRecord(),但其中一个或两个事件尚未完成(即,cuEventQuery() 将在至少一个事件上返回 CUDA_ERROR_NOT_READY),则返回 CUDA_ERROR_NOT_READY。如果任一事件是使用 CU_EVENT_DISABLE_TIMING 标志创建的,则此函数将返回 CUDA_ERROR_INVALID_HANDLE。
请注意,此 API 有一个较新版本 cuEventElapsedTime_v2。它将在 CUDA 13.0 中取代此版本,此版本保留用于次要版本兼容性。
注意请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventRecord, cuEventQuery, cuEventSynchronize, cuEventDestroy, cuEventElapsedTime, cudaEventElapsedTime
- CUresult cuEventElapsedTime_v2 ( float* pMilliseconds, CUevent hStart, CUevent hEnd )
-
计算两个事件之间经过的时间。
参数
- pMilliseconds
- - 时间间隔在hStart和hEnd单位:毫秒
- hStart
- - 起始事件
- hEnd
- - 结束事件
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_HANDLE, CUDA_ERROR_NOT_READY, CUDA_ERROR_UNKNOWN
描述
计算两个事件之间经过的时间(以毫秒为单位,分辨率约为 0.5 微秒)。请注意,此 API 不保证返回待处理工作的最新错误。因此,此 API 仅旨在用作经过时间的计算,并且要比较的事件的任何完成轮询都应改用 cuEventQuery 完成。
如果任一事件最后记录在非 NULL 流中,则结果时间可能大于预期(即使两者都使用相同的流句柄)。发生这种情况是因为 cuEventRecord() 操作是异步发生的,并且不能保证测量的延迟实际上仅在两个事件之间。任何数量的其他不同流操作都可能在两个测量的事件之间执行,从而以显着的方式改变时序。
如果尚未在任一事件上调用 cuEventRecord(),则返回 CUDA_ERROR_INVALID_HANDLE。如果已在两个事件上调用 cuEventRecord(),但其中一个或两个事件尚未完成(即,cuEventQuery() 将在至少一个事件上返回 CUDA_ERROR_NOT_READY),则返回 CUDA_ERROR_NOT_READY。如果任一事件是使用 CU_EVENT_DISABLE_TIMING 标志创建的,则此函数将返回 CUDA_ERROR_INVALID_HANDLE。
注意请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventRecord, cuEventQuery, cuEventSynchronize, cuEventDestroy, cuEventElapsedTime, cudaEventElapsedTime
- CUresult cuEventQuery ( CUevent hEvent )
-
查询事件的状态。
参数
- hEvent
- hEvent
返回值
- 要查询的事件
描述
查询当前由以下捕获的所有工作的状态hEvent。cuEventRecord() 详细介绍了事件捕获的内容。
如果所有捕获的工作都已完成,则返回 CUDA_SUCCESS;如果任何捕获的工作未完成,则返回 CUDA_ERROR_NOT_READY。
对于统一内存的目的,返回 CUDA_SUCCESS 值等同于调用 cuEventSynchronize()。
注意请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventRecord, cuEventSynchronize, cuEventDestroy, cuEventElapsedTime, cudaEventQuery
- CUresult cuEventRecord ( CUevent hEvent, CUstream hStream )
-
记录事件。
参数
- hEvent
- hEvent
- - 要记录的事件
- hStream
返回值
- 要记录事件的流
描述
捕获在hEventhStream- 要记录的事件的内容,在调用时。hEvent和- 要记录的事件hStream 必须来自同一上下文,否则返回 CUDA_ERROR_INVALID_HANDLE。然后,诸如 cuEventQuery() 或 cuStreamWaitEvent() 之类的调用将检查或等待捕获的工作完成。使用 hEvent 在此调用之后不会修改 hEvent。有关默认情况下捕获的内容,请参阅关于默认流行为的注释。- 要记录的事件hEventhEvent。
cuEventRecord() 可以在同一事件上多次调用,并且会覆盖先前捕获的状态。诸如 cuStreamWaitEvent() 之类的其他 API 在 API 调用时使用最近捕获的状态,并且不受稍后调用 cuEventRecord() 的影响。在首次调用 cuEventRecord() 之前,事件表示一组空的工作,因此例如 cuEventQuery() 将返回 CUDA_SUCCESS。
注意-
此函数使用标准 默认流 语义。
-
请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventQuery, cuEventSynchronize, cuStreamWaitEvent, cuEventDestroy, cuEventElapsedTime, cudaEventRecord, cuEventRecordWithFlags
- CUresult cuEventRecordWithFlags ( CUevent hEvent, CUstream hStream, unsigned int flags )
-
记录事件。
参数
- hEvent
- hEvent
- - 要记录的事件
- hStream
- flags
- - 请参阅 CUevent_capture_flags
返回值
- 要记录事件的流
描述
捕获在hEventhStream- 要记录的事件的内容,在调用时。hEvent和- 要记录的事件hStream 必须来自同一上下文,否则返回 CUDA_ERROR_INVALID_HANDLE。然后,诸如 cuEventQuery() 或 cuStreamWaitEvent() 之类的调用将检查或等待捕获的工作完成。使用 hEvent 在此调用之后不会修改 hEvent。有关默认情况下捕获的内容,请参阅关于默认流行为的注释。- 要记录的事件hEventhEvent。
cuEventRecordWithFlags() 可以在同一事件上多次调用,并且会覆盖先前捕获的状态。诸如 cuStreamWaitEvent() 之类的其他 API 在 API 调用时使用最近捕获的状态,并且不受稍后调用 cuEventRecordWithFlags() 的影响。在首次调用 cuEventRecordWithFlags() 之前,事件表示一组空的工作,因此例如 cuEventQuery() 将返回 CUDA_SUCCESS。
标志包括
-
CU_EVENT_RECORD_DEFAULT: 默认事件创建标志。
-
CU_EVENT_RECORD_EXTERNAL: 在执行流捕获时,事件在图中作为外部事件节点捕获。此标志在流捕获之外无效。
注意-
此函数使用标准 默认流 语义。
-
请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventQuery, cuEventSynchronize, cuStreamWaitEvent, cuEventDestroy, cuEventElapsedTime, cuEventRecord, cudaEventRecord
- CUresult cuEventSynchronize ( CUevent hEvent )
-
等待事件完成。
参数
- hEvent
- - 等待的事件
返回值
CUDA_SUCCESS, CUDA_ERROR_DEINITIALIZED, CUDA_ERROR_NOT_INITIALIZED, CUDA_ERROR_INVALID_CONTEXT, CUDA_ERROR_INVALID_HANDLE
描述
等待直到当前捕获在事件中的所有工作完成。hEvent。cuEventRecord() 详细介绍了事件捕获的内容。
等待使用 CU_EVENT_BLOCKING_SYNC 标志创建的事件将导致调用 CPU 线程阻塞,直到设备完成该事件。如果未设置 CU_EVENT_BLOCKING_SYNC 标志,则 CPU 线程将忙等待,直到设备完成该事件。
注意请注意,此函数也可能返回来自先前异步启动的错误代码。
另请参阅
cuEventCreate, cuEventRecord, cuEventQuery, cuEventDestroy, cuEventElapsedTime, cudaEventSynchronize