在 CUDA By Example 一书第 26 页上,它写道:
您可以将使用 cudaMalloc() 分配的指针传递给在主机上执行的函数。
您不能使用 cudaMalloc() 分配的指针从在主机上执行的代码中读取或写入内存。
为了演示第一个概念,我在这里编写代码:
main()
{
int * ad, N;
cudaMalloc((void **)&ad, Sizeof(int) *N);
GPUFunction<<<...>>>(ad);
Hostfunction(ad);
}
Hostfunction(int * AD)
{
int c ;
c=AD[N-1];
printf("%d", c);
}
__global__ void GPUFunction(int *AD)
{
AD[threadIdx.x]= threadidx.x;
}
这就是上面第 1 点所解释的吗?如果是这样,则与上面的第 2 点相矛盾,如您所见,主机功能正在读取记忆广告。那么我的理解哪里出了问题?