【问题标题】:How to profile the number of global memory transactions without using uncached_global_load_transaction option in cuda?如何在不使用 cuda 中的 uncached_global_load_transaction 选项的情况下分析全局内存事务的数量?
【发布时间】:2012-08-15 08:10:24
【问题描述】:

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

【问题讨论】:

    标签: cuda gpu


    【解决方案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 将列出您已安装设备上的所有可用事件。

    【讨论】:

    • 这只是 SM 到 L1 缓存全局访问的事务计数。如果您需要我进一步扩展其他类型交易的答案,请回复,我会扩展答案。
    • 感谢您的回复,但这不是我需要的。我只对全局内存事务感兴趣,所以不关心 l1 命中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2016-02-21
    • 1970-01-01
    • 2020-08-04
    • 2013-11-09
    相关资源
    最近更新 更多