2017-09-19 2 views
0

J'ai une tbb::task_scheduler_init instance init qui est initialisée avec un certain nombre de threads dans une partie du code que je n'ai pas de contrôle, dans les parties postérieures du code que je veux exécuter avec un nombre différent de threads. Comment puis-je le faire à travers cette instance init?TBB: Comment définir un nombre différent de threads dans différentes parties du code?

Y a-t-il un meilleur moyen que de faire ce qui suit?

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

L'utilisation préférée de TBB est pas encore défini le nombre de threads partout, et au lieu se concentrer sur l'obtention grainsizes dans le bon ordre de grandeur. La définition du nombre de threads (comme le montre cet exemple) entraîne souvent des problèmes de composabilité. Mais si vous êtes coincé avec la situation que vous décrivez, votre approche semble raisonnable. –

Répondre

0

Vous pouvez utiliser tbb :: task_arena pour vos besoins.

Extrait du TBB :: Documentation task_arena

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

oui, c'est une solution réalisable. – Allanqunzi