我自己想不出来,如何最好地确保我的内核中使用的内存是恒定的。在http://stackoverflow...r-pleasant-way上有一个类似的问题。
我正在使用GTX580,并且仅编译2.0能力。我的内核看起来像:
__global__ Foo(const int *src, float *result) {...}
我在主机上执行以下代码:
cudaMalloc(src, size);
cudaMemcpy(src, hostSrc, size, cudaMemcpyHostToDevice);
Foo<<<...>>>(src, result);
另一种方法是添加。
__constant__ src[size];
将代码转换为 .cu 文件,从内核中删除 src 指针并执行。
cudaMemcpyToSymbol("src", hostSrc, size, 0, cudaMemcpyHostToDevice);
Foo<<<...>>>(result);
这两种方法等效吗?第一种方法是否不能保证使用常量内存而不是全局内存?由于size是动态变化的,所以第二种方法在我的情况下不方便。