5.4. CUPTI Event API
实现 CUPTI Event API 的函数、类型和枚举。
注意
来自头文件 cupti_events.h 的 CUPTI 事件 API 在计算能力为 7.5 及更高版本(即 Turing 及更高版本的 GPU 架构)的设备上不受支持。此 API 在 CUDA 12.8 版本中已弃用,并将在未来的 CUDA 版本中删除。它已被头文件 cupti_profiler_host.h 中的主机分析 API 和头文件 cupti_range_profiler.h 中的目标分析 API 取代,这些 API 在计算能力为 7.0 及更高版本(即 Volta 及更高版本的 GPU 架构)的设备上受支持。
数据结构
- CUpti_EventGroupSet
一组事件组。
- CUpti_EventGroupSets
一组事件组集合。
宏
- CUPTI_EVENT_INVALID
指示事件值无效的值。
- CUPTI_EVENT_OVERFLOW
CUPTI 事件的溢出值。
枚举
- CUpti_DeviceAttribute
设备属性。
- CUpti_DeviceAttributeDeviceClass
设备类别。
- CUpti_EventAttribute
事件属性。
- CUpti_EventCategory
事件类别。
- CUpti_EventCollectionMethod
用于事件的收集方法。
- CUpti_EventCollectionMode
事件收集模式。
- CUpti_EventDomainAttribute
事件域属性。
- CUpti_EventGroupAttribute
事件组属性。
- CUpti_EventProfilingScope
事件的分析范围。
- CUpti_ReadEventFlags
用于 cuptiEventGroupReadEvent 和 cuptiEventGroupReadAllEvents 的标志。
函数
- CUptiResult cuptiDeviceEnumEventDomains(CUdevice device, size_t *arraySizeBytes, CUpti_EventDomainID *domainArray)
获取设备的事件域。
- CUptiResult cuptiDeviceGetAttribute(CUdevice device, CUpti_DeviceAttribute attrib, size_t *valueSize, void *value)
读取设备属性。
- CUptiResult cuptiDeviceGetEventDomainAttribute(CUdevice device, CUpti_EventDomainID eventDomain, CUpti_EventDomainAttribute attrib, size_t *valueSize, void *value)
读取事件域属性。
- CUptiResult cuptiDeviceGetNumEventDomains(CUdevice device, uint32_t *numDomains)
获取设备的域数量。
- CUptiResult cuptiDisableKernelReplayMode(CUcontext context)
禁用内核重放模式。
- CUptiResult cuptiEnableKernelReplayMode(CUcontext context)
启用内核重放模式。
- CUptiResult cuptiEnumEventDomains(size_t *arraySizeBytes, CUpti_EventDomainID *domainArray)
获取任何设备上可用的事件域。
- CUptiResult cuptiEventDomainEnumEvents(CUpti_EventDomainID eventDomain, size_t *arraySizeBytes, CUpti_EventID *eventArray)
获取域中的事件。
- CUptiResult cuptiEventDomainGetAttribute(CUpti_EventDomainID eventDomain, CUpti_EventDomainAttribute attrib, size_t *valueSize, void *value)
读取事件域属性。
- CUptiResult cuptiEventDomainGetNumEvents(CUpti_EventDomainID eventDomain, uint32_t *numEvents)
获取域中事件的数量。
- CUptiResult cuptiEventGetAttribute(CUpti_EventID event, CUpti_EventAttribute attrib, size_t *valueSize, void *value)
获取事件属性。
- CUptiResult cuptiEventGetIdFromName(CUdevice device, const char *eventName, CUpti_EventID *event)
通过名称查找事件。
- CUptiResult cuptiEventGroupAddEvent(CUpti_EventGroup eventGroup, CUpti_EventID event)
向事件组添加事件。
- CUptiResult cuptiEventGroupCreate(CUcontext context, CUpti_EventGroup *eventGroup, uint32_t flags)
为上下文创建新的事件组。
- CUptiResult cuptiEventGroupDestroy(CUpti_EventGroup eventGroup)
销毁事件组。
- CUptiResult cuptiEventGroupDisable(CUpti_EventGroup eventGroup)
禁用事件组。
- CUptiResult cuptiEventGroupEnable(CUpti_EventGroup eventGroup)
启用事件组。
- CUptiResult cuptiEventGroupGetAttribute(CUpti_EventGroup eventGroup, CUpti_EventGroupAttribute attrib, size_t *valueSize, void *value)
读取事件组属性。
- CUptiResult cuptiEventGroupReadAllEvents(CUpti_EventGroup eventGroup, CUpti_ReadEventFlags flags, size_t *eventValueBufferSizeBytes, uint64_t *eventValueBuffer, size_t *eventIdArraySizeBytes, CUpti_EventID *eventIdArray, size_t *numEventIdsRead)
读取事件组中所有事件的值。
- CUptiResult cuptiEventGroupReadEvent(CUpti_EventGroup eventGroup, CUpti_ReadEventFlags flags, CUpti_EventID event, size_t *eventValueBufferSizeBytes, uint64_t *eventValueBuffer)
读取事件组中一个事件的值。
- CUptiResult cuptiEventGroupRemoveAllEvents(CUpti_EventGroup eventGroup)
从事件组中移除所有事件。
- CUptiResult cuptiEventGroupRemoveEvent(CUpti_EventGroup eventGroup, CUpti_EventID event)
从事件组中移除一个事件。
- CUptiResult cuptiEventGroupResetAllEvents(CUpti_EventGroup eventGroup)
将事件组中的所有事件计数归零。
- CUptiResult cuptiEventGroupSetAttribute(CUpti_EventGroup eventGroup, CUpti_EventGroupAttribute attrib, size_t valueSize, void *value)
写入事件组属性。
- CUptiResult cuptiEventGroupSetDisable(CUpti_EventGroupSet *eventGroupSet)
禁用事件组集合。
- CUptiResult cuptiEventGroupSetEnable(CUpti_EventGroupSet *eventGroupSet)
启用事件组集合。
- CUptiResult cuptiEventGroupSetsCreate(CUcontext context, size_t eventIdArraySizeBytes, CUpti_EventID *eventIdArray, CUpti_EventGroupSets **eventGroupPasses)
对于一组事件,获取指示收集事件所需的通道数和事件组的分组。
- CUptiResult cuptiEventGroupSetsDestroy(CUpti_EventGroupSets *eventGroupSets)
销毁事件组集合对象。
- CUptiResult cuptiGetNumEventDomains(uint32_t *numDomains)
获取任何设备上可用的事件域的数量。
- CUptiResult cuptiKernelReplaySubscribeUpdate(CUpti_KernelReplayUpdateFunc updateFunc, void *customData)
订阅内核重放更新。
- CUptiResult cuptiSetEventCollectionMode(CUcontext context, CUpti_EventCollectionMode mode)
设置事件收集模式。
类型定义
- CUpti_EventDomainID
事件域的 ID。
- CUpti_EventGroup
一组事件。
- CUpti_EventID
事件的 ID。
- CUpti_KernelReplayUpdateFunc
用于获取内核重放更新的函数类型。
5.4.1. 宏
-
CUPTI_EVENT_INVALID
指示事件值无效的值。
-
CUPTI_EVENT_OVERFLOW
CUPTI 事件的溢出值。
指示溢出的 CUPTI 事件值。
5.4.2. 枚举
-
enum CUpti_DeviceAttribute
设备属性。
CUPTI 设备属性。这些属性可以使用 cuptiDeviceGetAttribute 读取。
值
-
enumerator CUPTI_DEVICE_ATTR_MAX_EVENT_ID
设备的事件 ID 数量。
值类型为 uint32_t。
-
enumerator CUPTI_DEVICE_ATTR_MAX_EVENT_DOMAIN_ID
设备的事件域 ID 数量。
值类型为 uint32_t。
-
enumerator CUPTI_DEVICE_ATTR_GLOBAL_MEMORY_BANDWIDTH
以 Kbytes/秒为单位获取全局内存带宽。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_INSTRUCTION_PER_CYCLE
获取每个周期的理论最大指令数。
值类型为 uint32_t。
-
enumerator CUPTI_DEVICE_ATTR_INSTRUCTION_THROUGHPUT_SINGLE_PRECISION
获取每秒可以执行的理论最大单精度指令数。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_MAX_FRAME_BUFFERS
获取设备的帧缓冲区数量。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_PCIE_LINK_RATE
以 Mega bits/秒为单位获取设备的 PCIE 链路速率。
如果总线类型为非 PCIE,则返回 0。值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_PCIE_LINK_WIDTH
获取设备的 PCIE 链路宽度。
如果总线类型为非 PCIE,则返回 0。值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_PCIE_GEN
获取设备的 PCIE 代数。
如果总线类型为非 PCIE,则返回 0。值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_DEVICE_CLASS
获取设备的类别。
值类型为 CUpti_DeviceAttributeDeviceClass。
-
enumerator CUPTI_DEVICE_ATTR_FLOP_SP_PER_CYCLE
获取单精度浮点运算的峰值/周期。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_FLOP_DP_PER_CYCLE
获取双精度浮点运算的峰值/周期。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_MAX_L2_UNITS
获取 L2 单元的数量。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_MAX_SHARED_MEMORY_CACHE_CONFIG_PREFER_SHARED
获取 CU_FUNC_CACHE_PREFER_SHARED 偏好设置的最大共享内存。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_MAX_SHARED_MEMORY_CACHE_CONFIG_PREFER_L1
获取 CU_FUNC_CACHE_PREFER_L1 偏好设置的最大共享内存。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_MAX_SHARED_MEMORY_CACHE_CONFIG_PREFER_EQUAL
获取 CU_FUNC_CACHE_PREFER_EQUAL 偏好设置的最大共享内存。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_FLOP_HP_PER_CYCLE
获取半精度浮点运算的峰值/周期。
值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_NVLINK_PRESENT
检查 Nvlink 是否连接到设备。
如果至少有一个 Nvlink 连接到设备,则返回 1,否则返回 0。值类型为 uint32_t。
-
enumerator CUPTI_DEVICE_ATTR_GPU_CPU_NVLINK_BW
检查 GPU 和 CPU 之间是否存在 Nvlink。
如果存在 Nvlink,则返回带宽(以 Bytes/秒为单位),否则返回 0。值类型为 uint64_t。
-
enumerator CUPTI_DEVICE_ATTR_NVSWITCH_PRESENT
检查底层拓扑中是否存在 NVSwitch。
如果存在,则返回 1,否则返回 0。值类型为 uint32_t。
-
enumerator CUPTI_DEVICE_ATTR_FORCE_INT
-
enumerator CUPTI_DEVICE_ATTR_MAX_EVENT_ID
-
enum CUpti_DeviceAttributeDeviceClass
设备类别。
设备属性 CUPTI_DEVICE_ATTR_DEVICE_CLASS 的设备类别枚举。
值
-
enumerator CUPTI_DEVICE_ATTR_DEVICE_CLASS_TESLA
-
enumerator CUPTI_DEVICE_ATTR_DEVICE_CLASS_QUADRO
-
enumerator CUPTI_DEVICE_ATTR_DEVICE_CLASS_GEFORCE
-
enumerator CUPTI_DEVICE_ATTR_DEVICE_CLASS_TEGRA
-
enumerator CUPTI_DEVICE_ATTR_DEVICE_CLASS_TESLA
-
enum CUpti_EventAttribute
事件属性。
事件属性。这些属性可以使用 cuptiEventGetAttribute 读取。
值
-
enumerator CUPTI_EVENT_ATTR_NAME
事件名称。
值类型为以 null 结尾的 const c 字符串。
-
enumerator CUPTI_EVENT_ATTR_SHORT_DESCRIPTION
事件的简短描述。
值类型为以 null 结尾的 const c 字符串。
-
enumerator CUPTI_EVENT_ATTR_LONG_DESCRIPTION
事件的详细描述。
值类型为以 null 结尾的 const c 字符串。
-
enumerator CUPTI_EVENT_ATTR_CATEGORY
事件的类别。
值类型为 CUpti_EventCategory。
-
enumerator CUPTI_EVENT_ATTR_PROFILING_SCOPE
事件的分析范围。
它可以是设备或上下文,或者两者兼而有之。值类型为 CUpti_EventProfilingScope。
-
enumerator CUPTI_EVENT_ATTR_FORCE_INT
-
enumerator CUPTI_EVENT_ATTR_NAME
-
enum CUpti_EventCategory
事件类别。
每个事件都分配到一个类别,该类别表示事件的通用类型。事件的类别使用 cuptiEventGetAttribute 和 CUPTI_EVENT_ATTR_CATEGORY 属性进行访问。
值
-
enumerator CUPTI_EVENT_CATEGORY_INSTRUCTION
与指令相关的事件。
-
enumerator CUPTI_EVENT_CATEGORY_MEMORY
与内存相关的事件。
-
enumerator CUPTI_EVENT_CATEGORY_CACHE
与缓存相关的事件。
-
enumerator CUPTI_EVENT_CATEGORY_PROFILE_TRIGGER
profile-trigger 事件。
-
enumerator CUPTI_EVENT_CATEGORY_SYSTEM
系统事件。
-
enumerator CUPTI_EVENT_CATEGORY_FORCE_INT
-
enumerator CUPTI_EVENT_CATEGORY_INSTRUCTION
-
enum CUpti_EventCollectionMethod
用于事件的收集方法。
收集方法指示事件的收集方式。
值
-
enumerator CUPTI_EVENT_COLLECTION_METHOD_PM
使用硬件全局性能监视器收集事件。
-
enumerator CUPTI_EVENT_COLLECTION_METHOD_SM
事件使用硬件 SM 性能监视器收集。
-
enumerator CUPTI_EVENT_COLLECTION_METHOD_INSTRUMENTED
事件使用软件插桩收集。
-
enumerator CUPTI_EVENT_COLLECTION_METHOD_NVLINK_TC
事件使用 NvLink 吞吐量计数器方法收集。
-
enumerator CUPTI_EVENT_COLLECTION_METHOD_FORCE_INT
-
enumerator CUPTI_EVENT_COLLECTION_METHOD_PM
-
enum CUpti_EventCollectionMode
事件收集模式。
事件收集模式决定了将在其中收集已启用事件组内事件的周期。
值
-
enumerator CUPTI_EVENT_COLLECTION_MODE_CONTINUOUS
事件在 cuptiEventGroupEnable 和 cuptiEventGroupDisable 调用之间的整个持续时间内收集。
当事件被读取时,事件值会被重置。对于 CUDA 工具包 v6.0 及更早版本,这是默认模式。
-
enumerator CUPTI_EVENT_COLLECTION_MODE_KERNEL
事件仅在 cuptiEventGroupEnable 和 cuptiEventGroupDisable 调用之间发生的内核执行期间收集。
事件收集在内核执行开始时开始,并在内核执行完成时停止。每次内核执行开始时,事件值将重置为零。如果在 cuptiEventGroupEnable 和 cuptiEventGroupDisable 调用之间发生多次内核执行,则如果需要将这些事件与特定的内核启动相关联,则必须在每次内核启动后读取事件值。请注意,在此模式下收集可能会显着改变应用程序的整体性能特征,因为在 cuptiEventGroupEnable 和 cuptiEventGroupDisable 调用之间发生的内核执行在 GPU 上是串行化的。这是 CUDA 工具包 v6.5 及更高版本的默认模式。
-
enumerator CUPTI_EVENT_COLLECTION_MODE_FORCE_INT
-
enumerator CUPTI_EVENT_COLLECTION_MODE_CONTINUOUS
-
enum CUpti_EventDomainAttribute
事件域属性。
事件域属性。除非另有说明,否则所有属性都可以使用 cuptiDeviceGetEventDomainAttribute 或 cuptiEventDomainGetAttribute 读取。
值
-
enumerator CUPTI_EVENT_DOMAIN_ATTR_NAME
事件域名称。
值类型为以 null 结尾的 const c 字符串。
-
enumerator CUPTI_EVENT_DOMAIN_ATTR_INSTANCE_COUNT
将为其收集事件计数的域实例数。
该域可能具有无法进行性能分析的其他实例(请参阅 CUPTI_EVENT_DOMAIN_ATTR_TOTAL_INSTANCE_COUNT)。只能使用 cuptiDeviceGetEventDomainAttribute 读取。值为 uint32_t。
-
enumerator CUPTI_EVENT_DOMAIN_ATTR_TOTAL_INSTANCE_COUNT
域的实例总数,包括无法进行性能分析的实例。
使用 CUPTI_EVENT_DOMAIN_ATTR_INSTANCE_COUNT 获取可以进行性能分析的实例数。只能使用 cuptiDeviceGetEventDomainAttribute 读取。值为 uint32_t。
-
enumerator CUPTI_EVENT_DOMAIN_ATTR_COLLECTION_METHOD
用于事件域中包含的事件的收集方法。
-
enumerator CUPTI_EVENT_DOMAIN_ATTR_FORCE_INT
-
enumerator CUPTI_EVENT_DOMAIN_ATTR_NAME
-
enum CUpti_EventGroupAttribute
事件组属性。
事件组属性。这些属性可以使用 cuptiEventGroupGetAttribute 读取。标记为 [rw] 的属性也可以使用 cuptiEventGroupSetAttribute 写入。
值
-
enumerator CUPTI_EVENT_GROUP_ATTR_EVENT_DOMAIN_ID
事件组绑定的域。
此属性在将第一个事件添加到组时设置。值为 CUpti_EventDomainID。
-
enumerator CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES
[rw] 为此事件组分析域的所有实例。
此功能可用于获取域的所有实例之间的负载平衡。值为整数。
-
enumerator CUPTI_EVENT_GROUP_ATTR_USER_DATA
[rw] 保留供用户数据使用。
-
enumerator CUPTI_EVENT_GROUP_ATTR_NUM_EVENTS
组中事件的数量。
值类型为 uint32_t。
-
enumerator CUPTI_EVENT_GROUP_ATTR_EVENTS
枚举组中的事件。
值是指向大小为 sizeof(CUpti_EventID) * eventgroup 中事件数量的缓冲区的指针。事件数量可以使用 CUPTI_EVENT_GROUP_ATTR_NUM_EVENTS 查询。
-
enumerator CUPTI_EVENT_GROUP_ATTR_INSTANCE_COUNT
将要计数的绑定到此事件组的域的实例数。
值类型为 uint32_t。
-
enumerator CUPTI_EVENT_GROUP_ATTR_PROFILING_SCOPE
事件组范围可以在添加任何事件之前设置为 CUPTI_EVENT_PROFILING_SCOPE_DEVICE 或 CUPTI_EVENT_PROFILING_SCOPE_CONTEXT 以用于事件组。
当将要添加的事件的范围为 CUPTI_EVENT_PROFILING_SCOPE_BOTH 时,将事件组的范围设置为 CUPTI_EVENT_PROFILING_SCOPE_DEVICE 或 CUPTI_EVENT_PROFILING_SCOPE_CONTEXT。如果事件的性能分析范围是 CUPTI_EVENT_PROFILING_SCOPE_DEVICE 或 CUPTI_EVENT_PROFILING_SCOPE_CONTEXT,则设置此属性不会影响默认范围。不允许将不同范围的事件添加到同一事件组。值为 uint32_t。
-
enumerator CUPTI_EVENT_GROUP_ATTR_FORCE_INT
-
enumerator CUPTI_EVENT_GROUP_ATTR_EVENT_DOMAIN_ID
-
enum CUpti_EventProfilingScope
事件的分析范围。
事件的性能分析范围指示事件可以在上下文范围或设备范围或两者(即,它可以收集在任何上下文或设备范围)下收集。
值
-
enumerator CUPTI_EVENT_PROFILING_SCOPE_CONTEXT
事件在上下文范围内收集。
-
enumerator CUPTI_EVENT_PROFILING_SCOPE_DEVICE
事件在设备范围内收集。
-
enumerator CUPTI_EVENT_PROFILING_SCOPE_BOTH
事件可以在设备或上下文范围内收集。
范围可以使用 cuptiEventGroupSetAttribute API 设置。
-
enumerator CUPTI_EVENT_PROFILING_SCOPE_FORCE_INT
-
enumerator CUPTI_EVENT_PROFILING_SCOPE_CONTEXT
-
enum CUpti_ReadEventFlags
用于 cuptiEventGroupReadEvent 和 cuptiEventGroupReadAllEvents 的标志。
用于 cuptiEventGroupReadEvent 和 cuptiEventGroupReadAllEvents 的标志。
值
-
enumerator CUPTI_EVENT_READ_FLAG_NONE
无标志。
-
enumerator CUPTI_EVENT_READ_FLAG_FORCE_INT
-
enumerator CUPTI_EVENT_READ_FLAG_NONE
5.4.3. 函数
-
CUptiResult cuptiDeviceEnumEventDomains(CUdevice device, size_t *arraySizeBytes, CUpti_EventDomainID *domainArray)
获取设备的事件域。
返回设备的事件域 ID 在
domainArray
中。domainArray
缓冲区的大小由*arraySizeBytes
给出。domainArray
缓冲区的大小必须至少为numdomains
* sizeof(CUpti_EventDomainID),否则将不会返回所有域。在*arraySizeBytes
中返回的值包含在domainArray
中返回的字节数。注意
线程安全性:此函数是线程安全的。
- 参数
device – CUDA 设备
arraySizeBytes –
domainArray
的大小(以字节为单位),并返回写入domainArray
的字节数domainArray – 返回设备的事件域 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_DEVICE –
CUPTI_ERROR_INVALID_PARAMETER – 如果
arraySizeBytes
或domainArray
为 NULL
-
CUptiResult cuptiDeviceGetAttribute(CUdevice device, CUpti_DeviceAttribute attrib, size_t *valueSize, void *value)
读取设备属性。
读取设备属性并在
*value
中返回它。注意
线程安全性:此函数是线程安全的。
- 参数
device – CUDA 设备
attrib – 要读取的属性
valueSize – 由 value 指向的缓冲区的大小,并返回写入
value
的字节数value – 返回属性的值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_DEVICE –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attrib
不是设备属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 对于非 c 字符串属性值,指示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiDeviceGetEventDomainAttribute(CUdevice device, CUpti_EventDomainID eventDomain, CUpti_EventDomainAttribute attrib, size_t *valueSize, void *value)
读取事件域属性。
在
*value
中返回事件域属性。value
缓冲区的大小由*valueSize
给出。在*valueSize
中返回的值包含在value
中返回的字节数。如果属性值是长度超过
*valueSize
的 c 字符串,则只会返回前*valueSize
个字符,并且不会有终止空字节。注意
线程安全性:此函数是线程安全的。
- 参数
device – CUDA 设备
eventDomain – 事件域的 ID
attrib – 要读取的事件域属性
valueSize –
value
缓冲区的大小(以字节为单位),并返回写入value
的字节数value – 返回属性的值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_DEVICE –
CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attrib
不是事件域属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 对于非 c 字符串属性值,指示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiDeviceGetNumEventDomains(CUdevice device, uint32_t *numDomains)
获取设备的域数量。
在
numDomains
中返回设备的域数。注意
线程安全性:此函数是线程安全的。
- 参数
device – CUDA 设备
numDomains – 返回域的数量
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_DEVICE –
CUPTI_ERROR_INVALID_PARAMETER – 如果
numDomains
为 NULL
-
CUptiResult cuptiDisableKernelReplayMode(CUcontext context)
禁用内核重放模式。
将上下文的性能分析模式设置为非重放(默认)模式。事件收集模式将设置为 CUPTI_EVENT_COLLECTION_MODE_KERNEL。所有先前启用的事件组和事件组集都将被禁用。
注意
线程安全性:此函数是线程安全的。
- 参数
context – 上下文
- 返回值
CUPTI_SUCCESS –
-
CUptiResult cuptiEnableKernelReplayMode(CUcontext context)
启用内核重放模式。
将上下文的性能分析模式设置为重放模式。在此模式下,可以在内核的一次运行中收集任意数量的事件。事件收集模式将自动切换到 CUPTI_EVENT_COLLECTION_MODE_KERNEL。在此模式下,cuptiSetEventCollectionMode 将返回 CUPTI_ERROR_INVALID_OPERATION。
注意
如果启用了很多事件,内核可能需要更长的时间才能运行。
注意
线程安全性:此函数是线程安全的。
- 参数
context – 上下文
- 返回值
CUPTI_SUCCESS –
-
CUptiResult cuptiEnumEventDomains(size_t *arraySizeBytes, CUpti_EventDomainID *domainArray)
获取任何设备上可用的事件域。
返回任何支持 CUDA 的设备上可用的所有事件域。事件域 ID 在
domainArray
中返回。domainArray
缓冲区的大小由*arraySizeBytes
给出。domainArray
缓冲区的大小必须至少为numDomains
* sizeof(CUpti_EventDomainID),否则将不会返回所有域。在*arraySizeBytes
中返回的值包含在domainArray
中返回的字节数。注意
线程安全性:此函数是线程安全的。
- 参数
arraySizeBytes –
domainArray
的大小(以字节为单位),并返回写入domainArray
的字节数domainArray – 返回所有事件域
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
arraySizeBytes
或domainArray
为 NULL
-
CUptiResult cuptiEventDomainEnumEvents(CUpti_EventDomainID eventDomain, size_t *arraySizeBytes, CUpti_EventID *eventArray)
获取域中的事件。
返回域的事件 ID 在
eventArray
中。eventArray
缓冲区的大小由*arraySizeBytes
给出。eventArray
缓冲区的大小必须至少为numdomainevents
* sizeof(CUpti_EventID),否则将不会返回所有事件。在*arraySizeBytes
中返回的值包含在eventArray
中返回的字节数。注意
线程安全性:此函数是线程安全的。
- 参数
eventDomain – 事件域的 ID
arraySizeBytes –
eventArray
的大小(以字节为单位),并返回写入eventArray
的字节数eventArray – 返回域中事件的 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID –
CUPTI_ERROR_INVALID_PARAMETER – 如果
arraySizeBytes
或eventArray
为 NULL
-
CUptiResult cuptiEventDomainGetAttribute(CUpti_EventDomainID eventDomain, CUpti_EventDomainAttribute attrib, size_t *valueSize, void *value)
读取事件域属性。
在
*value
中返回事件域属性。value
缓冲区的大小由*valueSize
给出。在*valueSize
中返回的值包含在value
中返回的字节数。如果属性值是长度超过
*valueSize
的 c 字符串,则只会返回前*valueSize
个字符,并且不会有终止空字节。注意
线程安全性:此函数是线程安全的。
- 参数
eventDomain – 事件域的 ID
attrib – 要读取的事件域属性
valueSize –
value
缓冲区的大小(以字节为单位),并返回写入value
的字节数value – 返回属性的值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attrib
不是事件域属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 对于非 c 字符串属性值,指示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiEventDomainGetNumEvents(CUpti_EventDomainID eventDomain, uint32_t *numEvents)
获取域中事件的数量。
返回域的
numEvents
中的事件数量。注意
线程安全性:此函数是线程安全的。
- 参数
eventDomain – 事件域的 ID
numEvents – 返回域中的事件数量
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID –
CUPTI_ERROR_INVALID_PARAMETER – 如果
numEvents
为 NULL
-
CUptiResult cuptiEventGetAttribute(CUpti_EventID event, CUpti_EventAttribute attrib, size_t *valueSize, void *value)
获取事件属性。
在
*value
中返回事件属性。value
缓冲区的大小由*valueSize
给定。在*valueSize
中返回的值包含在value
中返回的字节数。如果属性值是长度超过
*valueSize
的 c 字符串,则只会返回前*valueSize
个字符,并且不会有终止空字节。注意
线程安全性:此函数是线程安全的。
- 参数
event – 事件的 ID
attrib – 要读取的事件属性
valueSize –
value
缓冲区的大小(以字节为单位),并返回写入value
的字节数value – 返回属性的值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_ID –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attrib
不是事件属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 对于非 c 字符串属性值,指示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiEventGetIdFromName(CUdevice device, const char *eventName, CUpti_EventID *event)
通过名称查找事件。
通过名称查找事件,并在
*event
中返回事件 ID。注意
线程安全性:此函数是线程安全的。
- 参数
device – CUDA 设备
eventName – 要查找的事件的名称
event – 返回找到的事件的 ID;如果无法找到事件,则返回未定义值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_DEVICE –
CUPTI_ERROR_INVALID_EVENT_NAME – 如果无法找到名称为
eventName
的事件。在这种情况下,*event
是未定义的CUPTI_ERROR_INVALID_PARAMETER – 如果
eventName
或event
为 NULL
-
CUptiResult cuptiEventGroupAddEvent(CUpti_EventGroup eventGroup, CUpti_EventID event)
向事件组添加事件。
向事件组添加事件。事件添加可能会因多种原因而失败
事件组已启用
事件不属于与事件组中已有的事件相同的事件域
设备对可以属于同一组的事件的限制
事件组已满
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 事件组
event – 要添加到组的事件
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_ID –
CUPTI_ERROR_OUT_OF_MEMORY –
CUPTI_ERROR_INVALID_OPERATION – 如果
eventGroup
已启用CUPTI_ERROR_NOT_COMPATIBLE – 如果
event
属于与eventGroup
中已有的事件不同的事件域,或者如果设备限制阻止event
与eventGroup
中已有的事件同时收集CUPTI_ERROR_MAX_LIMIT_REACHED – 如果
eventGroup
已满CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULL
-
CUptiResult cuptiEventGroupCreate(CUcontext context, CUpti_EventGroup *eventGroup, uint32_t flags)
为上下文创建新的事件组。
为
context
创建新的事件组,并在*eventGroup
中返回新组。注意
flags
为将来使用而保留,应设置为零。注意
线程安全性:此函数是线程安全的。
- 参数
context – 事件组的上下文
eventGroup – 返回新的事件组
flags – 保留 - 必须为零
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_CONTEXT –
CUPTI_ERROR_OUT_OF_MEMORY –
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULL
-
CUptiResult cuptiEventGroupDestroy(CUpti_EventGroup eventGroup)
销毁事件组。
销毁
eventGroup
并释放其资源。如果事件组已启用,则无法销毁它。注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 要销毁的事件组
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_OPERATION – 如果事件组已启用
CUPTI_ERROR_INVALID_PARAMETER – 如果 eventGroup 为 NULL
-
CUptiResult cuptiEventGroupDisable(CUpti_EventGroup eventGroup)
禁用事件组。
禁用事件组。禁用事件组会停止收集组中包含的事件。
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 事件组
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULL
-
CUptiResult cuptiEventGroupEnable(CUpti_EventGroup eventGroup)
启用事件组。
启用事件组。启用事件组会将组中所有事件的值清零,然后开始收集这些事件。
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 事件组
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_NOT_READY – 如果
eventGroup
不包含任何事件CUPTI_ERROR_NOT_COMPATIBLE – 如果由于其他已启用的事件组而无法启用
eventGroup
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULLCUPTI_ERROR_HARDWARE_BUSY – 如果另一个客户端正在进行分析并且硬件正忙
-
CUptiResult cuptiEventGroupGetAttribute(CUpti_EventGroup eventGroup, CUpti_EventGroupAttribute attrib, size_t *valueSize, void *value)
读取事件组属性。
读取事件组属性,并在
*value
中返回它。注意
线程安全性:此函数是线程安全的,但客户端必须防止同时销毁或修改
eventGroup
(例如,客户端必须防止同时调用 cuptiEventGroupDestroy、cuptiEventGroupAddEvent 等),并且必须防止同时销毁创建eventGroup
的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。- 参数
eventGroup – 事件组
attrib – 要读取的属性
valueSize – 由 value 指向的缓冲区的大小,并返回写入
value
的字节数value – 返回属性的值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attrib
不是事件组属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 对于非 c 字符串属性值,指示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiEventGroupReadAllEvents(CUpti_EventGroup eventGroup, CUpti_ReadEventFlags flags, size_t *eventValueBufferSizeBytes, uint64_t *eventValueBuffer, size_t *eventIdArraySizeBytes, CUpti_EventID *eventIdArray, size_t *numEventIdsRead)
读取事件组中所有事件的值。
读取事件组中所有事件的值。事件值在
eventValueBuffer
缓冲区中返回。eventValueBufferSizeBytes
指示eventValueBuffer
的大小。如果未在包含事件的组上设置 CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES,则缓冲区必须至少为 (sizeof(uint64) * 组中事件数)。如果在组上设置了 CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES,则缓冲区必须至少为 (sizeof(uint64) * 域实例数 * 组中事件数)。在
eventValueBuffer
中返回的数据格式为域实例 0:event0 event1 … eventN
域实例 1:event0 event1 … eventN
…
域实例 M:event0 event1 … eventN
eventValueBuffer
中的事件顺序在eventIdArray
中返回。eventIdArray
的大小在eventIdArraySizeBytes
中指定。大小应至少为 (sizeof(CUpti_EventID) * 组中事件数)。如果任何事件计数器的任何实例溢出,则为该事件实例返回的值将为 CUPTI_EVENT_OVERFLOW。
flags
的唯一允许值为 CUPTI_EVENT_READ_FLAG_NONE。不允许从禁用的事件组读取事件。读取后,事件的值将重置为零。
注意
线程安全性:此函数是线程安全的,但客户端必须防止同时销毁或修改
eventGroup
(例如,客户端必须防止同时调用 cuptiEventGroupDestroy、cuptiEventGroupAddEvent 等),并且必须防止同时销毁创建eventGroup
的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。如果 cuptiEventGroupResetAllEvents 与此函数同时调用,则返回的事件值是未定义的。- 参数
eventGroup – 事件组
flags – 控制读取模式的标志
eventValueBufferSizeBytes –
eventValueBuffer
的大小(以字节为单位),并返回写入eventValueBuffer
的字节数eventValueBuffer – 返回事件值
eventIdArraySizeBytes –
eventIdArray
的大小(以字节为单位),并返回写入eventIdArray
的字节数eventIdArray – 返回事件的 ID,其顺序与 eventValueBuffer 中返回的值的顺序相同。
numEventIdsRead – 返回在
eventIdArray
中返回的事件 ID 的数量
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_INVALID_OPERATION – 如果
eventGroup
已禁用CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
、eventValueBufferSizeBytes
、eventValueBuffer
、eventIdArraySizeBytes
、eventIdArray
或numEventIdsRead
为 NULLCUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 如果
eventValueBuffer
或eventIdArray
的大小不足
-
CUptiResult cuptiEventGroupReadEvent(CUpti_EventGroup eventGroup, CUpti_ReadEventFlags flags, CUpti_EventID event, size_t *eventValueBufferSizeBytes, uint64_t *eventValueBuffer)
读取事件组中一个事件的值。
读取事件组中某个事件的值。事件值在
eventValueBuffer
缓冲区中返回。eventValueBufferSizeBytes
指示eventValueBuffer
缓冲区的大小。如果未在包含事件的组上设置 CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES,则缓冲区必须至少为 sizeof(uint64)。如果在组上设置了 CUPTI_EVENT_GROUP_ATTR_PROFILE_ALL_DOMAIN_INSTANCES,则缓冲区必须至少为 (sizeof(uint64) * 域实例数)。如果任何事件计数器的任何实例溢出,则为该事件实例返回的值将为 CUPTI_EVENT_OVERFLOW。
flags
的唯一允许值为 CUPTI_EVENT_READ_FLAG_NONE。不允许从禁用的事件组读取事件。读取后,事件的值将重置为零。
注意
线程安全性:此函数是线程安全的,但客户端必须防止同时销毁或修改
eventGroup
(例如,客户端必须防止同时调用 cuptiEventGroupDestroy、cuptiEventGroupAddEvent 等),并且必须防止同时销毁创建eventGroup
的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。如果 cuptiEventGroupResetAllEvents 与此函数同时调用,则返回的事件值是未定义的。- 参数
eventGroup – 事件组
flags – 控制读取模式的标志
event – 要读取的事件
eventValueBufferSizeBytes –
eventValueBuffer
的大小(以字节为单位),并返回写入eventValueBuffer
的字节数eventValueBuffer – 返回事件值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_ID –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_INVALID_OPERATION – 如果
eventGroup
已禁用CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
、eventValueBufferSizeBytes
或eventValueBuffer
为 NULLCUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 如果
eventValueBuffer
的大小不足
-
CUptiResult cuptiEventGroupRemoveAllEvents(CUpti_EventGroup eventGroup)
从事件组中移除所有事件。
从事件组中移除所有事件。如果事件组已启用,则无法移除事件。
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 事件组
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_OPERATION – 如果
eventGroup
已启用CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULL
-
CUptiResult cuptiEventGroupRemoveEvent(CUpti_EventGroup eventGroup, CUpti_EventID event)
从事件组中移除一个事件。
从事件组中移除
event
。如果事件组已启用,则无法移除事件。注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 事件组
event – 要从组中移除的事件
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_EVENT_ID –
CUPTI_ERROR_INVALID_OPERATION – 如果
eventGroup
已启用CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULL
-
CUptiResult cuptiEventGroupResetAllEvents(CUpti_EventGroup eventGroup)
将事件组中的所有事件计数归零。
将事件组中的所有事件计数归零。
注意
线程安全性:此函数是线程安全的,但客户端必须防止同时销毁或修改
eventGroup
(例如,客户端必须防止同时调用 cuptiEventGroupDestroy、cuptiEventGroupAddEvent 等),并且必须防止同时销毁创建eventGroup
的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。- 参数
eventGroup – 事件组
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroup
为 NULL
-
CUptiResult cuptiEventGroupSetAttribute(CUpti_EventGroup eventGroup, CUpti_EventGroupAttribute attrib, size_t valueSize, void *value)
写入事件组属性。
写入事件组属性。
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroup – 事件组
attrib – 要写入的属性
valueSize – 值的字节大小
value – 要写入的属性值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attrib
不是事件组属性,或者如果attrib
不是可写属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 表示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiEventGroupSetDisable(CUpti_EventGroupSet *eventGroupSet)
禁用事件组集合。
禁用一组事件组。禁用一组事件组会停止收集组中包含的事件。
注意
线程安全性:此函数是线程安全的。
注意
如果此调用失败,则集合中的某些事件组可能会被禁用,而其他事件组可能仍处于启用状态。
- 参数
eventGroupSet – 指向事件组集合的指针
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroupSet
为 NULL
-
CUptiResult cuptiEventGroupSetEnable(CUpti_EventGroupSet *eventGroupSet)
启用事件组集合。
启用一组事件组。启用一组事件组会将所有组中所有事件的值清零,然后开始收集这些事件。
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroupSet – 指向事件组集合的指针
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_HARDWARE –
CUPTI_ERROR_NOT_READY – 如果
eventGroup
不包含任何事件CUPTI_ERROR_NOT_COMPATIBLE – 如果由于其他已启用的事件组而无法启用
eventGroup
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroupSet
为 NULLCUPTI_ERROR_HARDWARE_BUSY – 如果其他客户端正在进行分析并且硬件正忙
-
CUptiResult cuptiEventGroupSetsCreate(CUcontext context, size_t eventIdArraySizeBytes, CUpti_EventID *eventIdArray, CUpti_EventGroupSets **eventGroupPasses)
对于一组事件,获取指示收集事件所需的通道数和事件组的分组。
可以同时收集的事件数量因设备和事件类型而异。当可以同时收集事件时,它们可能需要分组到多个事件组中,因为它们来自不同的事件域。此函数接受一组事件,并确定收集所有这些事件所需的次数,以及每次可以通过哪些事件可以同时收集。
在
eventGroupPasses
中返回的 CUpti_EventGroupSets 指示收集事件所需的次数,通过numSets
字段表示。在每个事件组集中,sets
数组指示每次应该收集的事件组。注意
线程安全性:此函数是线程安全的,但客户端必须防止另一个线程同时销毁
context
。- 参数
context – 用于事件收集的上下文
eventIdArraySizeBytes –
eventIdArray
的大小(以字节为单位)eventIdArray – 需要分组的事件 ID 数组
eventGroupPasses – 返回一个 CUpti_EventGroupSets 对象,该对象指示收集事件所需的通道数以及每个通道上要收集的事件
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_CONTEXT –
CUPTI_ERROR_INVALID_EVENT_ID –
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventIdArray
或eventGroupPasses
为 NULL
-
CUptiResult cuptiEventGroupSetsDestroy(CUpti_EventGroupSets *eventGroupSets)
销毁事件组集合对象。
销毁一个 CUpti_EventGroupSets 对象。
注意
线程安全性:此函数是线程安全的。
- 参数
eventGroupSets – 要销毁的对象
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_OPERATION – 如果集合中包含的任何事件组已启用
CUPTI_ERROR_INVALID_PARAMETER – 如果
eventGroupSets
为 NULL
-
CUptiResult cuptiGetNumEventDomains(uint32_t *numDomains)
获取任何设备上可用的事件域的数量。
返回任何支持 CUDA 的设备上可用的事件域总数。
注意
线程安全性:此函数是线程安全的。
- 参数
numDomains – 返回域的数量
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
numDomains
为 NULL
-
CUptiResult cuptiKernelReplaySubscribeUpdate(CUpti_KernelReplayUpdateFunc updateFunc, void *customData)
订阅内核重放更新。
订阅后,每次内核重放期间内核运行完成时,都会调用传入的函数指针。先前订阅的函数指针将被替换。传入 NULL 作为函数指针将取消订阅更新。
- 参数
updateFunc – 更新函数指针
customData – 指向任何自定义数据的指针
- 返回值
CUPTI_SUCCESS –
-
CUptiResult cuptiSetEventCollectionMode(CUcontext context, CUpti_EventCollectionMode mode)
设置事件收集模式。
为
context
设置事件收集模式。mode
控制在context
中创建的事件组中所有事件的事件收集行为。此 API 在内核重放模式下无效。注意
线程安全性:此函数是线程安全的。
- 参数
context – 上下文
mode – 事件收集模式
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_CONTEXT –
CUPTI_ERROR_INVALID_OPERATION – 如果在启用重放模式时调用
CUPTI_ERROR_NOT_SUPPORTED – 如果设备不支持该模式
5.4.4. 类型定义
-
typedef uint32_t CUpti_EventDomainID
事件域的 ID。
事件域的 ID。事件域表示一组相关事件。一个设备可能具有一个域的多个实例,表明该设备可以同时记录该域内每个事件的多个实例。
-
typedef void *CUpti_EventGroup
一组事件。
事件组是事件的集合,这些事件一起管理。事件组中的所有事件必须属于同一域。
-
typedef uint32_t CUpti_EventID
事件的 ID。
事件表示设备上可计数的活动、动作或事件。
-
typedef void (*CUpti_KernelReplayUpdateFunc)(const char *kernelName, int numReplaysDone, void *customData)
用于获取内核重放更新的函数类型。
- Param kernelName
已损坏的内核名称
- Param numReplaysDone
到目前为止完成的重放次数
- Param customData
订阅时传入的任何自定义数据的指针