1

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

4

2 回答 2

4

NVIDIA GPU 在芯片的多个位置具有性能监控单元。在 Fermi 设备上,sm_cta_launched 信号由 GPC 监视器而不是 SM 监视器收集。Fermi GPC 性能监视器仅限于观察每个 GPC 1 个 SM。C2075 有 4 个 GPC 和 14 个 SM。C2075 可以配置 2 个 GPC 和 4 个 SM 和 2 个 GPC 和 3 个 SM。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 选项下指定。

反模式聚合

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

使用 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.

注意:这种方法不适用于动态并行。

于 2012-10-01T16:30:56.407 回答
0

一些 CUDA 库函数也在内部使用内核实现,因此执行的块总数略高于您自己显式启动的块数也就不足为奇了。

于 2012-09-30T10:36:49.023 回答