好吧,我的问题可能是一般性的,因为我现在没有具体的问题。
然而,根据我过去的经验,我从未见过CUDA的只读数据缓存优于其他类型的内存访问,例如全局内存或常量内存,在最好的情况下,只读数据缓存将与直接非合并全局一样快内存访问,这让我觉得我可能做错了什么。
所以我的问题是在什么情况下只读数据缓存会比其他类型的内存访问更快?
NVIDIA已经推出了一段时间的maxwell GPU,但在阅读"Maxwell Tuning Guide"时,我对L1缓存的功能感到困惑.在开普勒时代,全局内存访问仅缓存在L2中,而L1用于缓存本地内存访问,这是由寄存器溢出引起的.从阅读NVIDIA的文档来看,这个本地内存缓存是我所知道的唯一可以从L1缓存中受益的东西.但是,在"Maxwell Tuning Guide"的1.4.2.1节中,NVIDIA说:
与Kepler一样,第一代Maxwell中的全局负载仅缓存在L2中...本地负载也仅缓存在L2中
CUDA 6.0添加了两个新设备属性globalL1CacheSupported和localL1CacheSupported来检查设备是否支持全局内存L1缓存和本地内存L1缓存,所以我在GTX 780和GTX 980卡上对这两个属性进行了测试,结果让我连更困惑:
globalL1CacheSupported localL1CacheSupported
GTX780 1 1
GTX980 0 0
Run Code Online (Sandbox Code Playgroud)
GTX 980的结果验证了"Maxwell Tuning Guide"中的声明,这让我很困惑,因为如果是这样的话,那么L1缓存用于什么?另一件我无法理解的是GTX 780是GK110卡,来自GK110白皮书,Keper也只在L2中缓存其全局内存访问,因此对于我来说,globalL1CacheSupported为GTX 780卡返回1是没有意义的.希望有人能澄清我的谜题.