本の 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 と矛盾します。ホスト関数がメモリ ad を読み取っていることがわかります。では、私の理解はどこで間違っているのでしょうか。