2016-08-03 7 views
0

TBB flow graph conditional execution을 읽었으며 약간 다른 문제점이 있습니다.TBB 흐름 그래프 조건부 실행 및 다중 입력 및 출력

조건부 변수로 실행을 제어하기 위해 다중 입력 및 다중 출력을 갖는 노드를 만들 수 있습니까? 어쩌면 추악한 던지기없이.

나는 그래프를 어떻게 디자인하고 싶은지 간단한 예제를 첨부했다. TBB 플로우 그래프로 실행하는 가장 좋은 방법은 무엇입니까?

  1. start_node는이 start_msg

  2. start_msg이 비어있는 경우 some_node에, some_node는이 continue_msgend_node에, 다른 some_node 자체에 continue_msg을 보내고는 continue_msgdata_msg

  3. end_node에 경우 전송 전송 이전에 start_msg가 확인 된 some_node이 수신되었습니다. 비어있는 경우 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>을 사용할 수 있습니다.

source_node의 몸은 tbb::concurrent_vector<T>에 유효한 요소는, 새로운 메시지 make_pair(Data, false)를 만들고 각 바디 호출에 대한 true 반환 찾습니다. 마지막 요소가 컨테이너에서 추출되면 make_pair(Data, true)을 만들고 마지막 요소의 표시로 false을 반환합니다.

불행히도 원래 알고리즘을 알지 못하고 제안이 부적절 할 수 있습니다. 귀하의 필요에 부합하지 않는 경우 더 자세한 정보를 제공해주십시오.