CUDA Cプログラミングガイドには、2.0を超える計算能力では、ホストとデバイスが64ビットLinuxのメモリスペースを共有すると記載されています。標準のランタイムAPI「cudaMalloc」を介してグローバルメモリを割り当てていますが、ホストが直接アクセスできないようです。ホストがアクセスできるようにするために何か特別なことをする必要がありますか?
1022 次
1 に答える
2
静的または動的に割り当てられたデバイスメモリは、ホストから直接アクセスできません(たとえば、ポインタを逆参照することによって)。cudaMemsetやcudaMemcpyなどのcudaランタイムAPI呼び出しを介してアクセスする必要があります。それらが同じアドレス空間(UVA)を共有しているという事実は、それらが同じ方法でアクセスできることを意味するわけではありません。これは、論理アドレス空間の0x00F0000などの特定の場所に割り当てられたデバイスポインターがある場合、同じ場所でホストポインターを見つけることを期待すべきではないことを意味します。したがって、適切な記録管理があれば、ポインターの数値を調べて、それがホストポインターかデバイスポインターかをすぐに判断できます。
プログラミングガイドでは、次のように述べています。
したがって、プログラムは、CUDAランタイム(プログラミングインターフェイスで説明)の呼び出しを通じて、カーネルに表示されるグローバル、定数、およびテクスチャのメモリスペースを管理します。これには、デバイスメモリの割り当てと割り当て解除、およびホストとデバイスメモリ間のデータ転送が含まれます。
于 2013-03-09T06:00:08.420 に答える