2011-07-09 4 views
1

タイトルがあなたを惑わしていないことを願っています。フレームワークを変更せずに、プラットフォームに依存しない並列化が可能ですか?

私の問題は次のとおりです:現在、私はraytracerをスピードアップしようとしています。これはグラフィックスカードの助けを借りて行われます。これによってこれが遅くなったにもかかわらず、うまく動作します。 :)

これは、グラフィックスカード(私の「トレースサーバ」)上で一度にジオメトリ全体に1本の光線をトレースしてから結果を取得することが原因で発生します。いくつかの光線を集めてそれらを計算し、結果を一緒にフェッチしてこれをスピードアップします。

次の問題は、この並列化について何も知りませんが、最小の可能性がある周囲のフレームワークを書き直すことができないということです。

ここに私のアプローチがあります: 私は、それぞれがレイを取得し、交差点を計算するために私の "トレースサーバ"を要求するいくつかのスレッドを使うことを考えました。その後、グラフィックカード上の交差点を計算するために十分な光線が集められるまでスレッドが停止され、効率的に結果が戻されます。つまり、各スレッドは、結果がフェッチされるまで待機します。

あなたは、私はすでにいくつかの計画を持っているが、私は知りません以下を参照してください。スレッドフレームワークは、私はプラットフォーム非依存するように取るべき

  • を?
  • 固定サイズのスレッドプールを使用するか、必要に応じて作成する必要がありますか?
  • 任意のスレッドライブラリが少なくとも1000個の待機スレッドを処理できます(これは、効率的になるためにフェッチするために必要な数になるためです)。

しかし、私はまたに十分あり

  • まで

    1. は、「トレーシングサーバー」への負荷(新線)をダンプし、次の負荷をフェッチすることを一つのスレッドでこれをやって想像できます結果を取得します。
    2. スレッドは結果を1つずつ取り出し、すべての結果が処理されるまでさらに計算を行い、すべてのレイが完了するまでステップ1に戻ります。

    また、これを並列化する方法があれば教えてください。

    よろしく、

    PS あなたは、この情報が必要な場合:私は、使用する2つのプラットフォームはLinuxとWindowsのです。

  • 答えて

    2

    は、スレッドビルディングブロックまたはブースト::スレッドを使用します。限りスレッドプール/オンデマンド・スレッドなど

    http://www.boost.org/doc/libs/1_46_0/doc/html/thread.html

    http://threadingbuildingblocks.org/

    - それは創造のオーバーヘッドを回避してスレッドプールは、一般的に良いアイデアです。

    Maximum number of threads per process in Linux?

    +0

    最大スレッド数についての情報のために[OK]をTHXを:待機中のスレッドの

    数つもりは何よりも基礎となるシステムに依存しています。スレッドプールを使用している場合は、何千ものスレッドがある程度のオーバーヘッド(少なくともメモリ内にある)になっているため、私はいくつかのスレッドだけを実行しようとします。 – Nobody

    関連する問題