C++ Как я могу запустить три разные функции parallel_for одновременно, кроме использования tbb::task_group?

У меня есть код, где я должен параллельно запустить параллель для параллельной работы (независимо друг от друга).

Код это что-то вроде:

tbb::parallel_for(range1,func1());//first

tbb::parallel_for(range2,func2());//second

tbb::parallel_for(range3,func3());//third

Я попытался с помощью Task_group. Есть ли другой метод, доступный?

2 ответа

Решение

Есть много способов запустить любой параллельный алгоритм параллельно, вы просто хотите запустить его внутри другого параллельного алгоритма по вашему выбору. 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,

Вы можете поместить их каждый в один std::thread и впоследствии выполнить соединение. Смотрите также

Другие вопросы по тегам