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