CUDA:FERMI上的纹理缓存是否与L1缓存分开?

Jer*_*erz 7 textures caching cuda

重写代码是否有意义,以便通过纹理缓存加载数据(假设我不需要过滤和其他纹理单元选项)或它是否相同?如何通过L1缓存和一些槽式纹理单元加载一些数据?我有一个代码,我可以使用这样的策略,但它有意义吗?

为了说清楚,我的意思是"FERMI上的纹理缓存是一个与L1缓存硬件不同的硬件" - 换句话说,我可以巧妙地为我的代码获得总共L1 +纹理缓存量吗?

Rob*_*lla 11

它是分开的.纹理加载不通过L1.对于非纹理应用程序(即,您没有使用插值和钳位等功能),纹理的主要好处是它允许您有选择地添加大量可以缓存的全局内存(假设位置和重用)而不会中断L1中发生了什么.对于小型数据集,纹理化不会提供比L1更好的性能.对于存在一些局部性和重用的大型数据集,但是纹理高速缓存覆盖的区域的负载可能会破坏L1(根据高速缓存配置,可能在Fermi上每SM小到16KB),纹理缓存可以为整个应用程序提供一个好处.用户体验使用纹理并不罕见 事情可以像在L1中缓存一样快,但比未缓存的负载快得多,或者分散的负载会使L1瘫痪.很大程度上取决于所涉及的数据的访问模式和大小.纹理缓存的大小大约为每个SM 8KB.您可以缓存更大的区域,但高水平的重用和位置肯定会提高纹理缓存的性能.另请注意,纹理内存是只读的.你可能对此感兴趣 另请注意,纹理内存是只读的.你可能对此感兴趣 另请注意,纹理内存是只读的.你可能对此感兴趣网络研讨会.