2

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

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

4

1 回答 1

3

在计算能力 2.0 中,L1 和共享内存使用相同的内存。L1 和共享内存之间的分区可以通过cudaFuncSetCacheConfig()调用来控制。我建议将 L1 设置为最大可能(48K)

cudaFuncSetCacheConfig(MyKernel, cudaFuncCachePreferL1);

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

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

于 2012-12-04T16:50:35.173 回答