5

2 つの独立した Linux プロセス間で Cuda コンテキストを渡したいと思います (既にセットアップした POSIX メッセージ キューを使用します)。

cuCtxPopCurrent()とを使っcuCtxPushCurrent()てコンテキストポインタを取得できますが、このポインタは関数を呼び出したプロセスのメモリ内で参照され、プロセス間で受け渡ししても意味がありません。

私は他の解決策を探しています。これまでの私のアイデアは次のとおりです。

  1. 構造体のディープ コピーを試みてからCUcontext、コピーを渡します。
  2. 両方のプロセスがアクセスできるように、すべての Cuda ポインターがそこに配置されている共有メモリ ソリューションを見つけることができるかどうかを確認してください。
  3. プロセスを 1 つのプログラムにマージします。
  4. Cuda 4.0 ではコンテキスト共有が改善されている可能性があり、これに切り替えることができます。

オプション (1) が可能かどうかも、(2) が使用可能か可能かどうかもわかりません。(3) を一般的なものにしたい場合、実際にはオプションではありません (これはハイジャック シム内にあります)。(4) Cuda 4.0 を見てみますが、そこで動作するかどうかもわかりません。

ありがとう!

4

1 に答える 1

3

一言で言えば、いいえ。コンテキストは、コンテキストを作成したスレッドとアプリケーションに暗黙的に結び付けられます。別々のアプリケーション間の移植性はありません。これは、OpenGL やさまざまなバージョンの Direct3D でもほぼ同じです。アプリケーション間のメモリ共有はサポートされていません。

CUDA 4 は API をスレッド セーフにするため、単一のホスト スレッドが複数のコンテキスト (つまり、複数の GPU) を同時に保持し、正規のデバイス選択 API を使用して、動作する GPU を選択できます。あなたの質問/アプリケーションを正しく理解していれば、ここでは役に立ちません。

于 2011-05-19T16:11:58.723 に答える