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

Caching GPU二级缓存命中率为100%,DRAM加载事务有时为0,caching,cuda,gpu,Caching,Cuda,Gpu,我正在试验一个简单的矩阵乘法CUDA程序。我发现如果矩阵大小很小(512*512或更小),二级缓存命中率总是100%。分析的DRAM读取事务不稳定,有时甚至为0。这可能吗?因为二级缓存中应该总是有一些冷未命中,然后二级缓存从DRAM获取这些数据。因此,DRAM读取事务不应为0,二级命中率应小于100% 仅供参考:我在使用开普勒40体系结构的Quadro K6000 GPU上测试了该程序。无论一级缓存处于打开或关闭状态,度量值都是相同的。我使用的指标包括l2_l1_读取_命中率和dram_读取_事

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

仅供参考:我在使用开普勒40体系结构的Quadro K6000 GPU上测试了该程序。无论一级缓存处于打开或关闭状态,度量值都是相同的。我使用的指标包括l2_l1_读取_命中率和dram_读取_事务

这可能吗

是的,有可能

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

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


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

您的意思是,在cudaMemcpy之后,即使在内核启动之前,数据也可以自动从DRAM缓存到L2?是的。这是正确的。将数据从主机复制到GPU DRAM的过程流经二级缓存,因此在将数据复制到DRAM时,数据会缓存在二级缓存中。