3.10. 事件
这些事件之一将创建一个 CUDBGEvent
-
当前内核的 elf 映像已加载,并且其 DWARF 节中的地址已重新定位(现在可用于设置断点),
-
设备断点已被命中,
-
CUDA 内核已准备好启动,
-
CUDA 内核已终止。
收到通知后,调试器负责通过使用 CUDBGAPI_st::getNextEvent() 处理事件队列中的 CUDBGEvents,并通过调用 CUDBGAPI_st::acknowledgeEvent() 向调试器 API 确认事件已处理。 如果事件是由设备本身引发的(例如,命中断点),则事件队列将为空。 调试器有责任在每次收到 CUDBGEvent 时检查硬件。
示例
CUDBGEvent event; CUDBGResult res; for (res = cudbgAPI->getNextEvent(&event); res == CUDBG_SUCCESS && event.kind != CUDBG_EVENT_INVALID; res = cudbgAPI->getNextEvent(&event)) { switch (event.kind) { case CUDBG_EVENT_ELF_IMAGE_LOADED: //... break; case CUDBG_EVENT_KERNEL_READY: //... break; case CUDBG_EVENT_KERNEL_FINISHED: //... break; default: error(...); } }
请参阅 cuda-gdb 源代码中的 cuda-tdep.c 和 cuda-linux-nat.c 文件,以获取有关如何使用 CUDBGEvent 的更详细示例。
类
- struct
- 事件信息容器。
- struct
- 传递给使用 setNotifyNewEventCallback 函数设置的回调的事件信息。
- struct
- 传递给使用 setNotifyNewEventCallback 函数设置的回调的事件信息。
类型定义
- typedef void ( *CUDBGNotifyNewEventCallback )( CUDBGEventCallbackData* data )
- 用于通知调试器事件队列中存在新事件的函数的函数类型。
- typedef void ( *CUDBGNotifyNewEventCallback31 )( void* data )
- 用于通知调试器事件队列中存在新事件的函数的函数类型。
枚举
- enum CUDBGEventKind
- CUDA 内核事件。
变量
- CUDBGResult ( *CUDBGAPI_st::acknowledgeEvent30 )( CUDBGEvent30* event )
- 通知调试器 API 事件已处理。
- CUDBGResult ( *CUDBGAPI_st::acknowledgeEvents42 )( )
- 通知调试器 API 同步事件已处理。
- CUDBGResult ( *CUDBGAPI_st::acknowledgeSyncEvents )( )
- 通知调试器 API 同步事件已处理。
- CUDBGResult ( *CUDBGAPI_st::getErrorStringEx )( char* buf, uint32_t bufSz, uint32_t* msgSz )
- 使用以 null 结尾的 ASCII 字符串编码的错误消息填充用户提供的缓冲区。 错误消息特定于上次失败的 API 调用,并在每次 API 调用后失效。
- CUDBGResult ( *CUDBGAPI_st::getNextAsyncEvent50 )( CUDBGEvent50* event )
- 将异步事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 异步事件队列与正常事件队列分开保存,并且不需要调试客户端的确认。
- CUDBGResult ( *CUDBGAPI_st::getNextAsyncEvent55 )( CUDBGEvent55* event )
- 将异步事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 异步事件队列与正常事件队列分开保存,并且不需要调试客户端的确认。
- CUDBGResult ( *CUDBGAPI_st::getNextEvent )( CUDBGEventQueueType type, CUDBGEvent* event )
- 将下一个可用事件复制到“event”并将其从队列中移除。
- CUDBGResult ( *CUDBGAPI_st::getNextEvent30 )( CUDBGEvent30* event )
- 将事件队列中的下一个可用事件复制到“event”并将其从队列中移除。
- CUDBGResult ( *CUDBGAPI_st::getNextEvent32 )( CUDBGEvent32* event )
- 将事件队列中的下一个可用事件复制到“event”并将其从队列中移除。
- CUDBGResult ( *CUDBGAPI_st::getNextEvent42 )( CUDBGEvent42* event )
- 将事件队列中的下一个可用事件复制到“event”并将其从队列中移除。
- CUDBGResult ( *CUDBGAPI_st::getNextSyncEvent50 )( CUDBGEvent50* event )
- CUDBGResult ( *CUDBGAPI_st::getNextSyncEvent55 )( CUDBGEvent55* event )
- 将同步事件队列中的下一个可用事件复制到“event”并将其从队列中移除。
- CUDBGResult ( *CUDBGAPI_st::setNotifyNewEventCallback )( CUDBGNotifyNewEventCallback callback )
- 向 API 提供要调用的函数,以通知调试器新的应用程序或设备事件。
- CUDBGResult ( *CUDBGAPI_st::setNotifyNewEventCallback31 )( CUDBGNotifyNewEventCallback31 callback, void* data )
- 向 API 提供要调用的函数,以通知调试器新的应用程序或设备事件。
- CUDBGResult ( *CUDBGAPI_st::setNotifyNewEventCallback40 )( CUDBGNotifyNewEventCallback40 callback )
- 向 API 提供要调用的函数,以通知调试器新的应用程序或设备事件。
类型定义
枚举
- enum CUDBGEventKind
-
值
- CUDBG_EVENT_INVALID = 0x000
- 无效事件。
- CUDBG_EVENT_ELF_IMAGE_LOADED = 0x001
- CUDA 源代码模块的 ELF 映像可用。
- CUDBG_EVENT_KERNEL_READY = 0x002
- CUDA 内核即将启动。
- CUDBG_EVENT_KERNEL_FINISHED = 0x003
- CUDA 内核已终止。
- CUDBG_EVENT_INTERNAL_ERROR = 0x004
- 发生内部错误。 调试框架可能不稳定。
- CUDBG_EVENT_CTX_PUSH = 0x005
- CUDA 上下文已推送。
- CUDBG_EVENT_CTX_POP = 0x006
- CUDA CTX 已弹出。
- CUDBG_EVENT_CTX_CREATE = 0x007
- CUDA CTX 已创建。
- CUDBG_EVENT_CTX_DESTROY = 0x008
- CUDA 上下文已销毁。
- CUDBG_EVENT_TIMEOUT = 0x009
- 超时事件以固定的时间间隔发送。 可以安全地忽略此事件。
- CUDBG_EVENT_ATTACH_COMPLETE = 0x00a
- 附加过程已完成,可以开始调试设备代码。
- CUDBG_EVENT_DETACH_COMPLETE = 0x00b
- CUDBG_EVENT_ELF_IMAGE_UNLOADED = 0x00c
- CUDBG_EVENT_FUNCTIONS_LOADED = 0x00d
- CUDBG_EVENT_ALL_DEVICES_SUSPENDED = 0x00e
变量
- CUDBGResult ( *CUDBGAPI_st::acknowledgeEvent30 )( CUDBGEvent30* event )
-
通知调试器 API 事件已处理。 自 CUDA 3.0 起。
参数
- event
- - 指向已处理事件的指针
返回值
CUDBG_SUCCESS
- CUDBGResult ( *CUDBGAPI_st::acknowledgeEvents42 )( )
-
通知调试器 API 同步事件已处理。 自 CUDA 3.1 起。
返回值
CUDBG_SUCCESS
- CUDBGResult ( *CUDBGAPI_st::acknowledgeSyncEvents )( )
-
通知调试器 API 同步事件已处理。 自 CUDA 5.0 起。
返回值
CUDBG_SUCCESS
- CUDBGResult ( *CUDBGAPI_st::getErrorStringEx )( char* buf, uint32_t bufSz, uint32_t* msgSz )
-
使用以 null 结尾的 ASCII 字符串编码的错误消息填充用户提供的缓冲区。 错误消息特定于上次失败的 API 调用,并在每次 API 调用后失效。 自 CUDA 12.2 起。
另请参阅
getErrorString
参数
- buf
- - 目标缓冲区
- bufSz
- - 目标缓冲区的大小(以字节为单位)
- msgSz
- - 错误消息的大小,包括终止 null 字符。
返回值
CUDBG_SUCCESS、CUDBG_ERROR_BUFFER_TOO_SMALL CUDBG_ERROR_INVALID_ARGS、CUDBG_ERROR_UNINITIALIZED
- CUDBGResult ( *CUDBGAPI_st::getNextAsyncEvent50 )( CUDBGEvent50* event )
-
将异步事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 异步事件队列与正常事件队列分开保存,并且不需要调试客户端的确认。 自 CUDA 5.0 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextAsyncEvent55 )( CUDBGEvent55* event )
-
将异步事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 异步事件队列与正常事件队列分开保存,并且不需要调试客户端的确认。 自 CUDA 5.5 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextEvent )( CUDBGEventQueueType type, CUDBGEvent* event )
-
将下一个可用事件复制到“event”并将其从队列中移除。 自 CUDA 6.0 起。
参数
- type
- - 应用程序事件队列类型
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextEvent30 )( CUDBGEvent30* event )
-
将事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 自 CUDA 3.0 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextEvent32 )( CUDBGEvent32* event )
-
将事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 自 CUDA 3.1 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextEvent42 )( CUDBGEvent42* event )
-
将事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 自 CUDA 4.0 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextSyncEvent50 )( CUDBGEvent50* event )
-
自 CUDA 5.0 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::getNextSyncEvent55 )( CUDBGEvent55* event )
-
将同步事件队列中的下一个可用事件复制到“event”并将其从队列中移除。 自 CUDA 5.5 起。
参数
- event
- - 指向要在其中复制事件参数的事件容器的指针
返回值
CUDBG_SUCCESS、CUDBG_ERROR_NO_EVENT_AVAILABLE、CUDBG_ERROR_INVALID_ARGS
- CUDBGResult ( *CUDBGAPI_st::setNotifyNewEventCallback )( CUDBGNotifyNewEventCallback callback )
-
向 API 提供要调用的函数,以通知调试器新的应用程序或设备事件。 自 CUDA 4.1 起。
参数
- callback
- - 回调函数
返回值
CUDBG_SUCCESS
- CUDBGResult ( *CUDBGAPI_st::setNotifyNewEventCallback31 )( CUDBGNotifyNewEventCallback31 callback, void* data )
-
向 API 提供要调用的函数,以通知调试器新的应用程序或设备事件。 自 CUDA 3.0 起。
参数
- callback
- - 回调函数
- data
- - 要传递给回调的指针(调用时)
返回值
CUDBG_SUCCESS
- CUDBGResult ( *CUDBGAPI_st::setNotifyNewEventCallback40 )( CUDBGNotifyNewEventCallback40 callback )
-
向 API 提供要调用的函数,以通知调试器新的应用程序或设备事件。 自 CUDA 3.2 起。
参数
- callback
- - 回调函数
返回值
CUDBG_SUCCESS