Распараллелить несколько разных процедур с помощью OpenMP - C (СИ)
Формулировка задачи:
Требуется распараллелить несколько разных процедур с помощью OpenMP 3.0 в gcc 4.5. Но проблема в том, что одна из функций обязательно должна выполняться в главном треде под номером 0. Логично использовать
#pragma оmp parallel sections
Но выбор исполняющего треда для секции не определен и нужная процедура постоянно исполняется в новом треде.
Вопрос в том как правильно решить эту проблему?
Вариант
Мне кажется неправильным\грубым. Есть ли решение с использованием средств омп?
#pragma omp parallel
{
switch (omp_get_thread_num())
{
case 0: ...
case 1: ...
...
}
}Решение задачи: «Распараллелить несколько разных процедур с помощью OpenMP»
textual
Листинг программы
#pragma omp parallel
{
#pragma omp master
{
#pragma omp task
{
... // задания, которые не зависят от треда
}
... // задания для главного треда
#pragma omp taskwait
}
}