0

我想分析 GTX480 上全局内存事务的数量。但是, uncached_global_load_transaction 选项无济于事,因为该字段的输出始终为 0。还有其他方法吗?例如,我可以启用其他计数器并根据它们计算交易数量吗?

4

1 回答 1

1

全局内存是一个虚拟地址空间。数据可以驻留在设备内存或固定系统内存中。对于 Compute Capability 2.x 设备,您可以按如下方式计算层次结构:

SM 到 L1C 全局负载事务

  • 缓存事务为 128B
  • sm2l1c_global_load_transactions = l1_global_load_hit + l1_global_load_miss

SM 到 L2C 全局负载事务

  • SM 未缓存的全局事务或 L1 缓存未命中到 L2 在 32B 事务中。
  • sm2l2c_global_load_transactions = (l1_global_load_miss * 4) + uncached_global_load_transaction

CUDA Profiler 不公开 global_atomic、global_atomic_cas 和 global_red 操作的计数器。

CUDA Profiler 不公开计数器来显示从 L2 到系统内存或基于全局与本地的设备内存的数据。您可以使用以下计数器获取 L2 的带宽和系统内存(通过 PCIe)或设备内存(DRAM)的带宽:

L2 交易

  • L2 查询为 32B
  • 根据 CUDA 分析器的版本,这包括从以下一个或多个源读取到 L2:SM L1(本地、全局、原子、表面)、TEX 缓存、常量缓存、指令缓存、MMU、复制引擎、.. .
  • l2_read_transactions = sum(l2_subp{0,1}_read_sector_queries)

设备内存(FB、DRAM)

  • DRAM 的读取带宽来自 L2 未命中和 ECC(如果启用)
  • FB查询为32B
  • fb_read_transactions = sum(fb_supb{0,1}_read_sectors)

全局存储、本地加载/存储和 L2 到系统内存的计算遵循类似的模式。

有关详细信息,请参阅CUPTI 用户指南部分事件参考 - 计算能力 2.x。这些字符串名称应该适用于使用 CUDA Profiler、Visual Profiler、nvprof (5.0) 和 CUPTI API 的最新驱动程序。

如果您使用的是 CUDA 5.0,nvprof 命令nvprof --query-events将列出已安装设备上的所有可用事件。

于 2012-08-14T02:40:59.160 回答