私が持っている:首尾よく固定とcudaHostAlloc(..., cudaHostAllocMapped)
またはcudaHostRegister(..., cudaHostRegisterMapped)
を使用してマッピングされていより良いまたは同じ:CPU memcpy()対CUDAの固定されたマップされたメモリのデバイスcudaMemcpy()
- ホストメモリと、
cudaHostGetDevicePointer(...)
を使用してデバイスポインタを取得しました。
上記の手法で得られた固定された+マップされたメモリの2つの異なる領域を指すsrcおよびdestデバイスポインタでcudaMemcpy(..., cudaMemcpyDeviceToDevice)
を開始します。 すべて正常に動作します。
質問:私はこれをやり続けますか、従来のCPUスタイルのmemcpy()
を使用してください。なぜなら、とにかくすべてがシステムメモリに入っているからですか? ...または同じですか(つまり、cudaMemcpy
はsrcとdestの両方が固定されている場合はmemcpy
にストレートにマッピングされますか)。
あなたはUVAとプラットフォーム上で作業している場合、統一(
それは興味深い質問ですね。最適化されたmemcpyを使用すれば、おそらくCPUはおそらくより良いでしょう。メモリは結局それに属し、ディスクリートGPUのhost-> host memcpyはPCIe帯域幅に制限されています。しかし、GPUがそれ以外の場合はアイドル状態になるのはなぜですか? – ArchaeaSoftware
私はGPUがコピーをやっていないことを願っています。私は、ランタイムが、ポインタが両方ともホストポインタであり、ホストmemcpyを呼び出すことを確認したいと思います。私は実際に何が起こるかを知るように頼んだ。 – harrism