Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran Openmp线程分发_Fortran_Openmp_Fortran90 - Fatal编程技术网

Fortran Openmp线程分发

Fortran 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时,代码不会并行

我试图用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
时,代码不会并行运行,因此两个迭代都在同一个线程中。另请参阅本文:感谢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