Multithreading OpenMP:并行区域内的条件循环
我有一组循环的severk,其中一个循环只有在满足某个条件时才执行 如何确保只有一个线程(可能使用Multithreading OpenMP:并行区域内的条件循环,multithreading,if-statement,fortran,openmp,Multithreading,If Statement,Fortran,Openmp,我有一组循环的severk,其中一个循环只有在满足某个条件时才执行 如何确保只有一个线程(可能使用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
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
您不必确保只有一个线程计算if条件,只要该条件在团队中的线程之间给出相同的结果。更明确地说:
!$omp parallel
!$omp do
do i=0,512
something to do
end do
!$omp end do
! Synchronize here to ensure shared variables
! will not be changed while evaluating the if condition
if (condition_var) then
! All threads evaluate the if condition and either enter
! the block or skip it
!$omp do
do i=0,512
only do sometimes
end do
!$omp end do
fi
!$omp end parallel
如果条件在并行区域内没有更改,则第一个循环后是否需要同步?@John No。您必须确保的唯一一点是,所有线程要么计算
if
条件为真,要么计算它为假。