You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CUPTI PC采样输出术语含义及采样数不符的技术咨询

CUPTI PC采样相关问题解答

1. 为何NUM_PC_COLLECT=100但总采样数是387?

NUM_PC_COLLECT并非限制总采样数量的参数,它是定义回调函数中用于存储PC样本的数组大小。CUPTI的PC采样器会在内核运行期间持续按设定频率采样,当缓冲区(数组)存满100个样本时,就会触发回调函数读取这些样本,随后继续采样。总采样数是内核运行全程所有回调批次的样本总和,由采样频率、内核运行时长、硬件负载等因素决定,和这个缓冲区大小无关。

2. 输出术语含义解释

  • pcOffset: 程序计数器偏移量,是当前采样点的指令地址相对于用户内核入口地址的偏移值(十六进制),用来定位到内核代码中的具体指令位置。比如0x90代表距离内核起始位置144字节的指令。
  • range id: CUPTI中用于标记性能分析范围的唯一ID,每个被追踪的内核或代码段会被分配一个独立ID,这里的2表示当前分析的是第2个性能追踪范围。
  • total samples: 采样器全程捕获的PC样本总数,包含用户自定义内核和系统内核(CUDA Runtime内部的内核)的样本。
  • dropped samples: 因缓冲区溢出、硬件资源限制等原因丢失的样本数量,0表示所有采样数据都被成功捕获,无丢失。
  • non user kernels total samples: 属于CUDA系统内核(非用户编写的内核)的样本数量,这里383说明绝大多数采样来自系统内核,用户内核的样本仅为387-383=4个。

3. 如何利用stallReasons定位内核问题

stallReasons是CUPTI捕获的内核执行停顿原因,可通过以下步骤定位问题:

  • 启用stall reasons采样: 在PC采样的配置中,添加对stall reasons事件的追踪,确保采样数据同时包含PC偏移和对应的停顿原因。
  • 关联PC偏移与停顿原因: 分析采样数据,统计不同PC偏移位置出现的stall reasons类型及频次,找到高频停顿的指令位置。
  • 针对停顿原因优化:
    • 若频繁出现stall_memory_dependency:说明指令在等待内存数据返回,需优化内存访问模式(如合并全局内存访问、使用共享内存缓存数据)。
    • 若频繁出现stall_launch_busy:说明SM流多处理器资源被占满,可调整内核的线程块大小、减少并发运行的内核数量。
    • 若频繁出现stall_inst_fetch:说明指令缓存命中率低,可优化内核代码的指令布局(如减少分支、合并相似指令)。
  • 定位到源代码: 使用nvcc编译时保留符号信息,通过cuobjdump工具反汇编内核,将PC偏移映射到具体的源代码行,针对性修改优化。

内容的提问来源于stack exchange,提问作者BoringSession

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:51:42