如何在不使用cuda中的uncached_global_load_transaction选项的情况下分析全局内存事务的数量?

时间:2012-08-12 22:04:41

标签: cuda gpu

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

1 个答案:

答案 0 :(得分: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 User's Guide部分事件参考 - 计算能力2.x.这些字符串名称应与使用CUDA Profiler,Visual Profiler,nvprof(5.0)和CUPTI API的最新驱动程序一起使用。

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