Что я хочу, чтобы запустить функцию, которая содержит цикл 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, который должен быть распараллелен.
Может кто-нибудь мне помочь?
Вам нужно включить вложенный параллелизм :
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();
}
}
Других решений пока нет …