私はcudaMemcpy(...)を呼び出してGPU上のメモリを取得しても、配列内の値もコピーされているかどうかを知りたいと思います。私はもっとうまく説明します:ある配列から別の配列に値をコピーしてから、私はcudaMallocとcudaMemcpyを呼び出します。だから、cudaMemcpyの後の配列の値
// Copying values of the arrays
for(int i = 0; i<16; i++){
array_device_1[i] = array_host_1[i];
array_device_2[i] = array_host_2[i];
}
// Memory allocation of array_device_1 and array_device_2
cudaMalloc((void**) &array_device_1, SIZE_INT*size);
cudaMalloc((void**) &array_device_2, SIZE_INT*size);
// Transfer array_device_1 and array_device_2
cudaMemcpy(array_device_1, array_host_1, SIZE_INT*size, cudaMemcpyHostToDevice);
cudaMemcpy(array_device_2, array_host_2, SIZE_INT*size, cudaMemcpyHostToDevice);
kernel<<<N, N>>>(array_device_1, array_device_2);
cudaMemcpy(array_host_1, array_device_1, SIZE_INT*size, cudaMemcpyDeviceToHost);
cudaMemcpy(array_host_2, array_device_2, SIZE_INT*size, cudaMemcpyDeviceToHost);
cudaFree(array_device_1);
cudaFree(array_device_2);
、私はこれらすべての命令を実行していると私はカーネル内部のすべてのアレイを使用していたときに、値array_device_1とarray_device_2内部のかそうでありませんか?私はカーネルの後に印刷しようとしましたが、私はすべての配列が空であることに気付きました!本当に私はどのように私はそれらの内部の値を保持することができますし、カーネル関数でそれらの値を変更することを理解できません。
あなたの '//がarrays'一部の値をコピーすると、いずれかを行うことはありませんセンス。このように、ホストからデバイスメモリにデータをコピーすることはできません。それは 'cudaMemcpy'がそこにあるのです! – leftaroundabout