У меня есть код, где я должен параллельно запустить параллель для параллельной работы (независимо друг от друга).
Код это что-то вроде:
tbb::parallel_for(range1,func1());//first
tbb::parallel_for(range2,func2());//second
tbb::parallel_for(range3,func3());//third
Я попытался с помощью Task_group. Есть ли другой метод, доступный?
Есть много способов запустить любой параллельный алгоритм параллельно, вы просто хотите запустить его внутри другого параллельного алгоритма по вашему выбору. task_group
это только один пример. Самый простой подход для вашего случая заключается в использовании parallel_invoke
:
tbb::parallel_invoke([]{
tbb::parallel_for(range1,func1);//first
}, []{
tbb::parallel_for(range2,func2);//second
}, []{
tbb::parallel_for(range3,func3);//third
}
);
но один может выбрать другой parallel_for
над массивом диапазонов и указателей на функции, или используйте parallel_pipeline
, parallel_for_each
или сырой низкоуровневый tbb::task
,
Вы можете поместить их каждый в одном станд :: нить и сделать присоединиться после этого. Смотрите также также.