Как распределить выполнение m задач на n ядер (С++)?
Имеется m задач (функций), выполняются последовательно, между собой не пересекаются, как распределить их выполнение по нескольким потокам, чтобы их выполнение было максимально эффективно?
Грубо говоря хочу сделать также, как делает make -jN для целей компиляции.
Вы наверно хотите реализовать Thread Pool? Тогда можете посмотреть в книжку C++ Concurrency in action, там есть пример простого Thread Pool, если ваши задачи не слишком маленькие, то его может оказаться достаточно. Если ваши задачи достаточно короткие то можете посмотреть на библиотеку Intel TBB, там где-то в недрах очень качественный пул потоков есть, возможно, это то что вам нужно.
@domu количество потоков можно установить произвольным используя функцию omp_set_num_threads, а кроме того там есть pragma omp task, которая поможет справится с переменным числом задач.