CUDA。共享内存与常量

时间:2012-12-04 16:23:51

标签: cuda

我需要大量的常量数据,超过6-8 KB,最高16 KB。与此同时,我不使用共享内存。现在我想将这些常量数据存储在共享内存中。这是个好主意吗?任何性能近似值?广播是否适用于共享内存以及常量?

性能对应用程序至关重要。我想,我的Tesla C2075(CUDA 2.0)上只有8 KB常量内存缓存

1 个答案:

答案 0 :(得分:3)

在计算能力2.0中,相同的内存用于L1和共享内存。可以使用cudaFuncSetCacheConfig()调用来控制L1和共享内存之间的分区。我建议使用

将L1设置为最大可能值(48K)
cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1);

然后,从全局内存中提取常量数据,让L1处理缓存。如果您有多个const数组,则可以使用内核参数列表中的const限定符指示编译器为其中一些使用常量缓存。这样,您可以利用L1和常量缓存来缓存常量。

广播适用于L1和常量缓存访问。