それぞれがイベントを処理する必要がある「サイト」(m)の数があります(データのチャンク。すべてすぐに利用できます)。各イベント (n 個) は、処理のために各サイトに送信されます。したがって、私には nxm タスクがあると思われるかもしれません。処理の順序は重要ではありません。ただし、1 つのサイトが一度に複数のイベントを処理できない場合があります (そのため、Task(m,x) は Task(m,y) と並行して実行できません)。
現在、サイトで「OMP parallel for」を使用して実装されており、イベントの通常の for ループにネストされています。
for(...event...)
#pragma omp parallel for
for(...site...)
site.process(event)
これは正常に機能していますが、すべてのサイトが各イベントに対して同じ複雑さを持っているわけではありません。つまり、すべてのサイトは、次のイベントに移る前に、最も遅いサイトを待つ必要があります。労働者が次のイベントに移れるようにすれば、2 倍節約できると思います。
これを実装する最良の方法は何ですか? 私は C++ を使用しています。TBB フロー グラフ、または複数のパイプラインを調べています...
もう1つの考慮事項は、各「イベント」をディスクから読み取る必要があり、メモリを少し占有することです。まだ重要ではありませんが、一度にシステムで発生するイベントをできるだけ少なくしたい (または制限したい) と思います。現在の実装では、私は1つしか持っていません(さらに、バックグラウンドで準備されているカップル)ありがとう