【问题标题】:GPU L2 cache hit is 100% and DRAM load transactions sometimes is 0GPU L2 缓存命中率为 100%,DRAM 加载事务有时为 0
【发布时间】:2015-11-30 18:53:55
【问题描述】:

我正在试验一个简单的矩阵乘法 CUDA 程序。我发现如果矩阵大小很小(512*512 或更小),L2 缓存命中率总是 100%。分析的 DRAM 读取事务并不稳定,有时值甚至为 0。这可能吗?因为 L2 缓存中应该总是有一些冷缺失,然后 L2 从 DRAM 中获取这些数据。因此 DRAM 读取事务永远不应为 0,并且 L2 命中率应小于 100%。

仅供参考:我在使用 Kepler 40 架构的 Quadro K6000 GPU 上测试了该程序。无论 L1 缓存打开还是关闭,度量值都是相同的。我使用的指标包括 l2_l1_read_hit_rate 和 dram_read_transactions。

【问题讨论】:

    标签: caching cuda gpu


    【解决方案1】:

    这可能吗?

    是的,这是可能的。

    请注意,所有 DRAM 活动都流经 L2 缓存,不能禁用(原子是一种特殊情况,但这里可能不考虑。)这也包括 cudaMemcpy 流量。

    因此,如果我将一个完全适合 L2 缓存的“小”数据集从主机传输到设备,然后启动读取该数据集的内核,它可能已经驻留在 L2 中,并且读取的事务将在 L2 中“命中”并且可能不会产生任何实际的 DRAM 活动。

    (对于启用 L1 的设备,有许多流量类型流经 L1,包括 cudaMemcpy 流量。因此启用/禁用 L1 通常对我在这里概述的假设情况。初始内核读取将在 L1 中全部“错过”,但在 L2 中“命中”。

    【讨论】:

    • 你的意思是在cudaMemcpy之后,甚至在内核启动之前,数据就可以自动从DRAM缓存到L2?
    • 是的。那是对的。将数据从主机复制到 GPU DRAM 的过程流经 L2 缓存,因此在复制到 DRAM 时会缓存在 L2 中。
    猜你喜欢
    • 2018-11-02
    • 2015-06-09
    • 1970-01-01
    • 2019-02-14
    • 2018-07-03
    • 2015-05-04
    • 2011-07-27
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多