1

我有一个映射表,我知道可以通过执行以下操作将其复制到 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 的数量。谁能建议我如何做到这一点并有效地做到这一点?

4

1 回答 1

1

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

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

不过,如果您想检查性能,只需像往常一样设置多个副本,然后为内核计时。

于 2012-08-27T00:13:49.330 回答