我有一个映射表,我知道我可以通过执行以下操作复制到CUDA常量内存:
#define LENGTH 4
#define THREAD_BLOCKS 64
const int mapTable[LENGTH] = {0, 1, 3, 5};
int main()
{
//..
__constant__ int dMapTable[LENGTH];
cudaMemcpyToSymbol( dMapTable , mapTable, size_t(LENGTH) * sizeof(int) , 0, cudaMemcpyHostToDevice );
//..
}
现在我要做的是在CUDA常量内存中创建此表的多个副本。我想要创建的副本数等于线程块数THREAD_BLOCKS。任何人都可以告诉我如何做到这一点,并有效地做到这一点?
答案 0 :(得分:1)
如果通过设置常量数据的多个副本看到内核性能有任何改进,我会非常惊讶。常量内存被缓存,因此您只需使用重复值来缓存缓存。
此外,值得注意的是,在计算能力3.0的所有设备上,恒定内存大小仅为64KiB。
但是,如果你想检查性能,只需像往常一样设置多个副本,然后计算内核时间。