2012-10-28 39 views
7

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

要清楚,我的意思,“是从FERMI L1高速缓存硬件独立的硬件纹理缓存” - 换句话说,我可以巧妙地得到一个总的L1 +纹理缓存容量为我的代码?

回答

11

它是分开的。纹理加载不通过L1。对于非纹理应用程序(即不使用插值和钳位等功能),纹理的主要好处是它允许您有选择地添加大量全局内存,这些内存可能会被缓存(假设为位置和重用)而不会中断L1中发生了什么。对于小数据集,贴图不会比L1提供更好的性能。对于大型数据集来说,有一些局部性和重用性,但是由纹理缓存覆盖的区域的负载可能会导致L1(根据缓存配置,其可能小到每个SM上的16KB),但是,纹理缓存可以为整体应用程序提供好处。用户体验到使用纹理的速度并不像通过L1缓存的速度那么快,但比未缓存的负载或散乱的L1负载快很多。很多将取决于所涉及的数据的访问模式和大小。纹理缓存的大小大约为每个SM 8KB。你可以缓存一个更大的区域,但高度的重用和局部性肯定会提高纹理缓存的性能。另请注意,纹理内存是只读的。您可能对webinar感兴趣。

+0

正是我寻找的答案,谢谢。 –