我自己无法弄清楚,确保内核中使用的内存保持不变的最佳方法是什么。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);
这两种方式是等价的还是第一种不保证使用常量内存而不是全局内存?大小动态变化,所以第二种方式在我的情况下并不方便。