У меня есть набор циклов severak for-loops, из которых один выполняется только в том случае, если выполнено определенное условие.OpenMP: условная петля внутри параллельной области
Как обеспечить, чтобы только один поток (возможно, с использованием SINGLE
) выполнял оператор if, но все потоки доступны для DO
.
!$omp parallel
!$omp do
do i=0,512
something to do
end do
!$omp end do nowait
if (condition_var) then
!$omp do
do i=0,512
only do sometimes
end do
!$omp end do
fi
!$omp end parallel
Требуется ли синхронизация после первого цикла, если условие_var не изменяется внутри параллельной области? – John
@ John No. Единственное, что вы должны убедиться в том, что либо _всеми нитями_ оцениваете условие if if, либо все оценивают его как false. – Massimiliano