cudaMemcpy を利用する場合、cudaMemcpy 関数の外部でデバイス ポインターにアクセスしようとすると、セグメンテーション フォールトが発生する可能性があります。これは、デバイス ポインターが参照によって渡される場合でも、ホスト コードでの逆参照が禁止されているためです。
この問題を解決するには、次の手順に従う必要があります:
# Allocate device memory for host pointer cudaMalloc((void**)&A, sizeof(float)); # Copy host pointer value to device pointer cudaMemcpy(&A, &(Grid_dev->cdata[i]), sizeof(float *), cudaMemcpyDeviceToHost); # Update host pointer to point to device array CurrentGrid->cdata[i] = new float[size]; # Copy device array to host cudaMemcpy(CurrentGrid->cdata[i], A, size*sizeof(float), cudaMemcpyDeviceToHost);
以上がcudaMemcpy がセグメンテーション違反を引き起こす理由と、デバイス ポインタ逆参照エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。