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



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

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

这可能吗?

是的,这是可能的。

请注意,所有DRAM活动都流经二级缓存,二级缓存无法禁用(原子是一种特殊情况,但此处可能未考虑。)这也包括cudaMemcpy流量。

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

(对于启用了L1的设备,有许多不会流经L1的流量类型,包括cudaMemcpy流量。因此,启用/禁用L1通常不会对我在这里概述的假设情况产生影响。最初的内核读取在L1中都是"未命中",但在L2中是"命中")。

最新更新