-1

C++ と OpenGL を使用してハンド トラッキング アプリケーションを開発しています。(および QT、Eigen、OpenCV)

OpenGL は、3D モデルをレンダリングするために使用されます (追跡ループの反復ごとに)。

アプリケーションは 1 つのスレッドで実行されます。

非常に時間のかかる実験を行うことに興味があるので、同じ実行可能ファイルの多くのインスタンスを開始し、それらを異なるパラメーターで実行するという意味で、物事を並列化できるかどうか疑問に思っていました。

これをやってみるだけで動作するように見えますが、異なるインスタンスが GPU 上で互いに干渉するかどうかはわかりません。より説明的に言うと、次のことについて疑問に思います。一度に 1 つのインスタンスのみを実行していくつかの実験を行い、次に多くのインスタンスを同時に実行して同じ実験を繰り返した場合、結果は数値的に同じになるでしょうか?

もちろん、私は実験を通じてそれを検証しようとしますが、誰かが私を適切な読み物に特定できるかどうか疑問に思っていました (本当に関連するものは見つかりませんでした)。

この問題に関するアイデアはありますか?

最初のコメントへの回答 (@KillianDS)

実験の詳細は実際には数学的であり、トピックに「ノイズ」を引き起こす可能性があります.

アイデアは、前のフレームと現在のフレームの間の対応を見つけようとする追跡アルゴリズムがあるということです。これらの対応を使用することにより、アルゴリズムは前のフレーム (既知) のポーズから 3D モデルを取得し、現在のフレームに適合するように変換します。これに影響を与えるいくつかの (数学的) パラメーターがあり、実験では、多くのテスト フレームを用意し、さまざまなパラメーターを使用してこれらのアルゴリズムを実行することで、最適なパラメーター (値または値の範囲) を見つけることができます。

実験中、OpenGL を使用して 3D モデルを投影し、現在のフレーム画像に適合させます。表示されるものは通常どおりレンダリングされますが、実際のジョブは GPU のオフスクリーン バッファーを使用して行われます。

これまで、マルチプロセッシング (同時に多数のインスタンス) を使用して実験を実行していましたが、一度に 1 つのインスタンスだけを実行すると、バグが見つかったため、まったく同じ数を再現できませんでした。(同じテストが現在進行中ですが、非常に時間がかかります)

ただし、多くのインスタンスを同時に実行するときに GPU を本当に信頼できるかどうか、または GPU メモリ内のものが台無しになる可能性があるかどうか疑問に思っていました

2 番目のコメントへの回答 (@Lajos Arpad)

要するに問題を再定義するために、私は物事を共有したくありませんが、異なるインスタンス (マルチプロセッシングの場合、あなたが言及したもの) が互いに影響を与えないようにしてください (つまり、共有はまったくありません)。

4

1 に答える 1

0

2 つの可能な並列化があります。

  1. マルチスレッド

  2. マルチプロセッシング

どちらかまたは両方を使用できます。

あまり具体的ではなかったので、私はあなたの仕事をよく理解していませんが、一般的には次の方法で価値を共有できます。

  1. スレッド/プロセスで使用されるファイルを使用します。

  2. スレッド/プロセスがデータを操作するデータベースのようなサービスを使用します。

  3. 宣言または定義によって共有される変数を使用します (C++ クラスの静的メンバーなど)。

  4. リスニング ポートとソケットによるプロセス/スレッド間の通信の使用。

この瞬間、他に何も頭に浮かびません。それ以外は共有されません。

詳細については、これこれをお読みください。

于 2013-03-11T19:57:36.720 に答える