修士論文にいくつかの課題があります。あなたが私を助けてくれるか、正しい方向に向けてくれることを願っています。
OptiX を使用して、Knaus と Zwicker ( http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Knaus11.pdf ) による新しいアプローチを使用してプログレッシブ フォトン マッピングを実装しています。このアプローチにより、PPM の各反復/フレームが独立し、マルチ GPU により適したものになります。
私が (単一の GPU で) 行うことは、OptiX を使用して多数のフォトンをトレースし、それらをバッファーに格納することです。次に、光子は CUDA と推力を使用して空間ハッシュ マップに並べ替えられ、GPU を離れることはありません。レンダラーのボトルネックであるため、GPU で空間ハッシュ マップの作成を行いたいと考えています。最後に、このバッファは間接放射輝度推定中に使用されます。つまり、これは、レイ トレーシング、フォトン トレーシング、フォトン マップの生成、および最終的に画像を作成するという複数のパス アルゴリズムです。
OptiX が複数の GPU をサポートできることは理解しています。各コンテキストの起動は GPU 間で分割されます。バッファへの書き込みはシリアル化され、各デバイスにブロードキャストされるように見えるため、バッファの内容は同じです。
私がやりたいのは、1 つの GPU で 1 つのフレームを処理し、2 番目の GPU で次のフレームを処理することです。次に、たとえば CPU または GPU のいずれかで、結合パスで結果を結合できます。各デバイスで各パスを並行して実行できる場合も許容されます (各パス間で同期)。これはどういうわけか可能ですか?
たとえば、2 つの異なるホスト スレッド上の各デバイスにマッピングする 2 つの OptiX コンテキストを作成できますか。これにより、光子が 1 つのデバイス上にあると仮定して、前と同じように CUDA/thrust 空間ハッシュ マップを生成し、パイプラインの最後で生成された 2 つの画像をマージできます。ただし、プログラミング ガイドには、マルチスレッド コンテキスト処理はサポートされていないと記載されています。複数のプロセスを使用することもできますが、プロセス間通信に多くの混乱があります。このアプローチでは、シーン ジオメトリの作成、PTX ファイルのコンパイルなどの作業も重複して行う必要があります。
ありがとう!