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