我有一个非常基本的问题,在浏览文件后我无法理解。我在执行我的一个项目时遇到了这个问题,因为我得到的输出完全损坏了,我相信问题要么出在内存分配上,要么出在线程同步上。好的,问题是:每个线程都可以创建传递给内核函数的所有变量和指针的单独副本吗?或者它只是创建变量的副本,但我们传递该内存的指针在所有线程之间共享。例如
int main()
{
const int DC4_SIZE = 3;
const int DC4_BYTES = DC4_SIZE * sizeof(float);
float * dDC4_in;
float * dDC4_out;
float hDC4_out[DC4_SIZE];
float hDC4_out[DC4_SIZE];
gpuErrchk(cudaMalloc((void**) &dDC4_in, DC4_BYTES));
gpuErrchk(cudaMalloc((void**) &dDC4_out, DC4_BYTES));
// dc4 initialization function on host which allocates some values to DC4[] array
gpuErrchk(cudaMemcpy(dDC4_in, hDC4_in, DC4_BYTES, cudaMemcpyHostToDevice));
mykernel<<<10,128>>>(VolDepth,dDC4_in);
cudaMemcpy(hDC4_out, dDC4_out, DC4_BYTES, cudaMemcpyDeviceToHost);
}
__global__ void mykernel(float VolDepth,float * dDC4_in,float * dDC4_out)
{
for(int index =0 to end)
dDC4_out[index]=dDC4_in[index] * VolDepth;
}
所以我将 dDC4_in 和 dDC4_out 指针传递给 GPU,其中 dDC4_in 用一些值初始化并计算 dDC4_out 并复制回主机,所以我的所有 1280 个线程都将具有单独的 dDC4_in/out 副本,或者它们都将在 GPU 上的相同副本上工作覆盖其他线程的值?