用户
 找回密码
 立即注册
quanzhang100 该用户已被删除
发表于 2013-10-25 23:12:38
56442
请问一下profiler 4.0 user's guide 中 L1 cache read throughput 的计算公式不太理解
描述:This gives the throughput achieved while accessing data from L1 cache. This is calculated as:
[(l1 global load hit + l1 local load hit) * 128 * #SM + l2 read requests * 32] / (gpu time * 1000)
(1)这里为什么有l1 global load hit 与  l1 local load hit呢?
(2)这里为什么要加上 l2 read requests * 32  我理解的是如果L1 cache没有命中,就会请求L2 chche 把数据从L2 cache中加载到L1 cache中,core 再从L1 cache中读取?


使用道具 举报 回复
发表于 2013-10-25 23:50:54
楼主您好,

您可以使用这个简化的模型:

在Fermi上,在正常的读取过程中,L1 data cache将为local memory和global memory服务。
一次L1 data cache hit后,交给寄存器的数据,将是128字节。
而如果发生一次L1 miss, 数据将分成连续4次从L2 unifed cache传输到L1 cache(因为fermi上L2到1个SM只有32B/cycle的带宽)。

而上文的式子中的L2 Read request可能是L2服务L1 data cache的传输请求次数,这样正好前者 * 128 + 后者 * 32是总请求的数据量(一次前者miss等于4次后者)。

以及,这个是profiler给出的式子,但很遗憾,很多式子所依赖的基础数据并没有给出具体解释。所以这也是我的猜测。(例如L2 unifed cache还为texture cache服务,这里的L2_read_request自然应该不算给Texture cache的,给它的应该叫另外一个名字)。

大致如此吧,建议不看具体公式而直接相信并使用数值,因为一些式子无法解释(无资料)。

以及,从CUDA 5.5开始,profiler的手册里去掉了具体的公式。这强迫我们简单的相信它报告的结果。

感谢深夜来访。
使用道具 举报 回复 支持 反对
发表于 2013-10-26 11:55:53
玫瑰幻想 发表于 2013-10-25 23:50
楼主您好,

您可以使用这个简化的模型:

好的,谢谢版主深夜解答。
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册