@domu

Как распределить выполнение m задач на n ядер (С++)?

Имеется m задач (функций), выполняются последовательно, между собой не пересекаются, как распределить их выполнение по нескольким потокам, чтобы их выполнение было максимально эффективно?

Грубо говоря хочу сделать также, как делает make -jN для целей компиляции.
  • Вопрос задан
  • 2724 просмотра
Решения вопроса 1
Вы наверно хотите реализовать Thread Pool? Тогда можете посмотреть в книжку C++ Concurrency in action, там есть пример простого Thread Pool, если ваши задачи не слишком маленькие, то его может оказаться достаточно. Если ваши задачи достаточно короткие то можете посмотреть на библиотеку Intel TBB, там где-то в недрах очень качественный пул потоков есть, возможно, это то что вам нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
BuriK666
@BuriK666
Компьютерный псих
используйте OpenMP
#pragma omp parallel sections
{ 
  #pragma omp section  
  {  
    func1();
  }
  #pragma omp section  
  {  
    func2();
  }
  #pragma omp section  
  {
    func3();
  }
}
Ответ написан
opium
@opium
Просто люблю качественно работать
сделацте много тредов или юзайте mpi
Ответ написан
Комментировать
Trrrrr
@Trrrrr
есть добавка к бусту threadpool.sourceforge.net/tutorial/intro.html
тредпул. Я его закидывал просто к папку с бустом. Пользоваться элементарно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы