Fortran Openmp线程分发
我试图用Fortran90学习openmp(尤其是$omp do),但遇到了一个奇怪的问题。我编写了一个简单的代码,并使用2个处理器执行它。我用“gfortran-fopenmp filename.f90”编译了这个程序 我看到的结果是 可用的处理器数量=6 可用线程数=2 a(i)=2 j=0 a(i)=3 j=0Fortran Openmp线程分发,fortran,openmp,fortran90,Fortran,Openmp,Fortran90,我试图用Fortran90学习openmp(尤其是$omp do),但遇到了一个奇怪的问题。我编写了一个简单的代码,并使用2个处理器执行它。我用“gfortran-fopenmp filename.f90”编译了这个程序 我看到的结果是 可用的处理器数量=6 可用线程数=2 a(i)=2 j=0 a(i)=3 j=0 但我希望变量j分别取I=1和I=2的值0和1。我哪里做错了?如果我使用$omp do parallel而不是$omp do,我的期望值就达到了 没有parallel时,代码不会并行
但我希望变量j分别取I=1和I=2的值0和1。我哪里做错了?如果我使用$omp do parallel而不是$omp do,我的期望值就达到了 没有
parallel
时,代码不会并行运行,因此两个迭代都在同一个线程中。另请参阅本文:感谢Max的澄清
use omp_lib
implicit none
integer :: i,j,a(2)
write ( *, '(a,i8)' ) &
' The number of processors available = ', omp_get_num_procs ( )
write ( *, '(a,i8)' ) &
' The number of threads available = ', omp_get_max_threads ( )
!$OMP DO
do i = 1, 2
a(i) = i + 1
j = OMP_GET_THREAD_NUM()
print*,"a(i)=",a(i), "j = ",OMP_GET_THREAD_NUM()
enddo
!$OMP END DO
end