2017-09-19 1 views
0

Ich habe eine tbb::task_scheduler_init Instanz , die mit einer bestimmten Anzahl von Threads in einem Teil des Codes initialisiert wird, die ich nicht habe, in späteren Teilen des Codes möchte ich mit einer anderen Anzahl von Threads ausführen. Wie kann ich es über diese Instanz init?TBB: Wie man unterschiedliche Anzahl von Fäden in verschiedenen Teilen des Codes setzt?

Gibt es einen besseren Weg als das folgende?

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

Die bevorzugte Verwendung von TBB ist nicht die Anzahl der Threads überall zu setzen und stattdessen konzentrieren sich auf grainsizes im rechten Baseballstadion bekommen. Das Festlegen der Anzahl der Threads (wie dieses Beispiel zeigt) führt häufig zu Problemen mit der Zusammensetzung. Aber wenn Sie mit der Situation, die Sie beschreiben, feststecken, scheint Ihre Herangehensweise vernünftig. –

Antwort

0

Sie können tbb :: task_arena für Ihre Bedürfnisse verwenden.

von TBB Taken :: task_arena Dokumentation

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

ja, das ist eine machbare Lösung. – Allanqunzi

Verwandte Themen