我需要大量的常量数据,超过 6-8 KB,最大到 16 KB。同时我不使用共享内存。现在我想将这个常量数据存储在共享内存中。这是个好主意吗?任何性能近似值?广播是否适用于共享内存以及常量?
性能对应用程序至关重要。而且我认为,我的 Tesla C2075 (CUDA 2.0) 上只有 8 KB 的常量内存缓存
我需要大量的常量数据,超过 6-8 KB,最大到 16 KB。同时我不使用共享内存。现在我想将这个常量数据存储在共享内存中。这是个好主意吗?任何性能近似值?广播是否适用于共享内存以及常量?
性能对应用程序至关重要。而且我认为,我的 Tesla C2075 (CUDA 2.0) 上只有 8 KB 的常量内存缓存
在计算能力 2.0 中,L1 和共享内存使用相同的内存。L1 和共享内存之间的分区可以通过cudaFuncSetCacheConfig()
调用来控制。我建议将 L1 设置为最大可能(48K)
cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1);
然后,从全局内存中提取常量数据,让 L1 处理缓存。如果您有多个 const 数组,您可以通过使用const
内核参数列表中的限定符来指示编译器为其中一些使用常量缓存。这样,您可以利用 L1 和常量缓存来缓存您的常量。
广播适用于 L1 和常量缓存访问。