了解CUDA探查器中的计数器

时间:2012-09-29 16:50:23

标签: cuda

我在理解CUDA分析器中的sm_cta计数器方面遇到了困难。我正在启动128个块,我的启动绑定配置为__launch_bounds(192,8),但是探查器显示133特定运行。我分析了几次应用程序,但每次都是133左右。这个计数器表示什么?使用Tesla C2075,Linux 32位。

2 个答案:

答案 0 :(得分:4)

NVIDIA GPU在芯片的多个位置都有性能监视器单元。在费米设备上,sm_cta_launched信号由GPC监视器而不是SM监视器收集。费米GPC性能监视器仅限于观察每个GPC 1个SM。 C2075有4个GPC和14个SM。 C2075可配置2个带有4个SM的GPC和2个带有3个SM的GPC。 CUDA分析器将收集每个GPC 1个SM的计数器,并将结果乘以GPC中的SM数。最终值可以高于或低于预期值。例如:

GPC     SMs     Counter Value
0       4       8       32
1       4       8       32
2       3       11      33
3       3       12      36
---------------------------
                       133

在文件Compute Command Line Profiler中,此信息在countermodeaggregate选项下指定。

  

countermodeaggregate

     

如果选择此选项,则聚合计数器值将为   输出。对于SM计数器,计数器值是计数器的总和   来自所有SM的价值观。对于l1 *,tex *,sm_cta_launched,   uncached_global_load_transaction和global_store_transaction计数器   从每个GPC收集1个SM的计数器值,它是   推断所有SM。仅CUDA支持此选项   计算能力为2.0或更高的设备。

使用warps_launched可以获得更准确的值,warps_launched是根据SM使用以下公式收集的:

thread_blocks_launched = warps_launched
    / ((threadblocksizeX * threadblocksizeY * threadblocksizeZ) + WARP_SIZE - 1)
    / WARP_SIZE

    where WARP_SIZE is 32 on all current devices.

注意:这种方法对于动态并行是不正确的。

答案 1 :(得分:0)

一些CUDA库函数也是在内部使用内核实现的,因此执行的块总数略高于您自己明确发布的块数并不奇怪。