問題タブ [tbb-flow-graph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - TBB フロー グラフの条件付き実行
別のノードを起動する必要があるかどうかを決定する条件変数としてノードの出力を使用して、TBB フロー グラフの実行パスを動的に制御することは可能ですか?
c++ - TBB フロー グラフ: 出力から特定のトークンを待つ方法は?
パイプラインのような同期関数呼び出しを模倣するフロー グラフへのアダプターを作成しようとしています。しかし、ブロックして特定のトークンの出力を待つ方法がわかりません。wait_for_all
すべての値を待つ必要がないため、グラフを呼び出しても役に立ちません。誰でも解決策を提案できますか?
c++ - 方法: 複数の非同期入力と複数の出力を持つ TBB ノード
Threading Building Blocks (TBB) は初めてです。TBB ノードを使用して次のロジックを実装する必要があります。
タイプ N のノードは 2 つの入力を受け取ります。例: 1. std::vector // データ 2. bool // フラグ
これらの入力は非同期で行われます。
入力がタイプ 1 の場合、タイプ N のノードが所有するデータを処理して、次のような 2 つの出力を生成します。std::vector b. 整数
入力がタイプ 2 の場合、タイプ N のノードが所有するデータを処理して、std::vector などの 1 つの出力を生成します。
tbb::flow::or_node を使用して入力部分を作成し、tbb::flow::multifunction_node を使用して出力部分を作成しようとしています。
入力が 1 つだけで出力が複数ある場合、このロジックは tbb::flow::multifunction_node で記述できます (テスト済みで動作します)。1 つの出力と複数の入力がある場合、ソリューションを示すコードの例を見つけました。ただし、複数の非同期入力と複数の出力のケースを TBB フレームワークでどのように実装できるかは明確ではありません。提案を歓迎します。
c++ - インテル® TBB 関数オブジェクトでスレッドセーフな乱数を生成する (同じシード/異なるシード)
各スレッドが const 関数オブジェクトを呼び出す Intel TBB を使用しています。コードは次のとおりです
プログラム フローは次のように説明され
ますtbb::parallel_for_each(vertex_begin, vertex_end, my_func<Graph, int>(G, t));
。my_func 内で、各スレッドは頂点の out_edge_iterator 範囲を計算します。
3) 各スレッドは次のことを行います: 各エッジの process_edge 関数オブジェクト:
std::for_each(out_edge_begin, out_edge_end, process_edge<graph>(G))
;
4) 関数オブジェクト process_edge には乱数ジェネレーター (0,1) があります。
私の質問は次のとおり
です。乱数ジェネレーターのスレッドは安全ですか? 時々間違った結果が出るからです。答えは生成される乱数に依存しますが、乱数
ジェネレーター クラスがスレッド セーフかどうかはわかりません。
同じ乱数が生成されるように、同じシードを使用したいとします。
どうすればそれを達成できますか?
スレッドセーフな乱数ジェネレータークラスを生成する際に少し混乱します
スレッドセーフな乱数を使用したい場合、tbb::parallel_for_each()
どうすればよいですか? 乱数ジェネレーター クラス オブジェクトには const 関数が含まれている必要があります。そうしないと、関数オブジェクトに operator()() を const として含める必要があるという TBB の制限により、コンパイラ エラーが発生します ...
つまり、私の質問は次のとおりです
。1)TBBでスレッドセーフな乱数ジェネレーターを使用します。上記の乱数ジェネレーターをより効率的にすることはできますか?
2)静的(同じシード)にすることはできますが、スレッドセーフにすることはできますか?もしそうなら、アイデアが必要なだけで、自分で実装できます。
3) tbb::parallel_for_each() でスレッドセーフな乱数ジェネレーターを使用するためのアイデア
4) この場合、ブースト変量ジェネレーターを使用できますか? 統一された Real クラスでエンジンとディストリビューションを定義し、それらを組み合わせて generator() オブジェクトを取得します
不明な点がある場合は、同じことを明確にしますのでお知らせください。
c++ - 依存関係を使用して複数のタスクを並行して実行する
それぞれがイベントを処理する必要がある「サイト」(m)の数があります(データのチャンク。すべてすぐに利用できます)。各イベント (n 個) は、処理のために各サイトに送信されます。したがって、私には nxm タスクがあると思われるかもしれません。処理の順序は重要ではありません。ただし、1 つのサイトが一度に複数のイベントを処理できない場合があります (そのため、Task(m,x) は Task(m,y) と並行して実行できません)。
現在、サイトで「OMP parallel for」を使用して実装されており、イベントの通常の for ループにネストされています。
これは正常に機能していますが、すべてのサイトが各イベントに対して同じ複雑さを持っているわけではありません。つまり、すべてのサイトは、次のイベントに移る前に、最も遅いサイトを待つ必要があります。労働者が次のイベントに移れるようにすれば、2 倍節約できると思います。
これを実装する最良の方法は何ですか? 私は C++ を使用しています。TBB フロー グラフ、または複数のパイプラインを調べています...
もう1つの考慮事項は、各「イベント」をディスクから読み取る必要があり、メモリを少し占有することです。まだ重要ではありませんが、一度にシステムで発生するイベントをできるだけ少なくしたい (または制限したい) と思います。現在の実装では、私は1つしか持っていません(さらに、バックグラウンドで準備されているカップル)ありがとう
tbb - TBBのデータフローグラフと依存グラフの違いは何ですか
Intel TBB チュートリアルについて読んだことがありますがdata flow graph
、dependence graph
これら
2 つの概念について少し混乱しています。
と の主な違いは、明示的に共有されたリソースがあるかどうかだと言えdata flow graph
ますdependence graph
か?
しかし、疑似メッセージでdependence graph
usingを実装したり、共有グローバル変数でusingを実装したりできるようです。function_node
data flow graph
continue_node
c++ - std::shared_ptr を使用したビルディング ブロックのスレッド化
私はTBBで働き始めたばかりです。見た目はとてもいいと言わざるを得ませんが、次の問題に遭遇しました。std::shared_ptr でラムダを使用しても機能しないようです。
次のコンパイル エラーが発生します。
基本的に、int は std::shared_ptr に置き換えられました。
どんなアイデアも高く評価されます!
オーケよろしく