我想介绍一下GTX480上全局内存事务的数量。但是,uncached_global_load_transaction选项没有帮助,因为该字段的输出始终为0.还有其他方法吗?例如,我可以启用其他计数器并根据它们计算交易数量吗?
答案 0 :(得分:1)
全局内存是一个虚拟地址空间。数据可以驻留在设备存储器或固定系统存储器中。对于Compute Capability 2.x设备,您可以按如下方式计算层次结构:
SM到L1C全球负荷交易
sm2l1c_global_load_transactions = l1_global_load_hit + l1_global_load_miss
SM到L2C全球负荷交易
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_read_transactions = sum(l2_subp{0,1}_read_sector_queries)
设备存储器(FB,DRAM)
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
将列出已安装设备上可用的所有事件。