TBB의 PPL 작업 계속과 유사한 것이 있습니까? 나는 tbb::task
의 할당 manuall의 낮은 수준 TBB 방법을 알고 수동으로도 계속 작업을 할당하고 수동 심판이 카운트를 관리 :인텔 TBB의 작업 계속
struct FibContinuation: public task {
long* const sum;
long x, y;
FibContinuation(long* sum_) : sum(sum_) {}
task* execute() {
*sum = x+y;
return NULL;
}
};
struct FibTask: public task {
const long n;
long* const sum;
FibTask(long n_, long* sum_) :
n(n_), sum(sum_)
{}
task* execute() {
if(n<CutOff) {
*sum = SerialFib(n);
return NULL;
} else {
// long x, y; This line removed
FibContinuation& c =
*new(allocate_continuation()) FibContinuation(sum);
FibTask& a = *new(c.allocate_child()) FibTask(n-2,&c.x);
FibTask& b = *new(c.allocate_child()) FibTask(n-1,&c.y);
// Set ref_count to "two children plus one for the wait".
c.set_ref_count(2);
spawn(b);
spawn(a);
// *sum = x+y; This line removed
return NULL;
}
}
};
단순히 끔찍 그. 스폰 할 자식 작업 수를 미리 알고 수동으로 참조 횟수를 적절하게 설정해야합니다.
create_task([]()->bool
{
// compute something then return a bool result
return true
}).then([](bool aComputedResult)
{
// do something with aComputedResult
});
가 어떻게 TBB에서 그 달성 않습니다이 연속 요청을 지정
PPL의 방법은 너무 간단하다 ... 매우 깨지기 코딩입니까?
그냥 임의의 생각. Boost future에는 'then'이 있는데, 1.53 년 이후로는 모든 메소드가 구현되는 것은 아니지만 다른 것들은 버그가있을 수 있다고 생각합니다. 문서를 확인하십시오. TBB는 비슷한 것을 가지고 있지 않습니다. TBB 플로우 그래프가 있습니다. 메시지 흐름 구성표를 만들면 TBB가 가능할 때마다 병렬 처리됩니다. 이것은 'then'만큼 간단하지는 않지만, 더 강력합니다. 마지막으로, TBB는 작업 기반 병렬 처리가 아니라 데이터 병렬 문제를 추상화하는 알고리즘 패턴에 중점을 둡니다. – inf
@bamboon 흠, 내가 대답 해 주셔서 감사합니다. –
질문은 두 가지 언어로 구현 된 내용을 비교하고 문제가있는 세부 정보의 취약성에 대해 불평합니다. TBB 예제는 new-increment-spawn을 두 번 반복 할 수 있으며 이제는 취약성이 사라졌습니다. 아마도 더 효율적인 spawn_all() 또는 뭔가가있을 것입니다! – mabraham