我的问题是关于同步线程。基本上,如果我有一段OpenMP代码Fortran,每个线程都在做某事。我认为同步它们有两种可能性(让某个变量在每个线程中具有相同的值)。
!$OMP BARRIER!$OMP END PARALLEL。如有必要,请稍后添加!$OMP PARALLEL并!$OMP END PARALLEL阻止。选项 1) 和 2) 等效吗?我看到一些关于barrier嵌套线程omp 屏障嵌套线程的问题
到目前为止,我对更简单的扫描更感兴趣Fortran。例如,对于下面的代码,如果我使用barrier,则两个 if (sum > 500) then条件似乎表现相同,至少在gfortran.
PROGRAM test
USE OMP_LIB
integer :: numthreads, i, sum
numthreads = 2
sum = 0
call omp_set_num_threads(numthreads)
!$OMP PARALLEL
if (OMP_GET_THREAD_NUM() == 0) then
write (*,*) 'a'
do i = 1, 30
write (*,*) sum
sum = …Run Code Online (Sandbox Code Playgroud)