私は現在、多くのpthreads(linux)を生成するアプリケーションを使用しています。それらのそれぞれは、独自のCUDAコンテキストを作成します。 (現在はcuda 3.2を使用しています)。CUDAストリームとコンテキスト
私が抱えている問題は、独自のコンテキストを持つ各スレッドがGPU上で多くのメモリを消費するように見えるということです。スレッドあたり200MBのようなものなので、これは本当に私を制限しています。
単純にストリームをホストスレッドで作成し、ストリーム参照をワーカースレッドに渡すと、そのストリーム番号を自分のCUDAライブラリに渡すことができ、すべて同じコンテキストから作業できますか?
ワーカースレッドは親スレッドと同じCUDAコンテキストを自動的に認識しますか?
おかげ
PopCurrent()は実際にコンテキストを保持する「キュー」からそれを削除します。そのため、他のスレッドからアクセスできないのですか?ホストスレッドから現在のコンテキストをポップし、そのコンテキストをワーカースレッドに渡してコンテキストスタックに「プッシュ」することはできますか?文脈のような音は "並行待ち行列"にあり、ミューテックスを持っていなければならないでしょうか? – Derek
コンテキストが作成されると、コンテキストは現在のコンテキストスタックにプッシュされます。コンテキストをポップすると、cuCtxPushCurrent()を使って別のカレントコンテキストスタックにプッシュされるまで、コンテキストをポップするとすべてのCPUスレッドで使用できなくなります。したがって、あなたが記述するワークフローは、APIが実現できるように設計されたものです。 コンテキストはスレッドセーフなので、実装する必要がある追加のスレッド同期は、アプリケーションで必要に応じて順序付けやその他のセマンティクスを適用することだけです。 – ArchaeaSoftware
私は 'cuCtxSetCurrent(CUcontext ctx)'を各スレッドに使用しています。プッシュ後のポップと同様に、スレッドにもうコンテキストが必要ないときに、これには何かが必要ですか? –