Вложенная параллель для цикла … «Параллельная внешняя для цикла» в «параллельном внутреннем цикле for как функция»;

Что я хочу, чтобы запустить функцию, которая содержит цикл for (предполагается, чтобы работать параллельно) в параллельном внешнем цикле. Так это выглядит следующим образом:

void myfunction(){
...
#pragma omp parallel for
for (int i=0;i<10;i++){
do something...
}
}int main(){
#pragma omp parallel for
for(int i=0;i<5;i++){
myfunction();
}
}

Учитывая приведенный выше код, я хочу создать 5 параллельных потоков для цикла в main() функции, и я хочу, чтобы каждый из 5 потоков создал еще один K потоков для запуска своей собственной параллельной цикла for.

Хотя я знаю, как запускать вложенные циклы, если внутренний цикл не находится в отдельной функции, я не могу найти решение для такого рода проблем.

Фактически, этот фрагмент кода предназначен для параллельной 5-кратной перекрестной проверки, где у каждого сгиба есть цикл for, который должен быть распараллелен.

Может кто-нибудь мне помочь?

4

Решение

Вам нужно включить вложенный параллелизм :

void myfunction(){

#pragma omp parallel for
for (int i=0;i<10;i++){
...
}
}int main(){

omp_set_nested(1);       // Enable nested parallelism
omp_set_num_threads(5); // Use 5 threads for all parallel regions

#pragma omp parallel for
for(int i=0;i<5;i++)
{

myfunction();
}
}
4

Другие решения

Других решений пока нет …