【发布时间】:2013-10-04 23:48:50
【问题描述】:
在《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 点相矛盾,如您所见,主机功能正在读取记忆广告。那么我的理解哪里出了问题?
【问题讨论】: