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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 某些线程不参与代码的运行_Fortran_Openmp - Fatal编程技术网

Fortran 某些线程不参与代码的运行

Fortran 某些线程不参与代码的运行,fortran,openmp,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) allo

我有一个与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\u term(iconf)
,但输出文件中只有37个
correlation\u term(iconf)
,因此我得出结论,3个线程不参与代码的运行

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


为什么这些线程不参与?我并联有错误吗

是的,我的代码现在正在运行,现在我有22行代码,比如iconf的相关项=…你的结论可能不正确。尝试制作一个完全独立的简单示例进行验证。同时写下线程编号(
omp\u get\u thread\u num()
)并显示您的实际输出文件。谢谢Vladimir。到目前为止,我有236个循环,只有221个
相关项(iconf)
。我不明白这15条发生了什么。嗨,马克,我的代码将持续两周,所以我用少量输入运行代码,并按照弗拉基米尔的建议编写了
omp\u get\u thread\u num()
。我把线数设为16。当我设置循环16的上限(而不是1600)时,一切正常。但当我设置循环40的上限(超过线程数)时,37个循环进行计算并终止(在合理的时间内),但3个循环仍然没有数据,代码无法退出并行区域并停止。这就是问题所在。
iconf
值的代码没有完成循环<代码>{some calculations}在“永远”模式下暂停或运行。随着计算的进行,还会遇到
iconf
的其他值,这些值也会暂停或永远运行。我并联有错误吗?更可能的是,错误出现在您没有向我们展示的代码中,或者在您对它的理解中。是的,我的代码现在正在运行,现在我有22行代码,比如
correlation term of iconf=…
您的结论可能不正确。尝试制作一个完全独立的简单示例进行验证。同时写下线程编号(
omp\u get\u thread\u num()
)并显示您的实际输出文件。谢谢Vladimir。到目前为止,我有236个循环,只有221个
相关项(iconf)
。我不明白这15条发生了什么。嗨,马克,我的代码将持续两周,所以我用少量输入运行代码,并按照弗拉基米尔的建议编写了
omp\u get\u thread\u num()
。我把线数设为16。当我设置循环16的上限(而不是1600)时,一切正常。但当我设置循环40的上限(超过线程数)时,37个循环进行计算并终止(在合理的时间内),但3个循环仍然没有数据,代码无法退出并行区域并停止。这就是问题所在。
iconf
值的代码没有完成循环<代码>{some calculations}在“永远”模式下暂停或运行。随着计算的进行,还会遇到
iconf
的其他值,这些值也会暂停或永远运行。我并联有错误吗?更可能的是,错误在于您没有向我们展示的代码内部,或者您对它的理解。