いくつかのディスクI/Oが必要なコードを書いており、計算やGPUの作業を行うライブラリを呼び出すと、結果を書き込むためのディスクI/Oが増えますファイルに。CUDAでのpthreadの使用 - 設計に関する質問
ファイルが非常に大きいので、私はマルチスレッドコードとしてこれを作成したいと思います。私は、ファイルの一部を読み込み、GPUライブラリに送信して、一部をファイルに書き戻したいと考えています。関係するディスクI/Oは非常に大きく(10GBなど)、GPUでの計算はかなり速いです。
私の質問は設計上の問題です。別のスレッドを使用してGPUライブラリに送られるデータをプリロードし、メインスレッドがGPUライブラリへの呼び出しを実際に実行し、結果データを他のスレッドに送信してディスクに書き戻すか、 GPUで実行し、ディスクに書き込んだ後、次のデータを取得しますか?
私は自分のGPUライブラリにCUDAを使用しています。クーダは、すぐにGPUで2つのカーネルを実行しようとしないほどスマートですか?私は、2つのスレッドがスペースを持つより多くのデータをGPUに追加しようとしないように手動で管理する必要があると思いますか?
マルチスレッドとCUDAを組み合わせて使用する上で、良いリソースがあれば幸いです。
興味深いQ:一部のCUDA操作は非同期ですが、カーネルへの呼び出しはコード内を移動する前に常に終了するのを待っています。しかし、私はシングルスレッドCUDAを使用したことがあります。私は、各スレッドがそれ自身のCUDAコンテキストを必要としていることを推測します。それによって、それぞれがGPUを使用できるようになりますが、必ずしもデータを共有する必要はありません。これに関するいくつかの質問が[nVidiaフォーラム](http://forums.nvidia.com/index.php?showtopic=175716)にあります。 – Dan
"GPUで2つのカーネルを同時に実行しようとしないほどスマートですか?"計算能力> 2.0のカードでは、複数のカーネルを同時に起動できますが、*同じストリームになければならないと思います。マルチスレッド実装を使用する場合は、2つのスレッドからデータを読み込む必要があるかもしれませんが、そのうちの1つだけからカーネルを起動する必要があります。 –
いいえいいえいいえ、連続したカーネルを起動すると、異なるストリームにある場合にのみ同時に実行できます。同じストリームにある場合は、順次実行されます。複数のホストスレッドでの動作について私は決してそれを使用していないため、私は確かに分かりませんが、CUDAプログラミングガイドでは複数のコンテキストの使用方法とその動作方法について話しています。 – jmsu