2016-08-03 9 views
0

私はTBB flow graph conditional executionと読んでいて、少し違う問題があります。TBBフローグラフの条件付き実行と複数のイン/アウト出力

複数の入力と複数の出力を持つノードを作成し、条件付き変数による実行を制御することは可能ですか?たぶん醜いキャストなし。

グラフをどのように設計したいかの簡単な例を添付しました。 TBBフローグラフを使って実行するにはどうすればいいですか?

  1. start_nodecontinue_msgがある場合は、それ自体にcontinue_msgを送信し、data_msg

    end_nodeから
  2. start_msgが空の場合、some_nodesome_node他、end_nodecontinue_msgを送るstart_msg

    some_node
  3. を送信some_nodeによって受信され、前のstart_msgがチェックされます。空の場合はcontinue_msgend_nodeに送信され、そうでない場合はdata_msgが送信されます。私が扱ってる

         +--continue_msg--+ 
            |    | 
            +-----+ +-----+ 
              | | 
              | | +----data_msg---+ 
              v |/    \ 
    start_node --start_msg--> some_node     end_node 
                \    /
                +--continue_msg--+ 
    

一つの問題:私はstart_msgの内部でどのように多くの良い要素と言うことはできませんも、サイズがのがstart_msgが保持しているとしましょう(知られているtbb::concurrent_vector<T>some_nodeが悪いが見つかった場合。要素、無視され、some_nodeは、それ自体にcontinue_msgを送信しています。

答えて

1

source_nodeがあなたのアルゴリズムで使用することができ、同じように見えます。あなたが必要とsource_nodeは、できるだけ多くのメッセージを生成することができます。だから、このアルゴリズムは、ビットを再加工することができます:

source_node -> ... -> end_node 

は、なぜあなたはcontinue_msgend_nodeに送信する必要がありますか?最後のメッセージをマークするには?おそらく、std::pair<T,bool>を使用できます。最初の要素はデータで、2番目の要素は最後のメッセージの表示です。

有効な要素がtbb::concurrent_vector<T>であり、make_pair(Data, false)という新しいメッセージが作成され、Bodyの呼び出しごとにtrueが返されます。最後の要素がコンテナから抽出されると、make_pair(Data, true)が作成され、最後の要素の指示としてfalseが返されます。

残念ながら、元のアルゴリズムはわかりませんが、私の提案は不適切である可能性があります。あなたのニーズに合っていない場合、より詳細な情報を提供できますか?

関連する問題