CUDA在常量内存中复制数组

时间:2012-08-26 20:07:25

标签: memory cuda constants

我有一个映射表,我知道我可以通过执行以下操作复制到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。任何人都可以告诉我如何做到这一点,并有效地做到这一点?

1 个答案:

答案 0 :(得分:1)

如果通过设置常量数据的多个副本看到内核性能有任何改进,我会非常惊讶。常量内存被缓存,因此您只需使用重复值来缓存缓存。

此外,值得注意的是,在计算能力3.0的所有设备上,恒定内存大小仅为64KiB。

但是,如果你想检查性能,只需像往常一样设置多个副本,然后计算内核时间。