GPU L2缓存命中率为100%,DRAM加载事务有时为0

时间:2015-11-30 18:53:56

标签: caching cuda gpu

我正在尝试一个简单的矩阵乘法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。

1 个答案:

答案 0 :(得分:3)

  

这可能吗?

是的,这是可能的。

请注意,所有 DRAM活动都是通过L2缓存流动的,无法禁用(原子是一种特殊情况,但可能不在此处查看。)这包括cudaMemcpy流量

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

(对于启用了L1的设备,有流过L1的流量类型,包括cudaMemcpy流量。因此启用/禁用L1通常应该没有对我在此概述的假设案例的影响。初始内核读取将全部在L1中错过"但在"在"在L2中。)