2017-09-19 5 views
0

나는 tbb::task_scheduler_init 인스턴스 init을 갖고 있는데,이 스레드는 제어 할 수없는 코드의 일부 스레드로 초기화됩니다. 코드의 나머지 부분에서 스레드 수를 달리하고 싶습니다. 이 인스턴스를 통해 어떻게해야합니까? init?TBB : 코드의 다른 부분에 다른 수의 스레드를 설정하는 방법은 무엇입니까?

다음 작업을 수행하는 것보다 더 좋은 방법이 있습니까?

init.terminate(); 
init.initialize(my_preferred_number_of_threads); 

/* 
run some code 
*/ 

init.terminate(); 
init.initialize(original_number_of_threads); // restore the original tbb scheduler 
+3

task_arena 문서에서 촬영

. 스레드의 수를 설정하면 (이 예제와 같이) 종종 구성 가능성 문제가 발생합니다. 그러나 당신이 묘사하는 상황에 집착한다면 당신의 접근 방식은 합리적인 것처럼 보입니다. –

답변

0

필요에 따라 tbb :: task_arena를 사용할 수 있습니다. TBB :: TBB의 기본 사용은 어디 스레드의 수를 설정하고, 대신 바로 야구장에 grainsizes를 얻기에 집중하지 않는 것입니다

tbb::task_scheduler_init def_init; // Use the default number of threads. 
tbb::task_arena limited(2);  // No more than 2 threads in this arena. 
tbb::task_group tg; 

limited.execute([&]{ // Use at most 2 threads for this job. 
    tg.run([]{ // run in task group 
    tbb::parallel_for(1, N, unscalable_work()); 
    }); 
}); 

// Run another job concurrently with the loop above. 
// It can use up to the default number of threads. 
tbb::parallel_for(1, M, scalable_work()); 

// Wait for completion of the task group in the limited arena. 
limited.execute([&]{ tg.wait(); }); 
+0

네, 이것이 가능한 해결책입니다. – Allanqunzi

관련 문제