Nvidia は、Cuda 4.0 により、プログラマーが CPU と GPU の間で統合メモリ モデルを使用できるようになると宣伝しているようです。これは、最高のパフォーマンスを得るために GPU と CPU でメモリを手動で管理する必要性に取って代わるものではありませんが、テスト、検証、および最適化 (GPU と CPU メモリを手動で管理する) が可能な、より簡単な実装が可能になりますか? コメントや意見を聞きたいです:)
3 に答える
私が読んだことによると、重要な違いは、2 つ以上の GPU がある場合、ホスト RAM に触れることなく GPU1 から GPU2 にメモリを転送できることです。ホスト上の 1 つのスレッドだけで 2 つの GPU を制御することもできます。
うーん、それは大きなニュースのようです !NVIDIA 自身のエンジニアによって構築された推力ライブラリは、すでにいくつかの味を与えてくれます。=記号だけで RAM から GPU の DRAM にデータを移動できます(cudaMalloc や cudaMemcpy などを呼び出す必要はありません)。したがって、推力により、CUDA-C は「単なる C」のようになります。
将来、これを CUDA-API に統合するかもしれません。バックハンドでは、手順は同じになります (そして永久に同じままです) が、簡単にするためにプログラマーから隠されていることに注意してください。(私はそれが好きではありません)
編集: CUDA 4.0 が発表され、推力はそれに統合されます。
「統合された」メモリは、アドレス空間のみを参照します。ホスト ポインターとデバイス ポインターは同じ 64 ビット アドレス空間から割り当てられるため、特定のポインター範囲はプロセス全体で一意になります。その結果、CUDA は、ポインター範囲がどのデバイスに「属しているか」をポインターから推測できます。
アドレス空間を、これらのポインター範囲を読み書きする機能と混同しないことが重要です。CPU は、デバイス メモリ ポインターを逆参照できません。ただし、ユニファイドアドレス対応のプラットフォームでは、すべてのホスト割り当てがデフォルトでマップされるため、GPU はホスト割り当てを逆参照できると思います。
注: Windows Vista/Windows 7 のデフォルト ドライバー モデルは、この機能をサポートしていません。