一些线程不参与运行代码

时间:2016-01-09 09:24:54

标签: fortran openmp

我有一个与OpenMP并行的fortran代码。这是代码的并行部分:

!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(iconf,d,randx,                   &
!$OMP& randy,randz,unit_cg,theta1,theta2,theta3,fr1,fr2,fr3,Q,          &
!$OMP& plproduct_avg,correlation_term) 

      allocate(randx(num),randy(num),randz(num),unit_cg(num),           &
     &         fr1(num),fr2(num),fr3(num),theta1(order,num),            &
     &         theta2(order,num),theta3(order,num),                     &
     &         Q(nfftdim1,nfftdim2,nfftdim3))

!$OMP DO 
      do 250 iconf = 1,1600
       write(6,*)'configuration number',iconf

       {some calculations}

       write(6,*)'correlation term of iconf =',iconf,                   &
 &            correlation_term(iconf)

250   continue
!$OMP END DO

      deallocate(randx,randy,randz,unit_cg,fr1,fr2,fr3,theta1,theta2,   &
     &           theta3,Q)

!$OMP END PARALLEL

当我在40个线程上运行此代码时(我在脚本40上设置线程数),程序进入40个循环,在输出文件中我有40个这样的行:

configuration number         161

有不同的数字。所以我发现所有40个线程都开始工作了。因此这行代码

       write(6,*)'correlation term of iconf =',iconf,                   &
&            correlation_term(iconf)

应该执行40次,输出文件中应该有40 correlation_term(iconf),但输出文件中只有37 correlation_term(iconf),所以我得出结论,3个线程不参与运行代码。< / p>

在下一步,程序只输入37个循环,只有35个循环有数据。似乎有些线程不参与运行,现在只有22个线程进行计算。

为什么这些线程不参与?我是否有并行错误?

0 个答案:

没有答案