5.1. CUPTI Activity API
实现 CUPTI Activity API 的函数、类型和枚举。
数据结构
- CUpti_Activity
基础活动记录。
- CUpti_ActivityAPI
驱动程序或运行时 API 调用的活动记录。
- CUpti_ActivityAutoBoostState
设备自动加速状态结构。
- CUpti_ActivityBranch2
源级别结果分支的活动记录。
- CUpti_ActivityCdpKernel
CDP (CUDA 动态并行) 内核的活动记录。
- CUpti_ActivityContext3
上下文的活动记录。
- CUpti_ActivityCudaEvent2
CUDA 事件的活动记录。
- CUpti_ActivityDevice5
设备的活动记录。
- CUpti_ActivityDeviceAttribute
设备属性的活动记录。
- CUpti_ActivityDeviceGraphTrace
设备图执行跟踪的活动记录。
- CUpti_ActivityEnvironment
CUPTI 环境数据的活动记录。
- CUpti_ActivityEvent
CUPTI 事件的活动记录。
- CUpti_ActivityEventInstance
具有实例信息的 CUPTI 事件的活动记录。
- CUpti_ActivityExternalCorrelation
与外部记录关联的活动记录。
- CUpti_ActivityFunction
全局/设备函数的活动记录。
- CUpti_ActivityGlobalAccess3
源级别全局访问的活动记录。
- CUpti_ActivityGraphTrace2
图执行跟踪的活动记录。
- CUpti_ActivityInstantaneousEvent
瞬时 CUPTI 事件的活动记录。
- CUpti_ActivityInstantaneousEventInstance
具有事件域实例信息的瞬时 CUPTI 事件的活动记录。
- CUpti_ActivityInstantaneousMetric
瞬时 CUPTI 指标的活动记录。
- CUpti_ActivityInstantaneousMetricInstance
具有实例信息的 CUPTI 指标的瞬时活动记录。
- CUpti_ActivityInstructionCorrelation
源级别 sass/源行到行关联的活动记录。
- CUpti_ActivityInstructionExecution
源级别指令执行的活动记录。
- CUpti_ActivityJit2
JIT 操作的活动记录。
- CUpti_ActivityKernel9
内核的活动记录。
- CUpti_ActivityMarker2
提供标记的活动记录,标记是时间上的瞬时点。
- CUpti_ActivityMarkerData
提供标记详细信息的活动记录。
- CUpti_ActivityMemDecompress
解压缩操作跟踪的活动记录。
- CUpti_ActivityMemcpy6
内存复制的活动记录。
- CUpti_ActivityMemcpyPtoP4
点对点内存复制的活动记录。
- CUpti_ActivityMemory
内存的活动记录。
- CUpti_ActivityMemory4
内存的活动记录。
- CUpti_ActivityMemoryPool2
内存池的活动记录。
- CUpti_ActivityMemset4
memset 的活动记录。
- CUpti_ActivityMetric
CUPTI 指标的活动记录。
- CUpti_ActivityMetricInstance
具有实例信息的 CUPTI 指标的活动记录。
- CUpti_ActivityModule
CUDA 模块的活动记录。
- CUpti_ActivityName
提供名称的活动记录。
- CUpti_ActivityNvLink4
NVLink 信息。
- CUpti_ActivityObjectKindId
CUpti_ActivityObjectKind 指定的对象类型的标识符。
- CUpti_ActivityOpenAcc
OpenAcc 记录的基础活动记录。
- CUpti_ActivityOpenAccData
OpenACC 数据的活动记录。
- CUpti_ActivityOpenAccLaunch
OpenACC 启动的活动记录。
- CUpti_ActivityOpenAccOther
其他 OpenACC 的活动记录。
- CUpti_ActivityOpenMp
OpenMp 记录的基础活动记录。
- CUpti_ActivityOverhead3
CUPTI 和驱动程序开销的活动记录。
- CUpti_ActivityOverheadCommandBufferFullData
为 CUPTI_ACTIVITY_OVERHEAD_COMMAND_BUFFER_FULL 提供附加数据的结构。
- CUpti_ActivityPCSampling3
PC 采样的活动记录。
- CUpti_ActivityPCSamplingConfig
PC 采样配置结构。
- CUpti_ActivityPCSamplingRecordInfo
PC 采样的记录状态的活动记录。
- CUpti_ActivityPcie
构建拓扑所需的 PCI 设备信息。
- CUpti_ActivityPreemption
CDP 内核抢占的活动记录。
- CUpti_ActivitySharedAccess
源级别共享访问的活动记录。
- CUpti_ActivitySourceLocator
源定位符的活动记录。
- CUpti_ActivityStream
CUDA 流的活动记录。
- CUpti_ActivitySynchronization2
同步管理的活动记录。
- CUpti_ActivityUnifiedMemoryCounter3
统一内存计数器的活动记录 (CUDA 7.0 及更高版本)
- CUpti_ActivityUnifiedMemoryCounterConfig
统一内存计数器配置结构。
宏
- CUPTI_AUTO_BOOST_INVALID_CLIENT_PID
无效/未知进程 ID。
- CUPTI_CORRELATION_ID_UNKNOWN
无效/未知关联 ID。
- CUPTI_DECOMPRESSED_BYTES_UNKNOWN
解压缩字节的无效/未知值。
- CUPTI_FUNCTION_INDEX_ID_INVALID
无效的函数索引 ID。
- CUPTI_GRID_ID_UNKNOWN
无效/未知网格 ID。
- CUPTI_MAX_GPUS
- CUPTI_MAX_NVLINK_PORTS
最大 NVLink 端口号。
- CUPTI_NVLINK_INVALID_PORT
无效/未知 NVLink 端口号。
- CUPTI_SOURCE_LOCATOR_ID_UNKNOWN
指示未知源位置的源定位符 ID。
- CUPTI_SYNCHRONIZATION_INVALID_VALUE
无效/未知值。
- CUPTI_TIMESTAMP_UNKNOWN
开始、结束、排队、提交或完成时间的无效/未知时间戳。
枚举
- CUpti_ActivityAttribute
活动属性。
- CUpti_ActivityComputeApiKind
计算 API 的种类。
- CUpti_ActivityEnvironmentKind
环境数据的种类。
- CUpti_ActivityFlag
与活动记录关联的标志。
- CUpti_ActivityInstructionClass
SASS 指令分类。
- CUpti_ActivityJitEntryType
JIT 条目的类型。
- CUpti_ActivityJitOperationType
JIT 编译操作的类型。
- CUpti_ActivityKind
活动记录的种类。
- CUpti_ActivityLaunchType
CUDA 内核启动的类型。
- CUpti_ActivityMemcpyKind
内存复制的种类,指示复制的源和目标。
- CUpti_ActivityMemoryKind
内存操作/复制访问的内存种类。
- CUpti_ActivityMemoryOperationType
内存操作类型。
- CUpti_ActivityMemoryPoolOperationType
内存池操作类型。
- CUpti_ActivityMemoryPoolType
内存池类型。
- CUpti_ActivityObjectKind
活动对象的种类。
- CUpti_ActivityOverheadKind
活动开销的种类。
- CUpti_ActivityPCSamplingPeriod
PC 采样方法的采样周期。
- CUpti_ActivityPCSamplingStallReason
PC 采样活动的停顿原因。
- CUpti_ActivityPartitionedGlobalCacheConfig
分区全局缓存选项。
- CUpti_ActivityPreemptionKind
抢占活动的种类。
- CUpti_ActivityStreamFlag
流类型。
- CUpti_ActivitySynchronizationType
同步类型。
- CUpti_ActivityThreadIdType
线程 ID 类型。
- CUpti_ActivityUnifiedMemoryAccessType
统一内存页错误的内存访问类型。
- CUpti_ActivityUnifiedMemoryCounterKind
统一内存计数器的种类。
- CUpti_ActivityUnifiedMemoryCounterScope
统一内存计数器的范围(在 CUDA 7.0 中已弃用)
- CUpti_ActivityUnifiedMemoryMigrationCause
统一内存计数器的迁移原因。
- CUpti_ActivityUnifiedMemoryRemoteMapCause
统一内存计数器的远程内存映射原因。
- CUpti_ChannelType
- CUpti_ContextCigMode
CIG (图形中的 CUDA) 模式。
- CUpti_DevType
连接到 NVLink 的设备的设备类型。
- CUpti_DeviceGraphLaunchMode
设备图执行的启动模式。
- CUpti_DeviceVirtualizationMode
指示 CUDA 设备运行的虚拟化模式。
- CUpti_EnvironmentClocksThrottleReason
时钟节流的原因。
- CUpti_ExternalCorrelationKind
关联支持的外部 API 的种类。
- CUpti_FuncShmemLimitConfig
内核的每个块配置的共享内存限制。这应用于在占用率计算器 API 中设置 'cudaOccFuncShmemConfig' 字段。
- CUpti_LinkFlag
链接标志。
- CUpti_OpenAccConstructKind
OpenAcc 活动记录的 OpenAcc 父构造种类。
- CUpti_OpenAccEventKind
OpenAcc 活动记录的 OpenAcc 事件种类。
- CUpti_OpenMpEventKind
- CUpti_PcieDeviceType
区分 PCIE 活动记录是 GPU 还是 PCI 桥的字段。
- CUpti_PcieGen
PCIE 代。
函数
- CUptiResult cuptiActivityConfigurePCSampling(CUcontext ctx, CUpti_ActivityPCSamplingConfig *config)
设置 PC 采样配置。
- CUptiResult cuptiActivityConfigureUnifiedMemoryCounter(CUpti_ActivityUnifiedMemoryCounterConfig *config, uint32_t count)
设置统一内存计数器配置。
- CUptiResult cuptiActivityDisable(CUpti_ActivityKind kind)
禁用特定类型活动记录的收集。
- CUptiResult cuptiActivityDisableContext(CUcontext context, CUpti_ActivityKind kind)
禁用上下文中特定类型活动记录的收集。
- CUptiResult cuptiActivityEnable(CUpti_ActivityKind kind)
启用特定类型活动记录的收集。
- CUptiResult cuptiActivityEnableAllSyncRecords(uint8_t enable)
启用收集所有同步操作的记录。
- CUptiResult cuptiActivityEnableAllocationSource(uint8_t enable)
启用跟踪内存分配请求的源库。
- CUptiResult cuptiActivityEnableAndDump(CUpti_ActivityKind kind)
启用特定类型活动记录的收集。
- CUptiResult cuptiActivityEnableContext(CUcontext context, CUpti_ActivityKind kind)
启用上下文中特定类型活动记录的收集。
- CUptiResult cuptiActivityEnableDeviceGraph(uint8_t enable)
控制设备启动图的记录收集。
- CUptiResult cuptiActivityEnableDriverApi(CUpti_CallbackId cbid, uint8_t enable)
控制特定 CUDA 驱动程序 API 的活动记录收集。
- CUptiResult cuptiActivityEnableHWTrace(uint8_t enable)
启用通过硬件事件收集 CUDA 内核时间戳。
- CUptiResult cuptiActivityEnableLatencyTimestamps(uint8_t enable)
控制内核的排队和提交时间戳的收集。
- CUptiResult cuptiActivityEnableLaunchAttributes(uint8_t enable)
控制内核的启动属性的收集。
- CUptiResult cuptiActivityEnableRuntimeApi(CUpti_CallbackId cbid, uint8_t enable)
控制特定 CUDA 运行时 API 的活动记录收集。
- CUptiResult cuptiActivityFlush(CUcontext context, uint32_t streamId, uint32_t flag)
等待所有活动记录通过完成回调传递。
- CUptiResult cuptiActivityFlushAll(uint32_t flag)
请求通过缓冲区完成回调传递活动记录。
- CUptiResult cuptiActivityFlushPeriod(uint32_t time)
设置工作线程的刷新周期。
- CUptiResult cuptiActivityGetAttribute(CUpti_ActivityAttribute attr, size_t *valueSize, void *value)
读取活动 API 属性。
- CUptiResult cuptiActivityGetNextRecord(uint8_t *buffer, size_t validBufferSizeBytes, CUpti_Activity **record)
迭代缓冲区中的活动记录。
- CUptiResult cuptiActivityGetNumDroppedRecords(CUcontext context, uint32_t streamId, size_t *dropped)
获取因缓冲区空间不足而丢弃的活动记录数。
- CUptiResult cuptiActivityPopExternalCorrelationId(CUpti_ExternalCorrelationKind kind, uint64_t *lastId)
为调用线程弹出外部关联 ID。
- CUptiResult cuptiActivityPushExternalCorrelationId(CUpti_ExternalCorrelationKind kind, uint64_t id)
为调用线程推送外部关联 ID。
- CUptiResult cuptiActivityRegisterCallbacks(CUpti_BuffersCallbackRequestFunc funcBufferRequested, CUpti_BuffersCallbackCompleteFunc funcBufferCompleted)
向 CUPTI 注册回调函数以进行活动缓冲区处理。
- CUptiResult cuptiActivityRegisterTimestampCallback(CUpti_TimestampCallbackFunc funcTimestamp)
向 CUPTI 注册回调函数以提供时间戳。
- CUptiResult cuptiActivitySetAttribute(CUpti_ActivityAttribute attr, size_t *valueSize, void *value)
写入活动 API 属性。
- CUptiResult cuptiComputeCapabilitySupported(int major, int minor, int *support)
检查对计算能力的支持。
- CUptiResult cuptiDeviceSupported(CUdevice dev, int *support)
检查对计算设备的支持。
- CUptiResult cuptiDeviceVirtualizationMode(CUdevice dev, CUpti_DeviceVirtualizationMode *mode)
查询设备的虚拟化模式。
- CUptiResult cuptiFinalize(void)
将 CUPTI 从运行的进程中分离。
- CUptiResult cuptiGetAutoBoostState(CUcontext context, CUpti_ActivityAutoBoostState *state)
获取自动加速状态。
- CUptiResult cuptiGetContextId(CUcontext context, uint32_t *contextId)
获取上下文的 ID。
- CUptiResult cuptiGetDeviceId(CUcontext context, uint32_t *deviceId)
获取设备的 ID。
- CUptiResult cuptiGetGraphExecId(CUgraphExec graphExec, uint32_t *pId)
获取可执行图的唯一 ID。
- CUptiResult cuptiGetGraphId(CUgraph graph, uint32_t *pId)
获取图的唯一 ID。
- CUptiResult cuptiGetGraphNodeId(CUgraphNode node, uint64_t *nodeId)
获取图节点的唯一 ID。
- CUptiResult cuptiGetLastError(void)
返回来自 cupti 调用或回调的最后一个错误。
- CUptiResult cuptiGetStreamId(CUcontext context, CUstream stream, uint32_t *streamId)
获取流的 ID。
- CUptiResult cuptiGetStreamIdEx(CUcontext context, CUstream stream, uint8_t perThreadStream, uint32_t *streamId)
获取流的 ID。
- CUptiResult cuptiGetThreadIdType(CUpti_ActivityThreadIdType *type)
获取线程 ID 类型。
- CUptiResult cuptiGetTimestamp(uint64_t *timestamp)
获取 CUPTI 时间戳。
- CUptiResult cuptiSetThreadIdType(CUpti_ActivityThreadIdType type)
设置线程 ID 类型。
类型定义
- CUpti_BuffersCallbackCompleteFunc
CUPTI 用于返回活动记录缓冲区的回调函数类型。
- CUpti_BuffersCallbackRequestFunc
CUPTI 用于请求空缓冲区以存储活动记录的回调函数类型。
- CUpti_TimestampCallbackFunc
CUPTI 用于请求在活动记录中使用的时间戳的回调函数类型。
5.1.1. 宏
-
CUPTI_AUTO_BOOST_INVALID_CLIENT_PID
无效/未知进程 ID。
-
CUPTI_CORRELATION_ID_UNKNOWN
无效/未知关联 ID。
此值的关联 ID 表示活动记录没有关联。
-
CUPTI_DECOMPRESSED_BYTES_UNKNOWN
解压缩字节的无效/未知值。
-
CUPTI_FUNCTION_INDEX_ID_INVALID
无效的函数索引 ID。
-
CUPTI_GRID_ID_UNKNOWN
无效/未知网格 ID。
-
CUPTI_MAX_GPUS
-
CUPTI_MAX_NVLINK_PORTS
最大 NVLink 端口号。
-
CUPTI_NVLINK_INVALID_PORT
无效/未知 NVLink 端口号。
-
CUPTI_SOURCE_LOCATOR_ID_UNKNOWN
指示未知源位置的源定位符 ID。
没有与此值对应的实际 CUpti_ActivitySourceLocator 对象。
-
CUPTI_SYNCHRONIZATION_INVALID_VALUE
无效/未知值。
-
CUPTI_TIMESTAMP_UNKNOWN
开始、结束、排队、提交或完成时间的无效/未知时间戳。
5.1.2. 枚举
-
enum CUpti_ActivityAttribute
活动属性。
这些属性用于控制活动 API 的行为。
值
-
enumerator CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE
设备内存大小(以字节为单位),用于存储并发内核(活动类型 CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL)、内存复制和内存设置的分析数据,每个上下文中每个缓冲区。
该值是 size_t。
每个上下文可以分配的设备缓冲区数量有限制。用户可以使用属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_POOL_LIMIT 查询和设置此限制。CUPTI 不会预先分配所有缓冲区,它仅预先分配由属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_PRE_ALLOCATE_VALUE 设置的缓冲区。当缓冲区中的所有数据都被消耗时,它会被添加到重用池中,当需要新缓冲区时,CUPTI 会从此池中选择一个缓冲区。因此,内存占用量不会随内核数量而扩展。具有高密度内核、内存复制和内存设置的应用程序可能会导致 CUPTI 分配更多设备缓冲区。只有当重用池中的缓冲区用完时,CUPTI 才会分配另一个缓冲区。
由于缓冲区分配发生在主应用程序线程中,这可能会导致关键路径中的停顿。CUPTI 预先分配 3 个相同大小的缓冲区来缓解此问题。用户可以使用属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_PRE_ALLOCATE_VALUE 查询和设置预分配限制。
较大的缓冲区大小会为应用程序留下较少的设备内存。较小的缓冲区大小会增加在一次启动太多内核或内存复制或内存设置时,记录的时间戳被丢弃的风险。
此值仅适用于新的缓冲区分配。在初始化 CUDA 或创建上下文之前设置此值,以确保将其考虑用于以下分配。
默认值为 3200000 (~3MB),可以容纳最多 100,000 个内核、内存复制和内存设置的组合的分析数据。
注意:从 CUDA 12.0 Update 1 版本开始,CUPTI 默认在设备内存中分配分析缓冲区,因为这可能有助于提高跟踪运行的性能。有关更多详细信息,请参阅属性 CUPTI_ACTIVITY_ATTR_MEM_ALLOCATION_TYPE_HOST_PINNED 的描述。内存大小和最大池数量仍由属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE 和 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_POOL_LIMIT 控制。
注意:CUPTI 为每个缓冲区保留的实际设备内存量可能会更大。
-
enumerator CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE_CDP
设备内存大小(以字节为单位),用于存储 CDP 操作的分析数据,每个上下文中每个缓冲区。
该值是 size_t。
较大的缓冲区大小意味着更少的刷新操作,但会消耗更多的设备内存。此值仅适用于新的分配。
在初始化 CUDA 或创建上下文之前设置此值,以确保将其考虑用于以下分配。
默认值为 8388608 (8MB)。
注意:CUPTI 为每个上下文保留的实际设备内存量可能会更大。
-
enumerator CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_POOL_LIMIT
每个上下文的最大设备内存缓冲区数。
该值是 size_t。
对于具有高内核启动率、内存复制和内存设置的应用程序,具有更大的池限制有助于收集所有这些活动的时间戳,但代价是更大的内存占用量。有关更多详细信息,请参阅属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE 的描述。
设置此值不会修改当前存储的内存缓冲区数量。
在初始化 CUDA 之前设置此值,以确保不超过限制。
默认值为 250。
-
enumerator CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_POOL_SIZE
从 CUDA 12.3 开始不支持此属性,CUPTI 不再使用分析信号量池来存储分析数据。
每个上下文可以分配的信号量池数量有限制。用户可以使用属性 CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_POOL_LIMIT 查询和设置此限制。CUPTI 不会预先分配所有信号量池,它仅预先分配由属性 CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_PRE_ALLOCATE_VALUE 设置的信号量池。当信号量池中的所有数据都被消耗时,它会被添加到重用池中,当需要新的信号量池时,CUPTI 会从重用池中选择一个信号量池。因此,内存占用量不会随内核数量而扩展。具有高密度内核的应用程序可能会导致 CUPTI 分配更多信号量池。只有当重用池中的信号量池用完时,CUPTI 才会分配另一个信号量池。
由于信号量池分配发生在主应用程序线程中,这可能会导致关键路径中的停顿。CUPTI 预先分配 3 个相同大小的信号量池来缓解此问题。用户可以使用属性 CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_PRE_ALLOCATE_VALUE 查询和设置预分配限制。
较大的信号量池大小会为应用程序留下较少的设备内存。较小的信号量池大小会增加在一次发出/启动太多内核时,内核记录的时间戳被丢弃的风险。
此值仅适用于新的信号量池分配。在初始化 CUDA 或创建上下文之前设置此值,以确保将其考虑用于以下分配。
默认值为 25000,可以容纳最多 25,000 个内核的分析数据。
-
enumerator CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_POOL_LIMIT
从 CUDA 12.3 开始不支持此属性,CUPTI 不再使用分析信号量池来存储分析数据。
每个上下文的最大分析信号量池数。该值是 size_t。
有关更多详细信息,请参阅属性 CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_POOL_SIZE 的描述。
在初始化 CUDA 之前设置此值,以确保不超过限制。
默认值为 250。
-
enumerator CUPTI_ACTIVITY_ATTR_ZEROED_OUT_ACTIVITY_BUFFER
指示用户是否应提供零值活动缓冲区的标志。
该值是 uint8_t。
如果此属性的值为非零,则用户应在 CUpti_BuffersCallbackRequestFunc 中提供零值缓冲区。如果用户在设置为非零后未提供零值缓冲区,则当 CUPTI 在 CUpti_BuffersCallbackCompleteFunc 中返回活动缓冲区时,该缓冲区可能包含一些未初始化的值
如果此属性的值为零,则 CUPTI 将在填充用户缓冲区之前,将 CUpti_BuffersCallbackRequestFunc 中接收到的用户缓冲区初始化为零。如果用户将其设置为零,则在关键路径中可能会出现一些停顿,因为 CUPTI 将在主线程中清零缓冲区。在从 CUpti_BuffersCallbackRequestFunc 返回之前设置此值,以确保所有后续用户缓冲区都考虑此值。
默认值为 0。
-
enumerator CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_PRE_ALLOCATE_VALUE
在初始化阶段为上下文预分配的设备缓冲区数量。
该值是 size_t。
有关详细信息,请参阅属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE 的描述。
此值必须小于使用属性 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_POOL_LIMIT 设置的最大设备缓冲区数量。
在初始化 CUDA 或创建上下文之前设置此值,以确保 CUPTI 考虑此值。
默认值设置为 3,以便在这些缓冲区之间进行乒乓操作(如果可能)。
-
enumerator CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_PRE_ALLOCATE_VALUE
从 CUDA 12.3 开始不支持此属性,CUPTI 不再使用分析信号量池来存储分析数据。
在初始化阶段为上下文预分配的分析信号量池的数量。该值是一个 size_t。
有关详细信息,请参阅属性 CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_POOL_SIZE 的描述。
此值必须小于使用属性 CUPTI_ACTIVITY_ATTR_PROFILING_SEMAPHORE_POOL_LIMIT 设置的最大分析信号量池数量。
在初始化 CUDA 或创建上下文之前设置此值,以确保 CUPTI 考虑此值。
默认值设置为 3,以便在这些池之间进行乒乓操作(如果可能)。
-
enumerator CUPTI_ACTIVITY_ATTR_MEM_ALLOCATION_TYPE_HOST_PINNED
为并发内核、内存复制和内存设置分配页锁定(pinned)主机内存,用于存储上下文中每个缓冲区的分析数据。
该值是 uint8_t。
从 CUDA 11.2 版本开始,CUPTI 默认在 pinned 主机内存中分配分析缓冲区,因为这可能有助于提高跟踪运行的性能。分配过多的 pinned 内存可能会降低系统性能,因为它减少了系统可用于分页的内存量。因此,用户可能希望通过将此属性的值设置为 0,将位置从 pinned 主机内存更改为设备内存。
保密计算设备不支持使用页锁定(pinned)主机内存缓冲区。如果将此属性设置为 1,CUPTI 将返回 CUPTI_ERROR_NOT_SUPPORTED。
默认值为 1。
-
enumerator CUPTI_ACTIVITY_ATTR_PER_THREAD_ACTIVITY_BUFFER
请求每个线程的活动缓冲区,以在每个线程的基础上将 CUPTI 活动记录存储在活动缓冲区中。
该值是 uint8_t。
应在通过 cuptiActivityRegisterCallbacks API 注册缓冲区回调之前,以及在启用任何 CUPTI 活动类型之前设置此属性。这确保所有记录都存储在每个线程分配的活动缓冲区中。在分析会话中间更改此属性将导致未定义的行为。
默认值为 0。
-
enumerator CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_FORCE_INT
-
enumerator CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE
-
enum CUpti_ActivityComputeApiKind
计算 API 的种类。
值
-
enumerator CUPTI_ACTIVITY_COMPUTE_API_UNKNOWN
计算 API 未知。
-
enumerator CUPTI_ACTIVITY_COMPUTE_API_CUDA
计算 API 用于 CUDA。
-
enumerator CUPTI_ACTIVITY_COMPUTE_API_CUDA_MPS
计算 API 用于在 MPS(多进程服务)环境中运行的 CUDA。
-
enumerator CUPTI_ACTIVITY_COMPUTE_API_FORCE_INT
-
enumerator CUPTI_ACTIVITY_COMPUTE_API_UNKNOWN
-
enum CUpti_ActivityEnvironmentKind
环境数据的种类。
用于指示环境活动记录报告的数据类型。
值
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_UNKNOWN
未知数据。
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_SPEED
环境数据与速度相关。
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_TEMPERATURE
环境数据与温度相关。
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_POWER
环境数据与功耗相关。
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_COOLING
环境数据与散热相关。
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_COUNT
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_ENVIRONMENT_UNKNOWN
-
enum CUpti_ActivityFlag
与活动记录关联的标志。
活动记录标志。标志可以通过按位 OR 组合,以将多个标志与活动记录关联。每个标志都特定于某种活动类型,如下所述。
值
-
enumerator CUPTI_ACTIVITY_FLAG_NONE
表示活动记录没有标志。
-
enumerator CUPTI_ACTIVITY_FLAG_DEVICE_CONCURRENT_KERNELS
表示该设备支持并发内核执行。
对 CUPTI_ACTIVITY_KIND_DEVICE 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_DEVICE_ATTRIBUTE_CUDEVICE
指示活动表示 CUdevice_attribute 值还是 CUpti_DeviceAttribute 值。
对 CUPTI_ACTIVITY_KIND_DEVICE_ATTRIBUTE 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MEMCPY_ASYNC
表示活动表示异步 memcpy 操作。
对 CUPTI_ACTIVITY_KIND_MEMCPY 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_INSTANTANEOUS
表示活动表示瞬时标记。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_START
表示活动表示区域开始标记。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_END
表示活动表示区域结束标记。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_SYNC_ACQUIRE
表示活动表示尝试获取用户定义的同步对象。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_SYNC_ACQUIRE_SUCCESS
表示活动表示成功获取用户定义的同步对象。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_SYNC_ACQUIRE_FAILED
表示活动表示未能获取用户定义的同步对象。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_SYNC_RELEASE
表示活动表示释放用户定义的同步对象上的保留。
对 CUPTI_ACTIVITY_KIND_MARKER 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_COLOR_NONE
表示活动表示不指定颜色的标记。
对 CUPTI_ACTIVITY_KIND_MARKER_DATA 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_MARKER_COLOR_ARGB
表示活动表示以 alpha-红-绿-蓝格式指定颜色的标记。
对 CUPTI_ACTIVITY_KIND_MARKER_DATA 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_GLOBAL_ACCESS_KIND_SIZE_MASK
每个线程请求的字节数。对 CUpti_ActivityGlobalAccess3 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_GLOBAL_ACCESS_KIND_LOAD
如果此标志中的位已设置,则访问是加载,否则是存储访问。
-
enumerator CUPTI_ACTIVITY_FLAG_GLOBAL_ACCESS_KIND_CACHED
如果此标志中的位已设置,则加载访问已缓存,否则未缓存。
-
enumerator CUPTI_ACTIVITY_FLAG_METRIC_OVERFLOWED
如果此标志中的位已设置,则指标值溢出。
-
enumerator CUPTI_ACTIVITY_FLAG_METRIC_VALUE_INVALID
如果此标志中的位已设置,则无法计算指标值。
当计算指标所需的值缺失时,会发生这种情况。对 CUpti_ActivityMetric 和 CUpti_ActivityMetricInstance 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_INSTRUCTION_VALUE_INVALID
如果此标志中的位已设置,则无法计算源级别指标值。
当无法评估计算源级别指标所需的值时,会发生这种情况。对 CUpti_ActivityInstructionExecution 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_INSTRUCTION_CLASS_MASK
指令类别的掩码,CUpti_ActivityInstructionClass。对 CUpti_ActivityInstructionExecution 和 CUpti_ActivityInstructionCorrelation 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_FLUSH_FORCED
当调用 cuptiActivityFlushAll 时,可以设置此标志以强制 CUPTI 刷新缓冲区中的所有记录,无论是否已完成。
-
enumerator CUPTI_ACTIVITY_FLAG_SHARED_ACCESS_KIND_SIZE_MASK
每个线程请求的字节数。对 CUpti_ActivitySharedAccess 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_SHARED_ACCESS_KIND_LOAD
如果此标志中的位已设置,则访问是加载,否则是存储访问。
-
enumerator CUPTI_ACTIVITY_FLAG_MEMSET_ASYNC
表示活动表示异步 memset 操作。
对 CUPTI_ACTIVITY_KIND_MEMSET 有效。
-
enumerator CUPTI_ACTIVITY_FLAG_THRASHING_IN_CPU
表示活动表示 CPU 中的抖动。
对 CUPTI_ACTIVITY_KIND_UNIFIED_MEMORY_COUNTER 中 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_THRASHING 类型的计数器有效。
-
enumerator CUPTI_ACTIVITY_FLAG_THROTTLING_IN_CPU
表示活动表示 CPU 中的页面限制。
对 CUPTI_ACTIVITY_KIND_UNIFIED_MEMORY_COUNTER 中 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_THROTTLING 类型的计数器有效。
-
enumerator CUPTI_ACTIVITY_FLAG_FORCE_INT
-
enumerator CUPTI_ACTIVITY_FLAG_NONE
-
enum CUpti_ActivityInstructionClass
SASS 指令分类。
sass 指令大致分为不同的类别。每个枚举代表一个分类。
值
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_UNKNOWN
指令类别未知。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_FP_32
表示 32 位浮点运算。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_FP_64
表示 64 位浮点运算。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_INTEGER
表示整数运算。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_BIT_CONVERSION
表示位转换运算。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_CONTROL_FLOW
表示控制流指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_GLOBAL
表示全局加载-存储指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_SHARED
表示共享加载-存储指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_LOCAL
表示本地加载-存储指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_GENERIC
表示通用加载-存储指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_SURFACE
表示表面加载-存储指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_CONSTANT
表示常量加载指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_TEXTURE
表示纹理加载-存储指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_GLOBAL_ATOMIC
表示全局原子指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_SHARED_ATOMIC
表示共享原子指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_SURFACE_ATOMIC
表示表面原子指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_INTER_THREAD_COMMUNICATION
表示线程间通信指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_BARRIER
表示屏障指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_MISCELLANEOUS
表示一些不属于上述分类的杂项指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_FP_16
表示 16 位浮点运算。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_UNIFORM
表示统一指令。
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_INSTRUCTION_CLASS_UNKNOWN
-
enum CUpti_ActivityJitEntryType
JIT 条目的类型。
值
-
enumerator CUPTI_ACTIVITY_JIT_ENTRY_INVALID
-
enumerator CUPTI_ACTIVITY_JIT_ENTRY_PTX_TO_CUBIN
PTX 到 CUBIN。
-
enumerator CUPTI_ACTIVITY_JIT_ENTRY_NVVM_IR_TO_PTX
NVVM-IR 到 PTX。
-
enumerator CUPTI_ACTIVITY_JIT_ENTRY_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_JIT_ENTRY_INVALID
-
enum CUpti_ActivityJitOperationType
JIT 编译操作的类型。
值
-
enumerator CUPTI_ACTIVITY_JIT_OPERATION_INVALID
-
enumerator CUPTI_ACTIVITY_JIT_OPERATION_CACHE_LOAD
从计算缓存加载。
-
enumerator CUPTI_ACTIVITY_JIT_OPERATION_CACHE_STORE
存储在计算缓存中。
-
enumerator CUPTI_ACTIVITY_JIT_OPERATION_COMPILE
JIT 编译。
-
enumerator CUPTI_ACTIVITY_JIT_OPERATION_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_JIT_OPERATION_INVALID
-
enum CUpti_ActivityKind
活动记录的种类。
每种活动记录类型表示关于 GPU 或 CPU 或 GPU 上发生的活动的信息。每种类型都与一个活动记录结构相关联,该结构保存与该类型关联的信息。
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
另请参阅
CUpti_ActivityConfidentialComputeRotation
值
-
enumerator CUPTI_ACTIVITY_KIND_INVALID
活动记录无效。
-
enumerator CUPTI_ACTIVITY_KIND_MEMCPY
主机<->主机、主机<->设备或设备<->设备内存复制。
对于对等内存复制,请使用类型 CUPTI_ACTIVITY_KIND_MEMCPY2。相应的活动记录结构是 CUpti_ActivityMemcpy6。
-
enumerator CUPTI_ACTIVITY_KIND_MEMSET
在 GPU 上执行的内存设置。
相应的活动记录结构是 CUpti_ActivityMemset4。
-
enumerator CUPTI_ACTIVITY_KIND_KERNEL
在 GPU 上执行的内核。
此活动类型可能会显著改变应用程序的整体性能特征,因为所有内核执行都在 GPU 上串行化。内核的其他活动类型 CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL 不会破坏内核并发性。相应的活动记录结构是 CUpti_ActivityKernel9。
-
enumerator CUPTI_ACTIVITY_KIND_DRIVER
CUDA 驱动程序 API 函数执行。
相应的活动记录结构是 CUpti_ActivityAPI。
-
enumerator CUPTI_ACTIVITY_KIND_RUNTIME
CUDA 运行时 API 函数执行。
相应的活动记录结构是 CUpti_ActivityAPI。
-
enumerator CUPTI_ACTIVITY_KIND_EVENT
性能计数器(又称事件)值。
相应的活动记录结构是 CUpti_ActivityEvent。此活动无法直接启用或禁用。使用 Event API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_METRIC
性能指标值。
相应的活动记录结构是 CUpti_ActivityMetric。此活动无法直接启用或禁用。使用 Metric API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_DEVICE
关于 CUDA 设备的信息。
相应的活动记录结构是 CUpti_ActivityDevice5。
-
enumerator CUPTI_ACTIVITY_KIND_CONTEXT
关于 CUDA 上下文的信息。
相应的活动记录结构是 CUpti_ActivityContext3。
-
enumerator CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL
在 GPU 上执行的内核。
此活动类型不会破坏内核并发性。相应的活动记录结构是 CUpti_ActivityKernel9。
-
enumerator CUPTI_ACTIVITY_KIND_NAME
通过 NVTX API 完成的线程、设备、上下文等资源命名。
相应的活动记录结构是 CUpti_ActivityName。
-
enumerator CUPTI_ACTIVITY_KIND_MARKER
瞬时、开始或结束 NVTX 标记。
相应的活动记录结构是 CUpti_ActivityMarker2。
-
enumerator CUPTI_ACTIVITY_KIND_MARKER_DATA
关于 NVTX 标记的扩展、可选数据。
用户还必须启用 CUPTI_ACTIVITY_KIND_MARKER 才能获取标记数据的记录。相应的活动记录结构是 CUpti_ActivityMarkerData。
-
enumerator CUPTI_ACTIVITY_KIND_SOURCE_LOCATOR
关于源级别结果的源信息。
相应的活动记录结构是 CUpti_ActivitySourceLocator。在 CUDA 12.6 中,对于 Volta 及更高版本的 GPU 架构,此类型已被弃用,建议使用 cupti_sass_metrics.h 头文件中的 SASS 指标 API。
-
enumerator CUPTI_ACTIVITY_KIND_GLOBAL_ACCESS
源级别全局访问的结果。
相应的活动记录结构是 CUpti_ActivityGlobalAccess3。在 CUDA 12.6 中,对于 Volta 及更高版本的 GPU 架构,此类型已被弃用,建议使用 cupti_sass_metrics.h 头文件中的 SASS 指标 API。
-
enumerator CUPTI_ACTIVITY_KIND_BRANCH
源级别分支的结果。
相应的活动记录结构是 CUpti_ActivityBranch2。在 CUDA 12.6 中,对于 Volta 及更高版本的 GPU 架构,此类型已被弃用,建议使用 cupti_sass_metrics.h 头文件中的 SASS 指标 API。
-
enumerator CUPTI_ACTIVITY_KIND_OVERHEAD
由 CUPTI、编译器、CUDA 驱动程序等添加的开销。
相应的活动记录结构是 CUpti_ActivityOverhead3。
-
enumerator CUPTI_ACTIVITY_KIND_CDP_KERNEL
在 GPU 上执行的 CDP(CUDA 动态并行)内核。
相应的活动记录结构是 CUpti_ActivityCdpKernel。此活动无法直接启用或禁用。它通过并发内核活动(即 _CONCURRENT_KERNEL)启用和禁用。
-
enumerator CUPTI_ACTIVITY_KIND_PREEMPTION
抢占活动记录,指示 GPU 上执行的 CDP(CUDA 动态并行)内核的抢占。
相应的活动记录结构是 CUpti_ActivityPreemption。
-
enumerator CUPTI_ACTIVITY_KIND_ENVIRONMENT
环境活动记录,指示 GPU 的功耗、时钟、热量等水平。
相应的活动记录结构是 CUpti_ActivityEnvironment。
-
enumerator CUPTI_ACTIVITY_KIND_EVENT_INSTANCE
与特定事件域实例关联的性能计数器值。
相应的活动记录结构是 CUpti_ActivityEventInstance。此活动无法直接启用或禁用。使用 Event API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_MEMCPY2
对等内存复制。
相应的活动记录结构是 CUpti_ActivityMemcpyPtoP4。
-
enumerator CUPTI_ACTIVITY_KIND_METRIC_INSTANCE
与特定指标域实例关联的性能指标值。
相应的活动记录结构是 CUpti_ActivityMetricInstance。此活动无法直接启用或禁用。使用 Metric API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_INSTRUCTION_EXECUTION
源级别指令执行的结果。
相应的活动记录结构是 CUpti_ActivityInstructionExecution。在 CUDA 12.6 中,对于 Volta 及更高版本的 GPU 架构,此类型已被弃用,建议使用 cupti_sass_metrics.h 头文件中的 SASS 指标 API。
-
enumerator CUPTI_ACTIVITY_KIND_UNIFIED_MEMORY_COUNTER
统一内存计数器记录。
相应的活动记录结构是 CUpti_ActivityUnifiedMemoryCounter3。
-
enumerator CUPTI_ACTIVITY_KIND_FUNCTION
设备全局/函数记录。
相应的活动记录结构是 CUpti_ActivityFunction。
-
enumerator CUPTI_ACTIVITY_KIND_MODULE
CUDA 模块记录。
相应的活动记录结构是 CUpti_ActivityModule。此活动无法直接启用或禁用。使用模块回调收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_DEVICE_ATTRIBUTE
设备属性值。
相应的活动记录结构是 CUpti_ActivityDeviceAttribute。此活动无法直接启用或禁用。使用属性 CUpti_DeviceAttribute 或 CUdevice_attribute 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_SHARED_ACCESS
源级别共享访问的结果。
相应的活动记录结构是 CUpti_ActivitySharedAccess。在 CUDA 12.6 中,对于 Volta 及更高版本的 GPU 架构,此类型已被弃用,建议使用 cupti_sass_metrics.h 头文件中的 SASS 指标 API。
-
enumerator CUPTI_ACTIVITY_KIND_PC_SAMPLING
内核的 PC 采样信息。
这将串行化内核。相应的活动记录结构是 CUpti_ActivityPCSampling3。在 CUDA 12.5 中,对于 Volta 及更高版本的 GPU 架构,此类型已被弃用,建议使用 cupti_pcsampling.h 头文件中的 PC 采样 API,该 API 允许并发内核执行。
-
enumerator CUPTI_ACTIVITY_KIND_PC_SAMPLING_RECORD_INFO
关于 PC 采样记录的摘要信息。
对应的活动记录结构是 CUpti_ActivityPCSamplingRecordInfo。在 CUDA 12.5 中,Volta 及更新的 GPU 架构已弃用此类型,推荐使用 cupti_pcsampling.h 头文件中的 PC 采样 API。
-
enumerator CUPTI_ACTIVITY_KIND_INSTRUCTION_CORRELATION
SASS/源代码逐行关联记录。
这将为具有源代码级分析或 PC 采样结果的函数生成 sass/源代码关联。只有在启用源代码级分析或 PC 采样活动时才会生成记录。对应的活动记录结构是 CUpti_ActivityInstructionCorrelation。在 CUDA 12.6 中,Volta 及更新的 GPU 架构已弃用此类型,推荐使用 cupti_sass_metrics.h 头文件中的 SASS 指标 API。
-
enumerator CUPTI_ACTIVITY_KIND_OPENACC_DATA
OpenACC 数据事件。
对应的活动记录结构是 CUpti_ActivityOpenAccData。
-
enumerator CUPTI_ACTIVITY_KIND_OPENACC_LAUNCH
OpenACC 启动事件。
对应的活动记录结构是 CUpti_ActivityOpenAccLaunch。
-
enumerator CUPTI_ACTIVITY_KIND_OPENACC_OTHER
OpenACC 其他事件。
对应的活动记录结构是 CUpti_ActivityOpenAccOther。
-
enumerator CUPTI_ACTIVITY_KIND_CUDA_EVENT
关于 CUDA 事件 (cudaEvent) 的信息。
此活动无法直接启用或禁用。它通过活动 CUPTI_ACTIVITY_KIND_SYNCHRONIZATION 启用和禁用。对应的活动记录结构是 CUpti_ActivityCudaEvent2。
-
enumerator CUPTI_ACTIVITY_KIND_STREAM
关于 CUDA 流的信息。
对应的活动记录结构是 CUpti_ActivityStream。
-
enumerator CUPTI_ACTIVITY_KIND_SYNCHRONIZATION
CUDA 同步原语的记录。
对应的活动记录结构是 CUpti_ActivitySynchronization2。
-
enumerator CUPTI_ACTIVITY_KIND_EXTERNAL_CORRELATION
不同编程 API 关联的记录。
对应的活动记录结构是 CUpti_ActivityExternalCorrelation。
-
enumerator CUPTI_ACTIVITY_KIND_NVLINK
NVLink 拓扑信息。
对应的活动记录结构是 CUpti_ActivityNvLink4。
-
enumerator CUPTI_ACTIVITY_KIND_INSTANTANEOUS_EVENT
瞬时事件信息。
对应的活动记录结构是 CUpti_ActivityInstantaneousEvent。此活动无法直接启用或禁用。使用 Event API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_INSTANTANEOUS_EVENT_INSTANCE
特定事件域实例的瞬时事件信息。
对应的活动记录结构是 CUpti_ActivityInstantaneousEventInstance。此活动无法直接启用或禁用。使用 Event API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_INSTANTANEOUS_METRIC
瞬时指标信息。对应的活动记录结构是 CUpti_ActivityInstantaneousMetric。
此活动无法直接启用或禁用。使用 Metric API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_INSTANTANEOUS_METRIC_INSTANCE
特定指标域实例的瞬时指标信息。
对应的活动记录结构是 CUpti_ActivityInstantaneousMetricInstance。此活动无法直接启用或禁用。使用 Metric API 收集的信息可以存储在相应的活动记录中。
-
enumerator CUPTI_ACTIVITY_KIND_MEMORY
内存活动跟踪内存的分配和释放。对应的活动记录结构是 CUpti_ActivityMemory。
-
enumerator CUPTI_ACTIVITY_KIND_PCIE
用于 PCI 拓扑的 PCI 设备信息。
对应的活动记录结构是 CUpti_ActivityPcie。
-
enumerator CUPTI_ACTIVITY_KIND_OPENMP
OpenMP 并行事件。
对应的活动记录结构是 CUpti_ActivityOpenMp。
-
enumerator CUPTI_ACTIVITY_KIND_INTERNAL_LAUNCH_API
在任何公共 API 函数执行之外发生的 CUDA 驱动程序内核启动。
工具可以像处理驱动程序 API 启动函数的记录一样处理这些,尽管此处未使用 cbid 字段。对应的活动记录结构是 CUpti_ActivityAPI。
-
enumerator CUPTI_ACTIVITY_KIND_MEMORY2
内存活动跟踪内存的分配和释放。对应的活动记录结构是 CUpti_ActivityMemory4。
-
enumerator CUPTI_ACTIVITY_KIND_MEMORY_POOL
内存池活动跟踪内存池的创建、销毁和修剪。
对应的活动记录结构是 CUpti_ActivityMemoryPool2。
-
enumerator CUPTI_ACTIVITY_KIND_GRAPH_TRACE
图级别信息的活动记录。
对应的活动记录结构是 CUpti_ActivityGraphTrace2。
-
enumerator CUPTI_ACTIVITY_KIND_JIT
JIT(即时)操作跟踪。
对应的活动记录结构是 CUpti_ActivityJit。
-
enumerator CUPTI_ACTIVITY_KIND_DEVICE_GRAPH_TRACE
此活动无法直接启用或禁用。
当启用 CUPTI_ACTIVITY_KIND_GRAPH_TRACE 并且通过 API cuptiActivityEnableDeviceGraph() 启用设备图跟踪时,此活动将被启用。对应的活动记录结构是 CUpti_ActivityDeviceGraphTrace。
-
enumerator CUPTI_ACTIVITY_KIND_MEM_DECOMPRESS
跟踪要解压缩的复制批次。
对应的活动记录结构是 CUpti_ActivityMemDecompress。
-
enumerator CUPTI_ACTIVITY_KIND_COUNT
支持的活动类型计数。
-
enumerator CUPTI_ACTIVITY_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_KIND_INVALID
-
enum CUpti_ActivityLaunchType
CUDA 内核启动的类型。
值
-
enumerator CUPTI_ACTIVITY_LAUNCH_TYPE_REGULAR
内核通过常规内核调用启动。
-
enumerator CUPTI_ACTIVITY_LAUNCH_TYPE_COOPERATIVE_SINGLE_DEVICE
内核通过 API cudaLaunchCooperativeKernel() 或 cuLaunchCooperativeKernel() 启动
-
enumerator CUPTI_ACTIVITY_LAUNCH_TYPE_COOPERATIVE_MULTI_DEVICE
内核通过 API cudaLaunchCooperativeKernelMultiDevice() 或 cuLaunchCooperativeKernelMultiDevice() 启动
-
enumerator CUPTI_ACTIVITY_LAUNCH_TYPE_CBL_COMMANDLIST
内核作为 CBL 命令列表启动。
-
enumerator CUPTI_ACTIVITY_LAUNCH_TYPE_REGULAR
-
enum CUpti_ActivityMemcpyKind
内存复制的种类,指示复制的源和目标。
每种类型代表内存复制的源和目标。目标是主机、设备和数组。
值
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_UNKNOWN
内存复制类型未知。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_HTOD
主机到设备内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_DTOH
设备到主机内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_HTOA
主机到设备数组内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_ATOH
设备数组到主机内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_ATOA
设备数组到设备数组内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_ATOD
设备数组到设备内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_DTOA
设备到设备数组内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_DTOD
同一设备上的设备到设备内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_HTOH
主机到主机内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_PTOP
跨不同设备的对等内存复制。
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_MEMCPY_KIND_UNKNOWN
-
enum CUpti_ActivityMemoryKind
内存操作/复制访问的内存种类。
每种类型代表内存操作/复制访问的内存类型。
值
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_UNKNOWN
内存类型未知。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_PAGEABLE
内存是可分页的。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_PINNED
内存是已锁定的。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_DEVICE
内存位于设备上。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_ARRAY
内存是一个数组。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_MANAGED
内存是托管的。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_DEVICE_STATIC
内存是设备静态的。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_MANAGED_STATIC
内存是托管静态的。
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_MEMORY_KIND_UNKNOWN
-
enum CUpti_ActivityMemoryOperationType
内存操作类型。
描述内存操作的类型,与 CUpti_ActivityMemory4 一起使用。
值
-
enumerator CUPTI_ACTIVITY_MEMORY_OPERATION_TYPE_INVALID
操作无效。
-
enumerator CUPTI_ACTIVITY_MEMORY_OPERATION_TYPE_ALLOCATION
内存已分配。
-
enumerator CUPTI_ACTIVITY_MEMORY_OPERATION_TYPE_RELEASE
内存已释放。
-
enumerator CUPTI_ACTIVITY_MEMORY_OPERATION_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_MEMORY_OPERATION_TYPE_INVALID
-
enum CUpti_ActivityMemoryPoolOperationType
内存池操作类型。
描述内存池操作的类型,与 CUpti_ActivityMemoryPool2 一起使用。
值
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_OPERATION_TYPE_INVALID
操作无效。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_OPERATION_TYPE_CREATED
内存池已创建。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_OPERATION_TYPE_DESTROYED
内存池已销毁。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_OPERATION_TYPE_TRIMMED
内存池已被修剪。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_OPERATION_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_OPERATION_TYPE_INVALID
-
enum CUpti_ActivityMemoryPoolType
内存池类型。
描述内存池的类型,与 CUpti_ActivityMemory4 一起使用。
值
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_TYPE_INVALID
操作无效。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_TYPE_LOCAL
内存池是进程本地的。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_TYPE_IMPORTED
内存池由进程导入。
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_MEMORY_POOL_TYPE_INVALID
-
enum CUpti_ActivityObjectKind
活动对象的种类。
值
-
enumerator CUPTI_ACTIVITY_OBJECT_UNKNOWN
对象类型未知。
-
enumerator CUPTI_ACTIVITY_OBJECT_PROCESS
一个进程。
-
enumerator CUPTI_ACTIVITY_OBJECT_THREAD
一个线程。
-
enumerator CUPTI_ACTIVITY_OBJECT_DEVICE
一个设备。
-
enumerator CUPTI_ACTIVITY_OBJECT_CONTEXT
一个上下文。
-
enumerator CUPTI_ACTIVITY_OBJECT_STREAM
一个流。
-
enumerator CUPTI_ACTIVITY_OBJECT_FORCE_INT
-
enumerator CUPTI_ACTIVITY_OBJECT_UNKNOWN
-
enum CUpti_ActivityOverheadKind
活动开销的种类。
值
-
enumerator CUPTI_ACTIVITY_OVERHEAD_UNKNOWN
开销类型未知。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_DRIVER_COMPILER
编译器开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_CUPTI_BUFFER_FLUSH
活动缓冲区刷新开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_CUPTI_INSTRUMENTATION
CUPTI Instrumentation 开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_CUPTI_RESOURCE
CUPTI 资源创建和销毁开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_RUNTIME_TRIGGERED_MODULE_LOADING
CUDA 运行时触发的模块加载开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_LAZY_FUNCTION_LOADING
延迟函数加载开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_COMMAND_BUFFER_FULL
由于缺少命令缓冲区空间导致的开销。
有关更多详细信息,请参阅 CUpti_ActivityOverheadCommandBufferFullData。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_ACTIVITY_BUFFER_REQUEST
由于活动缓冲区请求导致的开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_UVM_ACTIVITY_INIT
由于 UVM 活动初始化导致的开销。
-
enumerator CUPTI_ACTIVITY_OVERHEAD_FORCE_INT
-
enumerator CUPTI_ACTIVITY_OVERHEAD_UNKNOWN
-
enum CUpti_ActivityPCSamplingPeriod
PC 采样方法的采样周期。
采样周期可以使用 cuptiActivityConfigurePCSampling 进行设置
值
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_INVALID
PC 采样周期未设置。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_MIN
设备上可用的最小采样周期。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_LOW
较低范围内的采样周期。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_MID
中等采样周期。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_HIGH
较高范围内的采样周期。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_MAX
设备上可用的最大采样周期。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_FORCE_INT
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_PERIOD_INVALID
-
enum CUpti_ActivityPCSamplingStallReason
PC 采样活动的停顿原因。
值
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_INVALID
无效原因。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_NONE
没有停顿,指令被选中以供执行。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_INST_FETCH
线程束被阻止,因为下一个指令尚不可用,由于指令缓存未命中或分支效应。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_EXEC_DEPENDENCY
指令正在等待算术依赖关系。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_MEMORY_DEPENDENCY
线程束被阻止,因为它正在等待内存访问完成。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_TEXTURE
纹理子系统已完全利用或有太多未完成的请求。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_SYNC
线程束被阻止,因为它正在 __syncthreads() 或内存屏障处等待。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_CONSTANT_MEMORY_DEPENDENCY
线程束被阻止,等待常量内存和立即内存访问完成。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_PIPE_BUSY
由于所需资源不可用,无法执行计算操作。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_MEMORY_THROTTLE
线程束被阻止,因为有太多挂起的内存操作。
在 Kepler 架构中,它通常表示大量的内存重放。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_NOT_SELECTED
线程束已准备好执行,但其他线程束代替执行。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_OTHER
其他原因。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_SLEEPING
睡眠中。
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_FORCE_INT
-
enumerator CUPTI_ACTIVITY_PC_SAMPLING_STALL_INVALID
-
enum CUpti_ActivityPartitionedGlobalCacheConfig
分区全局缓存选项。
值
-
enumerator CUPTI_ACTIVITY_PARTITIONED_GLOBAL_CACHE_CONFIG_UNKNOWN
分区全局缓存配置未知。
-
enumerator CUPTI_ACTIVITY_PARTITIONED_GLOBAL_CACHE_CONFIG_NOT_SUPPORTED
不支持分区全局缓存。
-
enumerator CUPTI_ACTIVITY_PARTITIONED_GLOBAL_CACHE_CONFIG_OFF
分区全局缓存配置关闭。
-
enumerator CUPTI_ACTIVITY_PARTITIONED_GLOBAL_CACHE_CONFIG_ON
分区全局缓存配置开启。
-
enumerator CUPTI_ACTIVITY_PARTITIONED_GLOBAL_CACHE_CONFIG_FORCE_INT
-
enumerator CUPTI_ACTIVITY_PARTITIONED_GLOBAL_CACHE_CONFIG_UNKNOWN
-
enum CUpti_ActivityPreemptionKind
抢占活动的种类。
值
-
enumerator CUPTI_ACTIVITY_PREEMPTION_KIND_UNKNOWN
抢占类型未知。
-
enumerator CUPTI_ACTIVITY_PREEMPTION_KIND_SAVE
抢占以保存 CDP 块。
-
enumerator CUPTI_ACTIVITY_PREEMPTION_KIND_RESTORE
抢占以恢复 CDP 块。
-
enumerator CUPTI_ACTIVITY_PREEMPTION_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_PREEMPTION_KIND_UNKNOWN
-
enum CUpti_ActivityStreamFlag
流类型。
要与 CUpti_ActivityStream 一起使用的流类型。
值
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_FLAG_UNKNOWN
未知数据。
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_FLAG_DEFAULT
默认流。
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_FLAG_NON_BLOCKING
非阻塞流。
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_FLAG_NULL
空流。
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_MASK
流创建掩码。
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_FLAG_FORCE_INT
-
enumerator CUPTI_ACTIVITY_STREAM_CREATE_FLAG_UNKNOWN
-
enum CUpti_ActivitySynchronizationType
同步类型。
与 CUpti_ActivitySynchronization2 一起使用的同步类型。
值
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_UNKNOWN
未知数据。
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_EVENT_SYNCHRONIZE
事件同步 API。
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_STREAM_WAIT_EVENT
流等待事件 API。
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_STREAM_SYNCHRONIZE
流同步 API。
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_CONTEXT_SYNCHRONIZE
上下文同步 API。
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_SYNCHRONIZATION_TYPE_UNKNOWN
-
enum CUpti_ActivityThreadIdType
线程 ID 类型。
CUPTI 使用不同的方法来获取线程 ID,具体取决于支持和底层平台。此枚举记录了每种类型的方法。API cuptiSetThreadIdType 和 cuptiGetThreadIdType 可用于设置和获取线程 ID 类型。
值
-
enumerator CUPTI_ACTIVITY_THREAD_ID_TYPE_DEFAULT
默认类型 Windows 使用 API GetCurrentThreadId() Linux/Mac/Android/QNX 使用 POSIX pthread API pthread_self()
-
enumerator CUPTI_ACTIVITY_THREAD_ID_TYPE_SYSTEM
此类型基于底层平台上可用的系统 API,并且获取的线程 ID 应该在进程生命周期内是唯一的。
Windows 使用 API GetCurrentThreadId() Linux 使用 syscall SYS_gettid Mac 使用 syscall SYS_thread_selfid Android/QNX 使用 gettid()
-
enumerator CUPTI_ACTIVITY_THREAD_ID_TYPE_SIZE
在此字段之前添加新的枚举。
-
enumerator CUPTI_ACTIVITY_THREAD_ID_TYPE_FORCE_INT
-
enumerator CUPTI_ACTIVITY_THREAD_ID_TYPE_DEFAULT
-
enum CUpti_ActivityUnifiedMemoryAccessType
统一内存页错误的内存访问类型。
这对于 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_GPU_PAGE_FAULT 和 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_CPU_PAGE_FAULT_COUNT 有效
值
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_ACCESS_TYPE_UNKNOWN
统一内存访问类型未知。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_ACCESS_TYPE_READ
页错误是由读取内存指令触发的。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_ACCESS_TYPE_WRITE
页错误是由写入内存指令触发的。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_ACCESS_TYPE_ATOMIC
页错误是由原子内存指令触发的。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_ACCESS_TYPE_PREFETCH
页错误是由内存预取操作触发的。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_ACCESS_TYPE_UNKNOWN
-
enum CUpti_ActivityUnifiedMemoryCounterKind
统一内存计数器的种类。
许多活动与统一内存机制相关联;其中包括从主机到设备、设备到主机以及主机端的页错误传输。
值
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_UNKNOWN
统一内存计数器类型未知。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_BYTES_TRANSFER_HTOD
从主机传输到设备的字节数。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_BYTES_TRANSFER_DTOH
从设备传输到主机的字节数。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_CPU_PAGE_FAULT_COUNT
CPU 页错误的数量,仅在 64 位 Linux 和 Mac 平台上受支持。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_GPU_PAGE_FAULT
GPU 页错误的数量,仅在计算能力为 6.0 及更高版本的设备以及 64 位 Linux 平台上受支持。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_THRASHING
当数据被多个处理器频繁访问并且必须不断迁移以实现数据局部性时,会发生抖动。
在这种情况下,迁移的开销可能超过局部性的好处。这仅在 64 位 Linux 平台上受支持。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_THROTTLING
节流是驱动程序使用的一种预防技术,用于避免进一步的抖动。
在这里,驱动程序在一段时间内不处理其中一个争用处理器的错误,以便另一个处理器可以全速运行。这仅在 64 位 Linux 平台上受支持。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_REMOTE_MAP
如果节流没有帮助,驱动程序会尝试在一段时间内将内存固定到处理器。
其中一个争用处理器将缓慢访问内存,而另一个将快速访问内存。这仅在 64 位 Linux 平台上受支持。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_BYTES_TRANSFER_DTOD
从一个设备传输到另一个设备的字节数。
这仅在 64 位 Linux 平台上受支持。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_COUNT
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_FORCE_INT
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_UNKNOWN
-
enum CUpti_ActivityUnifiedMemoryCounterScope
统一内存计数器的范围(在 CUDA 7.0 中已弃用)
值
-
统一内存计数器范围未知。
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_SCOPE_UNKNOWN
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_SCOPE_PROCESS_SINGLE_DEVICE
在单个设备上为单个进程收集统一内存计数器。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_SCOPE_PROCESS_ALL_DEVICES
在所有设备上为单个进程收集统一内存计数器。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_SCOPE_COUNT
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_SCOPE_FORCE_INT
-
统一内存计数器范围未知。
-
enum CUpti_ActivityUnifiedMemoryMigrationCause
统一内存计数器的迁移原因。
这对于 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_BYTES_TRANSFER_HTOD 和 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_BYTES_TRANSFER_DTOH 有效
值
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_UNKNOWN
统一内存迁移原因未知。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_USER
统一内存由于用户的显式调用而迁移,例如。
cudaMemPrefetchAsync
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_COHERENCE
统一内存迁移以保证数据一致性,例如。
Pascal+ 上的 CPU/GPU 错误以及 pre-Pascal GPU 上的内核启动
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_PREFETCH
统一内存由 UVM 驱动程序在被目标处理器访问之前推测性地迁移,以提高性能。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_EVICTION
统一内存迁移到 CPU,因为它被驱逐,以便在 GPU 上为另一个内存块腾出空间。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_ACCESS_COUNTERS
统一内存迁移到另一个处理器,因为访问计数器通知。
只有频繁访问的页面才会在 CPU 和 GPU 之间或对等 GPU 之间迁移。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_MIGRATION_CAUSE_UNKNOWN
-
enum CUpti_ActivityUnifiedMemoryRemoteMapCause
统一内存计数器的远程内存映射原因。
这对于 CUPTI_ACTIVITY_UNIFIED_MEMORY_COUNTER_KIND_REMOTE_MAP 有效
值
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_UNKNOWN
映射到远程内存的原因未知。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_COHERENCE
添加了到远程内存的映射以保持数据一致性。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_THRASHING
添加了到远程内存的映射以防止进一步的抖动。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_POLICY
添加了到远程内存的映射,以强制执行程序员或UVM驱动程序的性能启发法指定的提示。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_OUT_OF_MEMORY
添加了到远程内存的映射,因为处理器上没有更多可用内存,并且无法进行驱逐。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_EVICTION
在内存被驱逐以为GPU上的另一个内存块腾出空间后,添加了到远程内存的映射。
-
enumerator CUPTI_ACTIVITY_UNIFIED_MEMORY_REMOTE_MAP_CAUSE_UNKNOWN
-
enum CUpti_ChannelType
值
-
enumerator CUPTI_CHANNEL_TYPE_INVALID
-
enumerator CUPTI_CHANNEL_TYPE_COMPUTE
通道用于标准工作启动和跟踪。
-
enumerator CUPTI_CHANNEL_TYPE_ASYNC_MEMCPY
通道由异步复制引擎使用。对于保密计算配置,工作启动和完成使用复制引擎完成。
-
enumerator CUPTI_CHANNEL_TYPE_DECOMP
通道用于内存解压缩操作。
-
enumerator CUPTI_CHANNEL_TYPE_FORCE_INT
-
enumerator CUPTI_CHANNEL_TYPE_INVALID
-
enum CUpti_ContextCigMode
CIG (图形中的 CUDA) 模式。
描述与CUDA上下文关联的CIG模式。
值
-
enumerator CUPTI_CONTEXT_CIG_MODE_NONE
常规(非CIG)模式。
-
enumerator CUPTI_CONTEXT_CIG_MODE_CIG
CIG模式。
-
enumerator CUPTI_CONTEXT_CIG_MODE_CIG_FALLBACK
CIG回退模式。
-
enumerator CUPTI_CONTEXT_CIG_MODE_FORCE_INT
-
enumerator CUPTI_CONTEXT_CIG_MODE_NONE
-
enum CUpti_DevType
连接到 NVLink 的设备的设备类型。
值
-
enumerator CUPTI_DEV_TYPE_INVALID
-
enumerator CUPTI_DEV_TYPE_GPU
设备类型为GPU。
-
enumerator CUPTI_DEV_TYPE_NPU
设备类型为CPU中的NVLink处理单元。
-
enumerator CUPTI_DEV_TYPE_FORCE_INT
-
enumerator CUPTI_DEV_TYPE_INVALID
-
enum CUpti_DeviceGraphLaunchMode
设备图执行的启动模式。
值
-
enumerator CUPTI_DEVICE_GRAPH_LAUNCH_MODE_INVALID
-
enumerator CUPTI_DEVICE_GRAPH_LAUNCH_MODE_FIRE_AND_FORGET
-
enumerator CUPTI_DEVICE_GRAPH_LAUNCH_MODE_TAIL
-
enumerator CUPTI_DEVICE_GRAPH_LAUNCH_MODE_FIRE_AND_FORGET_AS_SIBLING
-
enumerator CUPTI_DEVICE_GRAPH_LAUNCH_MODE_INVALID
-
enum CUpti_DeviceVirtualizationMode
指示 CUDA 设备运行的虚拟化模式。
值
-
enumerator CUPTI_DEVICE_VIRTUALIZATION_MODE_NONE
没有虚拟化模式与设备关联,即
它是裸机GPU
-
enumerator CUPTI_DEVICE_VIRTUALIZATION_MODE_PASS_THROUGH
该设备与直通GPU关联。
在此模式下,整个物理GPU直接分配给一个虚拟机(VM)。
-
enumerator CUPTI_DEVICE_VIRTUALIZATION_MODE_VIRTUAL_GPU
该设备与虚拟GPU(vGPU)关联。
在此模式下,多个虚拟机(VM)同时直接访问单个物理GPU。
-
enumerator CUPTI_DEVICE_VIRTUALIZATION_MODE_FORCE_INT
-
enumerator CUPTI_DEVICE_VIRTUALIZATION_MODE_NONE
-
enum CUpti_EnvironmentClocksThrottleReason
时钟节流的原因。
时钟可能被节流的可能原因。时钟被节流可能有多个原因,因此这些类型可以通过按位OR组合。这些在环境活动记录的 clocksThrottleReason 字段中使用。
值
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_GPU_IDLE
GPU上没有任何运行,时钟正在降至空闲状态。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_USER_DEFINED_CLOCKS
GPU时钟受到用户指定限制的限制。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_SW_POWER_CAP
软件功率缩放算法正在将时钟降低到低于请求的时钟。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_HW_SLOWDOWN
硬件减速以将时钟降低两倍或更多倍已被启用。
这是以下情况之一的指示:1) 温度过高,2) 外部电源制动断言正在被触发(例如,由系统电源),3) 电源状态变化。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_UNKNOWN
某些未指定的因素正在降低时钟。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_UNSUPPORTED
此GPU不支持节流原因。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_NONE
没有时钟节流。
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_FORCE_INT
-
enumerator CUPTI_CLOCKS_THROTTLE_REASON_GPU_IDLE
-
enum CUpti_ExternalCorrelationKind
关联支持的外部 API 的种类。
自定义关联种类保留用于外部工具。
值
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_INVALID
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_UNKNOWN
外部API对CUPTI未知。
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_OPENACC
外部API是OpenACC。
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_CUSTOM0
外部API是custom0。
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_CUSTOM1
外部API是custom1。
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_CUSTOM2
外部API是custom2。
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_SIZE
在此行之前添加新种类。
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_FORCE_INT
-
enumerator CUPTI_EXTERNAL_CORRELATION_KIND_INVALID
-
enum CUpti_FuncShmemLimitConfig
内核的每个块的共享内存限制配置。这应该用于在占用率计算器API中设置 'cudaOccFuncShmemConfig' 字段。
值
-
enumerator CUPTI_FUNC_SHMEM_LIMIT_DEFAULT
共享内存限制配置为默认值。
-
enumerator CUPTI_FUNC_SHMEM_LIMIT_OPTIN
用户已选择更高的动态共享内存限制,使用运行时API的函数属性 'cudaFuncAttributeMaxDynamicSharedMemorySize' 或驱动程序API的 CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES。
-
enumerator CUPTI_FUNC_SHMEM_LIMIT_FORCE_INT
-
enumerator CUPTI_FUNC_SHMEM_LIMIT_DEFAULT
-
enum CUpti_LinkFlag
链接标志。
描述链接属性,与 CUpti_ActivityNvLink 一起使用。
值
-
enumerator CUPTI_LINK_FLAG_INVALID
该标志无效。
-
enumerator CUPTI_LINK_FLAG_PEER_ACCESS
此链接是否支持对等访问。
-
enumerator CUPTI_LINK_FLAG_SYSMEM_ACCESS
此链接是否支持系统内存访问。
-
enumerator CUPTI_LINK_FLAG_PEER_ATOMICS
此链接是否支持对等原子访问。
-
enumerator CUPTI_LINK_FLAG_SYSMEM_ATOMICS
此链接是否支持系统内存原子访问。
-
enumerator CUPTI_LINK_FLAG_FORCE_INT
-
enumerator CUPTI_LINK_FLAG_INVALID
-
enum CUpti_OpenAccConstructKind
OpenAcc 活动记录的 OpenAcc 父构造种类。
值
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_UNKNOWN
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_PARALLEL
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_KERNELS
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_LOOP
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_DATA
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_ENTER_DATA
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_EXIT_DATA
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_HOST_DATA
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_ATOMIC
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_DECLARE
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_INIT
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_SHUTDOWN
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_SET
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_UPDATE
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_ROUTINE
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_WAIT
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_RUNTIME_API
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_FORCE_INT
-
enumerator CUPTI_OPENACC_CONSTRUCT_KIND_UNKNOWN
-
enum CUpti_OpenAccEventKind
OpenAcc 活动记录的 OpenAcc 事件种类。
另请参阅
CUpti_ActivityKindOpenAcc
值
-
enumerator CUPTI_OPENACC_EVENT_KIND_INVALID
-
enumerator CUPTI_OPENACC_EVENT_KIND_DEVICE_INIT
-
enumerator CUPTI_OPENACC_EVENT_KIND_DEVICE_SHUTDOWN
-
enumerator CUPTI_OPENACC_EVENT_KIND_RUNTIME_SHUTDOWN
-
enumerator CUPTI_OPENACC_EVENT_KIND_ENQUEUE_LAUNCH
-
enumerator CUPTI_OPENACC_EVENT_KIND_ENQUEUE_UPLOAD
-
enumerator CUPTI_OPENACC_EVENT_KIND_ENQUEUE_DOWNLOAD
-
enumerator CUPTI_OPENACC_EVENT_KIND_WAIT
-
enumerator CUPTI_OPENACC_EVENT_KIND_IMPLICIT_WAIT
-
enumerator CUPTI_OPENACC_EVENT_KIND_COMPUTE_CONSTRUCT
-
enumerator CUPTI_OPENACC_EVENT_KIND_UPDATE
-
enumerator CUPTI_OPENACC_EVENT_KIND_ENTER_DATA
-
enumerator CUPTI_OPENACC_EVENT_KIND_EXIT_DATA
-
enumerator CUPTI_OPENACC_EVENT_KIND_CREATE
-
enumerator CUPTI_OPENACC_EVENT_KIND_DELETE
-
enumerator CUPTI_OPENACC_EVENT_KIND_ALLOC
-
enumerator CUPTI_OPENACC_EVENT_KIND_FREE
-
enumerator CUPTI_OPENACC_EVENT_KIND_FORCE_INT
-
enumerator CUPTI_OPENACC_EVENT_KIND_INVALID
-
enum CUpti_OpenMpEventKind
值
-
enumerator CUPTI_OPENMP_EVENT_KIND_INVALID
-
enumerator CUPTI_OPENMP_EVENT_KIND_PARALLEL
-
enumerator CUPTI_OPENMP_EVENT_KIND_TASK
-
enumerator CUPTI_OPENMP_EVENT_KIND_THREAD
-
enumerator CUPTI_OPENMP_EVENT_KIND_IDLE
-
enumerator CUPTI_OPENMP_EVENT_KIND_WAIT_BARRIER
-
enumerator CUPTI_OPENMP_EVENT_KIND_WAIT_TASKWAIT
-
enumerator CUPTI_OPENMP_EVENT_KIND_FORCE_INT
-
enumerator CUPTI_OPENMP_EVENT_KIND_INVALID
-
enum CUpti_PcieDeviceType
区分 PCIE 活动记录是 GPU 还是 PCI 桥的字段。
值
-
enumerator CUPTI_PCIE_DEVICE_TYPE_GPU
PCIE GPU 记录。
-
enumerator CUPTI_PCIE_DEVICE_TYPE_BRIDGE
PCIE 桥接器记录。
-
enumerator CUPTI_PCIE_DEVICE_TYPE_FORCE_INT
-
enumerator CUPTI_PCIE_DEVICE_TYPE_GPU
-
enum CUpti_PcieGen
PCIE 代。
用于 pcie 活动属性 pcieGeneration 的 PCIE 代枚举
值
-
enumerator CUPTI_PCIE_GEN_GEN1
PCIE 第一代。
-
enumerator CUPTI_PCIE_GEN_GEN2
PCIE 第二代。
-
enumerator CUPTI_PCIE_GEN_GEN3
PCIE 第三代。
-
enumerator CUPTI_PCIE_GEN_GEN4
PCIE 第四代。
-
enumerator CUPTI_PCIE_GEN_GEN5
PCIE 第五代。
-
enumerator CUPTI_PCIE_GEN_GEN6
PCIE 第六代。
-
enumerator CUPTI_PCIE_GEN_FORCE_INT
-
enumerator CUPTI_PCIE_GEN_GEN1
5.1.3. 函数
-
CUptiResult cuptiActivityConfigurePCSampling(CUcontext ctx, CUpti_ActivityPCSamplingConfig *config)
设置 PC 采样配置。
对于 Pascal 和更早的 GPU 架构,必须在启用活动类型 CUPTI_ACTIVITY_KIND_PC_SAMPLING 之前调用此 API。对于 Volta 和更新的 GPU 架构,没有这样的要求。
对于 Volta 和更新的 GPU 架构,如果在执行过程中调用此 API,PC 采样配置将针对后续的内核启动进行更新。
- 参数
ctx – 上下文
config – 指向 CUpti_ActivityPCSamplingConfig 结构的指针,该结构包含 PC 采样配置。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_OPERATION – 如果在设置了某些有效的事件收集方法时调用此 API。
CUPTI_ERROR_INVALID_PARAMETER – 如果
config
为 NULL,或者config
结构中的任何参数不是有效值CUPTI_ERROR_NOT_SUPPORTED – 表示系统/设备不支持统一内存计数器
-
CUptiResult cuptiActivityConfigureUnifiedMemoryCounter(CUpti_ActivityUnifiedMemoryCounterConfig *config, uint32_t count)
设置统一内存计数器配置。
在启用相应的活动类型 CUPTI_ACTIVITY_KIND_UNIFIED_MEMORY_COUNTER 之前设置配置。应在 CUDA 驱动程序初始化后调用此 API。
- 参数
config – 指向 CUpti_ActivityUnifiedMemoryCounterConfig 结构的指针,该结构包含统一内存计数器配置。
count – 统一内存计数器配置结构的数目
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
config
为 NULL,或者config
结构中的任何参数不是有效值CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED – 一个潜在原因是平台 (OS/架构) 不支持统一内存计数器
CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_ON_DEVICE – 表示设备不支持统一内存计数器
CUPTI_ERROR_UM_PROFILING_NOT_SUPPORTED_ON_NON_P2P_DEVICES – 表示任何设备对之间没有 P2P 支持的多 GPU 配置不支持统一内存计数器
-
CUptiResult cuptiActivityDisable(CUpti_ActivityKind kind)
禁用特定类型活动记录的收集。
禁用收集特定类型的活动记录。可以通过多次调用此函数来禁用多种类型。默认情况下,所有活动类型都禁用收集。
- 参数
kind – 要停止收集的活动记录的类型
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_KIND – 如果不支持活动类型
-
CUptiResult cuptiActivityDisableContext(CUcontext context, CUpti_ActivityKind kind)
禁用上下文中特定类型活动记录的收集。
禁用为上下文收集特定类型的活动记录。此 API 完成的设置将取代活动记录的全局设置。可以通过多次调用此函数来启用多种类型。
- 参数
context – 要为其禁用活动的上下文
kind – 要停止收集的活动记录的类型
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_KIND – 如果不支持活动类型
-
CUptiResult cuptiActivityEnable(CUpti_ActivityKind kind)
启用特定类型活动记录的收集。
启用收集特定类型的活动记录。可以通过多次调用此函数来启用多种类型。默认情况下,所有活动类型都禁用收集。
- 参数
kind – 要收集的活动记录的类型
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_NOT_COMPATIBLE – 如果无法启用活动类型
CUPTI_ERROR_INVALID_KIND – 如果不支持活动类型
-
CUptiResult cuptiActivityEnableAllSyncRecords(uint8_t enable)
启用收集所有同步操作的记录。
CUPTI 通过 CUPTI_ACTIVTIY_KIND_SYNCHRONIZATION 提供 CUDA 事件查询和流查询记录。使用此 API,即使事件尚未完成,并且流上的所有操作尚未完成,CUPTI 客户端也可以启用记录所有 CUDA 事件查询和流查询记录。
默认情况下,仅当 CUDA 事件的所有捕获工作都已完成时,才会生成记录。默认情况下,仅当流上的所有操作都已完成时,才会生成记录。
- 参数
enable – 是一个布尔值,表示是启用还是禁用收集所有 CUDA 事件查询和流查询记录
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityEnableAllocationSource(uint8_t enable)
启用跟踪内存分配请求的源库。
此 API 用于控制是否跟踪内存分配请求的源库。默认值为 0,即不跟踪。需要启用活动类型 CUPTI_ACTIVITY_KIND_MEMORY2,并且如果设置了此标志,我们将在 CUpti_ActivityMemory4 记录的成员源中获取负责 GPU 内存分配请求的共享对象的完整路径。另请注意,此功能会增加运行时开销。
- 参数
enable – 是一个布尔值,表示是否需要跟踪内存分配请求的源库
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityEnableAndDump(CUpti_ActivityKind kind)
启用特定类型活动记录的收集。
对于某些活动类型,它会转储现有记录。
一般来说,此 API 的行为类似于 API cuptiActivityEnable,即它启用收集特定类型的活动记录。此外,此 API 可以帮助转储在启用相应活动类型之前发生的活动的记录。该 API 允许获取 CUDA 中完成的当前资源分配的记录。对于 CUPTI_ACTIVITY_KIND_DEVICE,将转储现有设备记录。对于 CUPTI_ACTIVITY_KIND_CONTEXT,将转储现有上下文记录。对于 CUPTI_ACTIVITY_KIND_STREAM,将转储现有流记录。对于 CUPTI_ACTIVITY_KIND_NVLINK,将转储现有 NVLINK 记录。对于 CUPTI_ACTIVITY_KIND_PCIE,将转储现有 PCIE 记录。对于其他活动,行为类似于 API cuptiActivityEnable
设备记录在 CUDA 驱动程序初始化时在 CUPTI 中发出。只有在 CUDA 初始化之前附加 CUPTI,用户才能检索这些记录。上下文和流记录在上下文和流创建时发出。此 API 的用例是为 CUDA 资源(上下文/流/设备)提供记录,如果用户稍后附加 CUPTI,这些资源当前处于活动状态。
在调用此函数之前,用户必须注册缓冲区回调,以便通过调用 cuptiActivityRegisterCallbacks 来获取活动记录。如果用户未注册缓冲区并调用 API cuptiActivityEnableAndDump,则 CUPTI 将启用活动类型,但不提供该活动类型的任何记录。
- 参数
kind – 要收集的活动记录的类型
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_UNKNOWN – 如果缓冲区未初始化。
CUPTI_ERROR_NOT_COMPATIBLE – 如果无法启用活动类型
CUPTI_ERROR_INVALID_KIND – 如果不支持活动类型
-
CUptiResult cuptiActivityEnableContext(CUcontext context, CUpti_ActivityKind kind)
启用上下文中特定类型活动记录的收集。
为上下文启用特定类型的活动记录的收集。此 API 完成的设置将取代由 cuptiActivityEnable 启用的活动记录的全局设置。可以通过多次调用此函数来启用多种类型。
- 参数
context – 要为其启用活动记录的上下文
kind – 要收集的活动记录的类型
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_NOT_COMPATIBLE – 如果无法启用活动类型
CUPTI_ERROR_INVALID_KIND – 如果不支持活动类型
-
CUptiResult cuptiActivityEnableDeviceGraph(uint8_t enable)
控制设备启动图的记录收集。
此 API 用于控制设备启动图记录的收集。默认值为 0,即不收集这些记录。此 API 需要在 CUDA 初始化之前调用,并且此设置在分析会话期间不应更改。
- 参数
enable – 一个布尔值,表示是否应收集这些记录
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityEnableDriverApi(CUpti_CallbackId cbid, uint8_t enable)
控制特定 CUDA 驱动程序 API 的活动记录收集。
活动类型 CUPTI_ACTIVITY_KIND_DRIVER 控制所有 CUDA Driver API 或都不收集。API cuptiActivityEnableDriverApi 可用于细粒度控制,它允许启用/禁用对特定 CUDA Driver API 集的跟踪。要禁用少量 CUDA Driver API 的收集,用户可以首先使用活动类型 CUPTI_ACTIVITY_KIND_DRIVER 启用所有 Driver API 的收集,然后调用此 API 以禁用特定的 Driver API。要启用少量 CUDA Driver API 的收集,用户可以直接调用此 API,而无需使用活动类型 CUPTI_ACTIVITY_KIND_DRIVER。
注意:如果活动类型 CUPTI_ACTIVITY_KIND_DRIVER 在此 API 之后调用,它将覆盖此 API 完成的设置。
- 参数
cbid – CUDA Driver API 的回调 ID。这可以在头文件 cupti_driver_cbid.h 中找到。
enable – 一个布尔值,表示是启用还是禁用收集
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityEnableHWTrace(uint8_t enable)
启用通过硬件事件收集 CUDA 内核时间戳。
此 API 允许通过硬件事件而不是传统的软件检测和基于信号量的方法来收集 CUDA 内核时间戳。此选项仅在 Blackwell 架构上可用。此 API 应在驱动程序初始化后调用。
- 参数
enable – 一个布尔值,表示是否通过硬件事件启用或禁用收集
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED – 如果 CUPTI 未初始化或 CUDA 驱动程序未初始化
CUPTI_ERROR_NOT_SUPPORTED – 如果在当前平台上无法启用硬件跟踪
CUPTI_ERROR_VIRTUALIZED_DEVICE_NOT_SUPPORTED –
CUPTI_ERROR_CONFIDENTIAL_COMPUTING_NOT_SUPPORTED –
CUPTI_ERROR_CMP_DEVICE_NOT_SUPPORTED –
CUPTI_ERROR_MIG_DEVICE_NOT_SUPPORTED –
CUPTI_ERROR_SLI_DEVICE_NOT_SUPPORTED –
CUPTI_ERROR_WSL_DEVICE_NOT_SUPPORTED –
-
CUptiResult cuptiActivityEnableLatencyTimestamps(uint8_t enable)
控制内核的排队和提交时间戳的收集。
此 API 用于控制内核的排队和提交时间戳的收集,这些内核的记录通过结构 CUpti_ActivityKernel9 提供。默认值为 0,即不收集这些时间戳。此 API 需要在 CUDA 初始化之前调用,并且此设置在分析会话期间不应更改。
如果通过 API cuptiActivityEnableHWTrace 启用了硬件跟踪,则不支持此 API。
- 参数
enable – 一个布尔值,表示是否应收集这些时间戳
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityEnableLaunchAttributes(uint8_t enable)
控制内核的启动属性的收集。
此 API 用于控制内核的启动属性的收集,这些内核的记录通过结构 CUpti_ActivityKernel9 提供。默认值为 0,即不收集这些属性。
- 参数
enable – 一个布尔值,表示是否应收集这些启动属性
-
CUptiResult cuptiActivityEnableRuntimeApi(CUpti_CallbackId cbid, uint8_t enable)
控制特定 CUDA 运行时 API 的活动记录收集。
活动类型 CUPTI_ACTIVITY_KIND_RUNTIME 控制所有 CUDA Runtime API 或都不收集。API cuptiActivityEnableRuntimeApi 可用于细粒度控制,它允许启用/禁用对特定 CUDA Runtime API 集的跟踪。要禁用少量 CUDA Runtime API 的收集,用户可以首先使用活动类型 CUPTI_ACTIVITY_KIND_RUNTIME 启用所有 Runtime API 的收集,然后调用此 API 以禁用特定的 Runtime API。要启用少量 CUDA Runtime API 的收集,用户可以直接调用此 API,而无需使用活动类型 CUPTI_ACTIVITY_KIND_RUNTIME。
注意:如果活动类型 CUPTI_ACTIVITY_KIND_RUNTIME 在此 API 之后调用,它将覆盖此 API 完成的设置。
- 参数
cbid – CUDA Runtime API 的回调 ID。这可以在头文件 cupti_runtime_cbid.h 中找到。
enable – 一个布尔值,表示是启用还是禁用收集
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityFlush(CUcontext context, uint32_t streamId, uint32_t flag)
等待所有活动记录通过完成回调传递。
此函数在所有与指定上下文/流关联的活动记录都使用在 cuptiActivityRegisterCallbacks 中注册的回调返回给 CUPTI 客户端后才返回。为了确保所有活动记录都是完整的,请求的流(如果有)将被同步。
如果
context
为 NULL,则全局活动记录(即那些不与特定流关联的记录)将被刷新(在这种情况下,没有流被同步)。如果context
是有效的 CUcontext 且streamId
为 0,则此上下文中所有流的缓冲区将被刷新。否则,将刷新此上下文中指定流的缓冲区。在调用此函数之前,必须通过调用 cuptiActivityRegisterCallbacks 激活缓冲区处理回调 API。
DEPRECATED 此方法已弃用,CONTEXT 和 STREAMID 将被忽略。使用 cuptiActivityFlushAll 刷新所有数据。
- 参数
context – 有效的 CUcontext 或 NULL。
streamId – 流 ID。
flag – 可以设置标志以指示强制刷新。请参阅 CUpti_ActivityFlag
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_CUPTI_ERROR_INVALID_OPERATION – 如果在成功调用 cuptiActivityRegisterCallbacks 之前未调用
CUPTI_ERROR_UNKNOWN – 发生内部错误
-
CUptiResult cuptiActivityFlushAll(uint32_t flag)
请求通过缓冲区完成回调传递活动记录。
此函数使用在 cuptiActivityRegisterCallbacks 中注册的回调,将与所有上下文/流(以及不与任何流关联的全局缓冲区)关联的活动记录返回给 CUPTI 客户端。
这是一个阻塞调用,但它不会隐式发出任何 CUDA 同步调用,因此不能保证所有活动都在底层设备上完成。如果活动记录已填写所有信息(包括时间戳,如果有),则认为该记录已完成。如果期望交付所有具有完整信息的活动记录,则客户端有责任在此函数调用之前发出必要的 CUDA 同步调用。
函数基于输入标志的行为:(-) ::对于默认刷新,即当标志设置为 0 时,它返回所有已完成所有活动记录的活动缓冲区,但缓冲区不必是满的。它不返回具有一个或多个未完成记录的缓冲区。默认刷新可以在单独的线程中定期完成。 (-) ::对于强制刷新,即当标志 CUPTI_ACTIVITY_FLAG_FLUSH_FORCED 传递给函数时,它返回所有活动缓冲区,包括具有一个或多个未完成活动记录的缓冲区。建议客户端在分析会话终止之前执行强制刷新,以允许交付剩余的缓冲区。通常,可以在退出处理程序中完成。
在调用此函数之前,必须通过调用 cuptiActivityRegisterCallbacks 激活缓冲区处理回调 API。
- 参数
flag – 可以设置标志以指示强制刷新。请参阅 CUpti_ActivityFlag
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_OPERATION – 如果在成功调用 cuptiActivityRegisterCallbacks 之前未调用
CUPTI_ERROR_UNKNOWN – 发生内部错误
-
CUptiResult cuptiActivityFlushPeriod(uint32_t time)
设置工作线程的刷新周期。
CUPTI 创建一个工作线程,以最大限度地减少对应用程序创建线程的干扰。CUPTI 将某些操作从应用程序线程卸载到工作线程,这包括主机和设备之间分析资源的同步,以及使用在 cuptiActivityRegisterCallbacks 中注册的回调向客户端交付活动缓冲区。出于性能原因,CUPTI 基于某些启发式方法唤醒工作线程。
此 API 用于控制工作线程的刷新周期。此设置将覆盖 CUPTI 启发式方法。将时间设置为零将禁用定期刷新并恢复默认行为。
定期刷新只能返回那些已满且所有活动记录都已完成的活动缓冲区。
即使客户端设置了定期刷新,也允许使用 API cuptiActivityFlushAll 按需刷新数据。
- 参数
time – 刷新周期,以毫秒 (ms) 为单位
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivityGetAttribute(CUpti_ActivityAttribute attr, size_t *valueSize, void *value)
读取活动 API 属性。
读取一个活动 API 属性,并在
*value
中返回它。- 参数
attr – 要读取的属性
valueSize – 由 value 指向的缓冲区的大小,并返回写入
value
的字节数value – 返回属性的值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attr
不是活动属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 表示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiActivityGetNextRecord(uint8_t *buffer, size_t validBufferSizeBytes, CUpti_Activity **record)
迭代缓冲区中的活动记录。
这是一个辅助函数,用于迭代缓冲区中的活动记录。活动记录缓冲区通常通过接收 CUpti_BuffersCallbackCompleteFunc 回调获得。当发生错误时,停止迭代缓冲区。
典型用法示例
CUpti_Activity *record = NULL; CUptiResult status = CUPTI_SUCCESS; do { status = cuptiActivityGetNextRecord(buffer, validSize, &record); if(status == CUPTI_SUCCESS) { // Use record here... } else if (status == CUPTI_ERROR_MAX_LIMIT_REACHED) break; else if (status == CUPTI_ERROR_INVALID_KIND) break; else { goto Error; } } while (1);
- 参数
buffer – 包含活动记录的缓冲区
record – 输入由 cuptiActivityGetNextRecord 返回的先前记录,并从缓冲区返回下一个活动记录。如果输入值为 NULL,则返回缓冲区中的第一个活动记录。某些类型的记录(如 CUPTI_ACTIVITY_KIND_CONCURRENT_KERNEL)可能包含无效 (0) 时间戳,表示由于设备内存不足而无法收集计时信息。
validBufferSizeBytes – 缓冲区中有效字节数。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_MAX_LIMIT_REACHED – 如果缓冲区中没有更多记录
CUPTI_ERROR_INVALID_PARAMETER – 如果
buffer
为 NULL。CUPTI_ERROR_INVALID_KIND – 如果活动记录不完整或无效
-
CUptiResult cuptiActivityGetNumDroppedRecords(CUcontext context, uint32_t streamId, size_t *dropped)
获取因缓冲区空间不足而丢弃的活动记录数。
获取由于缓冲区空间不足而丢弃的记录数。丢弃计数包括由于 CUPTI 没有可用于记录的活动缓冲区空间(因为 CUpti_BuffersCallbackRequestFunc 回调未返回足够大小的空缓冲区)而无法记录的记录,以及由于设备大小缓冲区已满(大小由 CUPTI_ACTIVITY_ATTR_DEVICE_BUFFER_SIZE_CDP 属性控制)而无法记录的 CDP 记录。调用此函数时,为队列维护的丢弃计数将重置为零。
- 参数
context – 上下文,或 NULL 以从全局队列获取丢弃计数
streamId – 流 ID
dropped – 自上次调用此函数以来丢弃的记录数。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
dropped
为 NULL
-
CUptiResult cuptiActivityPopExternalCorrelationId(CUpti_ExternalCorrelationKind kind, uint64_t *lastId)
为调用线程弹出外部关联 ID。
此函数通知 CUPTI,调用线程正在离开外部 API 区域。
- 参数
kind – 外部 API 活动应与之关联的类型。
lastId – 如果函数成功返回,则包含此
kind
的最后一个外部关联 ID,可以为 NULL。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 外部 API 类型无效。
CUPTI_ERROR_QUEUE_EMPTY – 当前没有与
kind
关联的外部 ID。
-
CUptiResult cuptiActivityPushExternalCorrelationId(CUpti_ExternalCorrelationKind kind, uint64_t id)
为调用线程推送外部关联 ID。
此函数通知 CUPTI,调用线程正在进入外部 API 区域。当在外部 API 区域内创建 CUPTI 活动 API 记录且启用了 CUPTI_ACTIVITY_KIND_EXTERNAL_CORRELATION 时,活动 API 记录之前将为每个 CUpti_ExternalCorrelationKind 添加一个 CUpti_ActivityExternalCorrelation 记录。
- 参数
kind – 外部 API 活动应与之关联的类型。
id – 外部关联 ID。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 外部 API 类型无效
-
CUptiResult cuptiActivityRegisterCallbacks(CUpti_BuffersCallbackRequestFunc funcBufferRequested, CUpti_BuffersCallbackCompleteFunc funcBufferCompleted)
向 CUPTI 注册回调函数以进行活动缓冲区处理。
此函数注册两个回调函数,用于异步缓冲区处理。如果已注册,则活动记录缓冲区将使用来自 CUPTI 的异步请求/完成回调进行处理。
注册这些回调会阻止客户端使用 CUPTI 的阻塞式入队/出队函数。
- 参数
funcBufferRequested – 当 CUPTI 请求空缓冲区时调用的回调
funcBufferCompleted – 当 CUPTI 提供包含活动记录的缓冲区时调用的回调
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
funcBufferRequested
或funcBufferCompleted
为 NULL
-
CUptiResult cuptiActivityRegisterTimestampCallback(CUpti_TimestampCallbackFunc funcTimestamp)
向 CUPTI 注册回调函数以提供时间戳。
此函数注册一个回调函数,以获取用户选择的时间戳,而不是使用 CUPTI 提供的时间戳。默认情况下,CUPTI 根据底层平台使用不同的方法来检索时间戳:Linux 和 Android 使用 clock_gettime(CLOCK_REALTIME, ..),Windows 使用 QueryPerformanceCounter(),QNX 使用 ClockCycles()。使用这些方法检索的时间戳在必要时会转换为纳秒,然后再使用。
GPU 活动(如内核、内存复制和 memset 操作)的时间戳直接在 GPU 上记录。为了提供与 CPU 时间相关的这些时间戳的统一和规范化视图,CUPTI 在后处理期间执行线性插值,以将 GPU 时间戳转换为 CPU 时间戳。对于在 GPU 上捕获时间戳的活动,时间戳回调在后处理阶段调用,同时将 GPU 时间戳转换为 CPU 时间戳。对于直接在 CPU 上捕获时间戳的活动,时间戳回调在活动发生时立即调用。
应在启用任何 CUPTI 活动类型之前完成时间戳回调的注册,以确保所有记录都使用通过 cuptiActivityRegisterTimestampCallback API 注册的回调函数报告时间戳。
在分析会话期间通过 cuptiActivityRegisterTimestampCallback API 更改 CUPTI 中的时间戳回调函数可能会导致更改之前生成的记录通过以前的时间戳方法报告时间戳。
- 参数
funcTimestamp – 当 CUPTI 需要时间戳时调用的回调
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
funcTimestamp
为 NULLCUPTI_ERROR_NOT_INITIALIZED –
-
CUptiResult cuptiActivitySetAttribute(CUpti_ActivityAttribute attr, size_t *valueSize, void *value)
写入活动 API 属性。
写入活动 API 属性。
- 参数
attr – 要写入的属性
valueSize – 值的字节大小
value – 要写入的属性值
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
valueSize
或value
为 NULL,或者如果attr
不是活动属性CUPTI_ERROR_PARAMETER_SIZE_NOT_SUFFICIENT – 表示
value
缓冲区太小,无法容纳属性值。
-
CUptiResult cuptiComputeCapabilitySupported(int major, int minor, int *support)
检查对计算能力的支持。
此函数用于检查设备基于其计算能力的支持情况。当当前版本的 CUPTI 支持该计算能力时,它会设置
support
,否则会清除它。此版本的 CUPTI 可能不支持共享相同计算能力的所有 GPU。建议使用 API cuptiDeviceSupported,它提供正确的信息。另请参阅
- 参数
major – 计算能力的主修订号
minor – 计算能力的次修订号
support – 指向整数的指针,用于返回支持状态
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
support
为 NULL
-
CUptiResult cuptiDeviceSupported(CUdevice dev, int *support)
检查对计算设备的支持。
此函数用于检查计算设备的支持情况。当当前版本的 CUPTI 支持该设备时,它会设置
support
,否则会清除它。- 参数
dev – CUDA Driver API cuDeviceGet 返回的设备句柄
support – 指向整数的指针,用于返回支持状态
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
support
为 NULLCUPTI_ERROR_INVALID_DEVICE – 如果
dev
不是有效设备
-
CUptiResult cuptiDeviceVirtualizationMode(CUdevice dev, CUpti_DeviceVirtualizationMode *mode)
查询设备的虚拟化模式。
此函数用于查询 CUDA 设备的虚拟化模式。
- 参数
dev – CUDA Driver API cuDeviceGet 返回的设备句柄
mode – 指向 CUpti_DeviceVirtualizationMode 的指针,用于返回虚拟化模式
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_DEVICE – 如果
dev
不是有效设备CUPTI_ERROR_INVALID_PARAMETER – 如果
mode
为 NULL
-
CUptiResult cuptiFinalize(void)
将 CUPTI 从运行的进程中分离。
此 API 将 CUPTI 从运行的进程中分离。它销毁并清理当前进程中与 CUPTI 关联的所有资源。CUPTI 从进程分离后,该进程将继续运行,而不会再附加 CUPTI。为了 API 的安全操作,建议从任何 CUDA 驱动程序或运行时 API 的退出调用点调用此 API。否则,CUPTI 客户端需要确保在调用 API 之前完成所需的 CUDA 同步和 CUPTI 活动缓冲区刷新。示例代码展示了在 cupti 回调处理程序代码中 API 的用法
void CUPTIAPI cuptiCallbackHandler(void *userdata, CUpti_CallbackDomain domain, CUpti_CallbackId cbid, void *cbdata) { const CUpti_CallbackData *cbInfo = (CUpti_CallbackData *)cbdata; // Take this code path when CUPTI detach is requested if (detachCupti) { switch(domain) { case CUPTI_CB_DOMAIN_RUNTIME_API: case CUPTI_CB_DOMAIN_DRIVER_API: if (cbInfo->callbackSite == CUPTI_API_EXIT) { // call the CUPTI detach API cuptiFinalize(); } break; default: break; } } }
-
CUptiResult cuptiGetAutoBoostState(CUcontext context, CUpti_ActivityAutoBoostState *state)
获取自动加速状态。
如果启用了自动加速,则性能分析结果可能不一致。CUPTI 尝试在性能分析时禁用自动加速。但在用户没有权限或设置了 CUDA_AUTO_BOOST 环境变量的情况下,禁用可能会失败。此函数可用于查询是否启用了自动加速。
- 参数
context – 有效的 CUcontext。
state – 指向 CUpti_ActivityAutoBoostState 结构的指针,该结构包含当前状态和请求当前状态的进程 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
CUcontext
或state
为 NULLCUPTI_ERROR_NOT_SUPPORTED – 表示设备不支持自动加速
CUPTI_ERROR_UNKNOWN – 发生内部错误
-
CUptiResult cuptiGetContextId(CUcontext context, uint32_t *contextId)
获取上下文的 ID。
获取上下文的 ID。
- 参数
context – 上下文
contextId – 返回上下文的进程唯一 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_CONTEXT – 上下文为 NULL 或无效。
CUPTI_ERROR_INVALID_PARAMETER – 如果
contextId
为 NULL
-
CUptiResult cuptiGetDeviceId(CUcontext context, uint32_t *deviceId)
获取设备的 ID。
如果
context
为 NULL,则返回包含当前活动上下文的设备的 ID。如果context
为非 NULL,则返回包含该上下文的设备的 ID。其操作方式类似于 cudaGetDevice() 或 cuCtxGetDevice(),但可以从回调函数中调用。- 参数
context – 上下文,或 NULL 表示当前上下文。
deviceId – 返回调用线程的当前设备的 ID。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_DEVICE – 如果无法获取设备 ID
CUPTI_ERROR_INVALID_PARAMETER – 如果
deviceId
为 NULL
-
CUptiResult cuptiGetGraphExecId(CUgraphExec graphExec, uint32_t *pId)
获取可执行图的唯一 ID。
返回可执行 CUDA 图的唯一 ID。
- 参数
graphExec – 可执行图。
pId – 返回可执行图的唯一 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
graph
为 NULL
-
CUptiResult cuptiGetGraphId(CUgraph graph, uint32_t *pId)
获取图的唯一 ID。
返回 CUDA 图的唯一 ID。
- 参数
graph – 图。
pId – 返回图的唯一 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
graph
为 NULL
-
CUptiResult cuptiGetGraphNodeId(CUgraphNode node, uint64_t *nodeId)
获取图节点的唯一 ID。
返回 CUDA 图节点的唯一 ID。
- 参数
node – 图节点。
nodeId – 返回节点的唯一 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_PARAMETER – 如果
node
为 NULL
-
CUptiResult cuptiGetLastError(void)
返回来自 cupti 调用或回调的最后一个错误。
返回在同一主机线程中任何 cupti api 调用或回调产生的最后一个错误,并将其重置为 CUPTI_SUCCESS。
-
CUptiResult cuptiGetStreamId(CUcontext context, CUstream stream, uint32_t *streamId)
获取流的 ID。
获取流的 ID。流 ID 在上下文中是唯一的(即,一个上下文中的所有流都将具有唯一的流 ID)。
已弃用 此方法自 CUDA 8.0 起已弃用。请改用方法 cuptiGetStreamIdEx。
- 参数
context – 如果为非 NULL,则会检查流以确保其属于此上下文。通常,此参数应为 null。
stream – 流
streamId – 返回流的上下文唯一 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_STREAM – 如果无法获取流 ID,或者如果
context
为非 NULL 且stream
不属于该上下文CUPTI_ERROR_INVALID_PARAMETER – 如果
streamId
为 NULL
-
CUptiResult cuptiGetStreamIdEx(CUcontext context, CUstream stream, uint8_t perThreadStream, uint32_t *streamId)
获取流的 ID。
获取流的 ID。流 ID 在上下文中是唯一的(即,一个上下文中的所有流都将具有唯一的流 ID)。
- 参数
context – 如果为非 NULL,则会检查流以确保其属于此上下文。通常,此参数应为 null。
stream – 流
perThreadStream – 标志,指示程序是否为每线程流编译
streamId – 返回流的上下文唯一 ID
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_INITIALIZED –
CUPTI_ERROR_INVALID_STREAM – 如果无法获取流 ID,或者如果
context
为非 NULL 且stream
不属于该上下文CUPTI_ERROR_INVALID_PARAMETER – 如果
streamId
为 NULL
-
CUptiResult cuptiGetThreadIdType(CUpti_ActivityThreadIdType *type)
获取线程 ID 类型。
返回 CUPTI 中使用的线程 ID 类型
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
type
为 NULL
-
CUptiResult cuptiGetTimestamp(uint64_t *timestamp)
获取 CUPTI 时间戳。
返回一个时间戳,该时间戳已标准化,以对应于 CUPTI 活动记录中报告的开始和结束时间戳。时间戳以纳秒为单位报告。
- 参数
timestamp – 返回 CUPTI 时间戳
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_INVALID_PARAMETER – 如果
timestamp
为 NULL
-
CUptiResult cuptiSetThreadIdType(CUpti_ActivityThreadIdType type)
设置线程 ID 类型。
CUPTI 使用与设置类型对应的方法来生成线程 ID。有关方法列表,请参阅枚举 CUpti_ActivityThreadIdType。具有线程 ID 字段的活动记录包含相同的值。在性能分析会话期间不得更改线程 ID 类型,以避免活动记录之间的线程 ID 值不匹配。
- 返回值
CUPTI_SUCCESS –
CUPTI_ERROR_NOT_SUPPORTED – 如果平台不支持
type
5.1.4. 类型定义
-
typedef void (*CUpti_BuffersCallbackCompleteFunc)(CUcontext context, uint32_t streamId, uint8_t *buffer, size_t size, size_t validSize)
CUPTI 用于返回活动记录缓冲区的回调函数类型。
此回调函数向 CUPTI 客户端返回一个包含活动记录的缓冲区。缓冲区包含
validSize
字节的活动记录,应使用 cuptiActivityGetNextRecord 读取。可以使用 cuptiActivityGetNumDroppedRecords 读取丢弃的记录数。在此调用之后,CUPTI 放弃了缓冲区的所有权,并且不再使用它。客户端可以使用 CUpti_BuffersCallbackRequestFunc 回调将缓冲区返回给 CUPTI。注意:从 CUDA 6.0 开始,此回调返回的所有缓冲区都是全局缓冲区,即没有上下文/流特定的缓冲区。用户需要解析全局缓冲区以提取上下文/流特定的活动记录。- 参数 context
此缓冲区关联的上下文。如果为 NULL,则缓冲区与全局活动关联。此字段自 CUDA 6.0 起已弃用,并且将始终为 NULL。
- 参数 streamId
此缓冲区关联的流 ID。此字段自 CUDA 6.0 起已弃用,并且将始终为 NULL。
- 参数 buffer
活动记录缓冲区。
- 参数 size
缓冲区总大小(以字节为单位),如 CUpti_BuffersCallbackRequestFunc 中设置。
- 参数 validSize
缓冲区中有效字节数。
-
typedef void (*CUpti_BuffersCallbackRequestFunc)(uint8_t **buffer, size_t *size, size_t *maxNumRecords)
CUPTI 用于请求空缓冲区以存储活动记录的回调函数类型。
此回调函数向 CUPTI 客户端发出信号,表明 CUPTI 需要活动缓冲区。活动缓冲区由 CUPTI 用于存储活动记录。回调函数可以通过将
*buffer
设置为 NULL 来拒绝请求。在这种情况下,CUPTI 可能会丢弃活动记录。- 参数 buffer
返回新缓冲区。如果设置为 NULL,则不返回缓冲区。
- 参数 size
返回返回缓冲区的大小。
- 参数 maxNumRecords
返回应放置在缓冲区中的最大记录数。如果为 0,则缓冲区将尽可能多地填充记录。如果 > 0,则缓冲区最多填充那么多记录,然后返回。
-
typedef uint64_t (*CUpti_TimestampCallbackFunc)(void)
CUPTI 用于请求在活动记录中使用的时间戳的回调函数类型。
此回调函数向 CUPTI 客户端发出信号,表明需要返回时间戳。此时间戳将被视为标准化时间戳,用于 CUPTI 中的各种目的。例如,存储 CUPTI 活动记录中报告的开始和结束时间戳。返回的时间戳必须以纳秒为单位。