跨CUDA内核的L1缓存持久性

7

我了解在GPU上共享内存不会持续跨越不同的内核。但是,L1缓存在不同的内核调用之间是否持久存在?


一篇研究论文评估了在L2缓存中使数据持久化的方法:http://dl.acm.org/citation.cfm?id=2159443。该功能目前不存在于现有的GPU中。 - Heatsink
1个回答

11

SM L1缓存在同一流或空流之间的所有操作之间被清除,以保证一致性。但这并不重要,因为GPU上的L1缓存并不是真正设计用来提高给定执行线程中的时间局部性。在大规模并行处理器上,关键是并行空间局部性。这意味着您希望执行附近的线程可以访问彼此附近的数据。

当执行缓存内存加载时,它是针对单个warp完成的,并且缓存存储由该warp中的线程访问的缓存行(最好仅一个)。如果下一个warp访问相同的缓存行,则缓存会命中并降低延迟。否则,缓存将用不同的缓存行进行更新。如果内存访问非常分散,则后续warp可能会在重新使用之前将缓存行从先前的warp中删除。

到另一个内核运行时,缓存中的数据很可能无效,因为该SM很可能已经运行了许多warp来运行前一个内核,因此,它的持久性并不重要。


谢谢您的回复。有没有办法确保缓存在不同的内核调用之间被失效?我正在寻找空间和时间局部性 :) - gmemon
1
SM L1缓存在同一流或空流上的所有操作之间被使无效,以确保一致性。 - Greg Smith
用Greg上面的陈述替换了我的“我认为”。 - harrism
图形管线似乎从中受益匪浅。链接 - Gunay Orbay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接