異なるサイズのデータに対してホストから帯域幅テストを実行していますが、ホストメモリがページング可能に固定されているときに帯域幅が増加しています。以下は私のMB/s単位の帯域幅とバイト単位のデータ転送サイズのプロットです。 1つは、小さな量のデータ(< 300K)のページング可能な運賃が固定された運賃よりも優れていることに気付くでしょう... O/Sによるメモリ割り当てに関連していますか? このバンド幅テストプログラムは、NVidiaのコードサンプルsdk(私の側からわずかな変更が加えられています)からのもので、CUDA 4.0を使用してTesla C2050に対してテストしています。 O/Sは64ビットLinuxです。CUDA小さなデータ用の固定メモリ
2
A
答えて
1
cudaMemcpyの実装では、可能な限り高いスループットを達成するために、さまざまなデバイス、送信元と送信先のロケーション、およびデータサイズに異なるコードパスがあります。
表示されているレートが異なるのは、おそらくアレイのサイズが変わると実装が切り替わるためです。
たとえば、フェルミGPUには専用のコピーエンジン(SM上で実行されているカーネルと並行して実行できる)と、PCI-e経由でホストメモリにアクセスできるSMの両方があります。より小さいアレイでは、cudaMemcpyをSM上で動作するカーネルとして実装する方が、ホストメモリを直接読み込み、読み込んだデータをデバイスメモリに格納する方が効率的です(逆も同様です)。または、コピーエンジンを使用する方が効率的かもしれません。実際にはどちらが起きているのかはわかりませんが、グラフを切り替えることがグラフのクロスオーバーの原因です。
0
テストが浮気している可能性があります。そのテストは、メモリの異なる種類のためのmemcpyを行うためにさまざまな機能を使用して、
cutilSafeCall(cudaEventRecord(start, 0));
if(PINNED == memMode)
{
for(unsigned int i = 0; i < MEMCOPY_ITERATIONS; i++)
{
cutilSafeCall(cudaMemcpyAsync(h_odata, d_idata, memSize,
cudaMemcpyDeviceToHost, 0));
}
}
else
{
for(unsigned int i = 0; i < MEMCOPY_ITERATIONS; i++)
{
cutilSafeCall(cudaMemcpy(h_odata, d_idata, memSize,
cudaMemcpyDeviceToHost));
}
}
cutilSafeCall(cudaEventRecord(stop, 0));
注:ここ
は時限コードの一つです。私は、モード間の主な違いはメモリがどのように割り当てられているのか、固定されている場合はcudaHostAlloc、固定されていない場合はmallocであるため、これは不正だと思います。
異なるMemcpy関数は、エラーチェックと転送設定のパスを変えることができます。
したがって、テストを修正し、両方のモードでcudaMemcpy()
でコピーしてください。 cudeEventRecord(...)
からif(0 && (PINNED == memMode))
関連する問題
- 1. CUDAの使い方tensorflow pythonライブラリの固定メモリ
- 2. CUDAコードでの定数メモリの使用
- 3. Cuda、統合メモリ、データ転送
- 4. ルックアップテーブルのCUDAメモリ
- 5. OpenACCの固定メモリ(PGIコンパイラを使用)
- 6. より良いまたは同じ:CPU memcpy()対CUDAの固定されたマップされたメモリのデバイスcudaMemcpy()
- 7. 定数メモリvsテクスチャメモリとCUDAのグローバルメモリ
- 8. 固定小数点から浮動小数点データへ
- 9. 固定&縮小ナビゲーションバー
- 10. AMD clEnqueueMapBufferと固定メモリ
- 11. ドットプロダクトPyCUDAと固定メモリ
- 12. Matlabの固定小数点
- 13. 固定小数点のメガドロップダウンメニュー
- 14. CSS:液体から小さな解像度の固定
- 15. Cuda異なるメモリ割り当て
- 16. 小さなref-countingバッファクラスのメモリ破損
- 17. 固定小数点コンビネータ
- 18. jQueryスクロール固定小数点
- 19. 共有メモリに保持できるデータの量CUDA
- 20. CUDA - 管理するメモリ
- 21. CUDAプログラミング - 共有メモリ構成
- 22. cuda統合メモリとポインタエイリアシング
- 23. CUDAの最小テクスチャサイズ制限
- 24. matlabの固定小数点の反復
- 25. 固定小間内のオーバーフローdiv
- 26. MIPSの固定小数点演算器
- 27. 固定小数点の開発
- 28. C#Genericの固定小数点ジェネレータ
- 29. MPAndroidChart固定小数点のMarkView
- 30. MATLAB固定小数点の反復
ありがとうございますが、私は 'cudaMemcpy(...)'を固定とページングの両方の割り当てに使用しています。 – Sayan
オリジナルの "不正な"コードの場合、結果は何ですか? – osgx
上記のコードはテストのものですが、最後の行の後には、ホストタイマーを停止する前にcudaDeviceSynchronize()を呼び出しています。これにより、コピーコスト全体がタイムアウトされ、bandwidthTestが「不正行為」しないことが保証されます。 – harrism