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。

以 Mega bits/秒为单位获取设备的 PCIE 链路速率。

如果总线类型为非 PCIE,则返回 0。值类型为 uint64_t。

获取设备的 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。

检查 Nvlink 是否连接到设备。

如果至少有一个 Nvlink 连接到设备,则返回 1,否则返回 0。值类型为 uint32_t。

检查 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
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
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
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
enum CUpti_EventCollectionMethod

用于事件的收集方法。

收集方法指示事件的收集方式。

enumerator CUPTI_EVENT_COLLECTION_METHOD_PM

使用硬件全局性能监视器收集事件。

enumerator CUPTI_EVENT_COLLECTION_METHOD_SM

事件使用硬件 SM 性能监视器收集。

enumerator CUPTI_EVENT_COLLECTION_METHOD_INSTRUMENTED

事件使用软件插桩收集。

事件使用 NvLink 吞吐量计数器方法收集。

enumerator CUPTI_EVENT_COLLECTION_METHOD_FORCE_INT
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
enum CUpti_EventDomainAttribute

事件域属性。

事件域属性。除非另有说明,否则所有属性都可以使用 cuptiDeviceGetEventDomainAttributecuptiEventDomainGetAttribute 读取。

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

用于事件域中包含的事件的收集方法。

值为 CUpti_EventCollectionMethod

enumerator CUPTI_EVENT_DOMAIN_ATTR_FORCE_INT
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
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
enum CUpti_ReadEventFlags

用于 cuptiEventGroupReadEvent 和 cuptiEventGroupReadAllEvents 的标志。

用于 cuptiEventGroupReadEventcuptiEventGroupReadAllEvents 的标志。

enumerator CUPTI_EVENT_READ_FLAG_NONE

无标志。

enumerator CUPTI_EVENT_READ_FLAG_FORCE_INT

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 设备

  • arraySizeBytesdomainArray 的大小(以字节为单位),并返回写入 domainArray 的字节数

  • domainArray – 返回设备的事件域 ID

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_DEVICE

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 arraySizeBytesdomainArray 为 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 – 如果 valueSizevalue 为 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 – 要读取的事件域属性

  • valueSizevalue 缓冲区的大小(以字节为单位),并返回写入 value 的字节数

  • value – 返回属性的值

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_DEVICE

  • CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 valueSizevalue 为 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 中返回的字节数。

注意

线程安全性:此函数是线程安全的。

参数
  • arraySizeBytesdomainArray 的大小(以字节为单位),并返回写入 domainArray 的字节数

  • domainArray – 返回所有事件域

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 arraySizeBytesdomainArray 为 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

  • arraySizeByteseventArray 的大小(以字节为单位),并返回写入 eventArray 的字节数

  • eventArray – 返回域中事件的 ID

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 arraySizeByteseventArray 为 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 – 要读取的事件域属性

  • valueSizevalue 缓冲区的大小(以字节为单位),并返回写入 value 的字节数

  • value – 返回属性的值

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_EVENT_DOMAIN_ID

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 valueSizevalue 为 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 – 要读取的事件属性

  • valueSizevalue 缓冲区的大小(以字节为单位),并返回写入 value 的字节数

  • value – 返回属性的值

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_EVENT_ID

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 valueSizevalue 为 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 – 如果 eventNameevent 为 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 中已有的事件不同的事件域,或者如果设备限制阻止 eventeventGroup 中已有的事件同时收集

  • 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 为 NULL

  • CUPTI_ERROR_HARDWARE_BUSY – 如果另一个客户端正在进行分析并且硬件正忙

CUptiResult cuptiEventGroupGetAttribute(CUpti_EventGroup eventGroup, CUpti_EventGroupAttribute attrib, size_t *valueSize, void *value)

读取事件组属性。

读取事件组属性,并在 *value 中返回它。

注意

线程安全性:此函数是线程安全的,但客户端必须防止同时销毁或修改 eventGroup(例如,客户端必须防止同时调用 cuptiEventGroupDestroycuptiEventGroupAddEvent 等),并且必须防止同时销毁创建 eventGroup 的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。

参数
  • eventGroup – 事件组

  • attrib – 要读取的属性

  • valueSize – 由 value 指向的缓冲区的大小,并返回写入 value 的字节数

  • value – 返回属性的值

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 valueSizevalue 为 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(例如,客户端必须防止同时调用 cuptiEventGroupDestroycuptiEventGroupAddEvent 等),并且必须防止同时销毁创建 eventGroup 的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。如果 cuptiEventGroupResetAllEvents 与此函数同时调用,则返回的事件值是未定义的。

参数
  • eventGroup – 事件组

  • flags – 控制读取模式的标志

  • eventValueBufferSizeByteseventValueBuffer 的大小(以字节为单位),并返回写入 eventValueBuffer 的字节数

  • eventValueBuffer – 返回事件值

  • eventIdArraySizeByteseventIdArray 的大小(以字节为单位),并返回写入 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 – 如果 eventGroupeventValueBufferSizeByteseventValueBuffereventIdArraySizeByteseventIdArraynumEventIdsRead 为 NULL

  • CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 如果 eventValueBuffereventIdArray 的大小不足

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(例如,客户端必须防止同时调用 cuptiEventGroupDestroycuptiEventGroupAddEvent 等),并且必须防止同时销毁创建 eventGroup 的上下文(例如,客户端必须防止同时调用 cudaDeviceReset、cuCtxDestroy 等)。如果 cuptiEventGroupResetAllEvents 与此函数同时调用,则返回的事件值是未定义的。

参数
  • eventGroup – 事件组

  • flags – 控制读取模式的标志

  • event – 要读取的事件

  • eventValueBufferSizeByteseventValueBuffer 的大小(以字节为单位),并返回写入 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 – 如果 eventGroupeventValueBufferSizeByteseventValueBuffer 为 NULL

  • CUPTI_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(例如,客户端必须防止同时调用 cuptiEventGroupDestroycuptiEventGroupAddEvent 等),并且必须防止同时销毁创建 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 – 如果 valueSizevalue 为 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 为 NULL

  • CUPTI_ERROR_HARDWARE_BUSY – 如果其他客户端正在进行分析并且硬件正忙

CUptiResult cuptiEventGroupSetsCreate(CUcontext context, size_t eventIdArraySizeBytes, CUpti_EventID *eventIdArray, CUpti_EventGroupSets **eventGroupPasses)

对于一组事件,获取指示收集事件所需的通道数和事件组的分组。

可以同时收集的事件数量因设备和事件类型而异。当可以同时收集事件时,它们可能需要分组到多个事件组中,因为它们来自不同的事件域。此函数接受一组事件,并确定收集所有这些事件所需的次数,以及每次可以通过哪些事件可以同时收集。

eventGroupPasses 中返回的 CUpti_EventGroupSets 指示收集事件所需的次数,通过 numSets 字段表示。在每个事件组集中,sets 数组指示每次应该收集的事件组。

注意

线程安全性:此函数是线程安全的,但客户端必须防止另一个线程同时销毁 context

参数
  • context – 用于事件收集的上下文

  • eventIdArraySizeByteseventIdArray 的大小(以字节为单位)

  • eventIdArray – 需要分组的事件 ID 数组

  • eventGroupPasses – 返回一个 CUpti_EventGroupSets 对象,该对象指示收集事件所需的通道数以及每个通道上要收集的事件

返回值
  • CUPTI_SUCCESS

  • CUPTI_ERROR_NOT_INITIALIZED

  • CUPTI_ERROR_INVALID_CONTEXT

  • CUPTI_ERROR_INVALID_EVENT_ID

  • CUPTI_ERROR_INVALID_PARAMETER – 如果 eventIdArrayeventGroupPasses 为 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

订阅时传入的任何自定义数据的指针