Fortran OpenMP中的嵌套循环优化
一旦应用openMP,我就无法获得正确的输出结果,它在哪里得到正确的结果Fortran OpenMP中的嵌套循环优化,fortran,openmp,Fortran,Openmp,一旦应用openMP,我就无法获得正确的输出结果,它在哪里得到正确的结果 !$OMP PARALLEL DO SHARED(outmtresult,inpa,inpb,dynindexlist) PRIVATE(i,j) REDUCTION(+:outcountb) do i=1,size1 do j=1, size1 outcountb = outcountb + 1 outmtresult(j) = tan(inpa(j) + inpb(j)) + alpha1 +
!$OMP PARALLEL DO SHARED(outmtresult,inpa,inpb,dynindexlist) PRIVATE(i,j) REDUCTION(+:outcountb)
do i=1,size1
do j=1, size1
outcountb = outcountb + 1
outmtresult(j) = tan(inpa(j) + inpb(j)) + alpha1 + dynindexlist(i)
enddo
enddo
!$OMP END PARALLEL DO
只要交换循环,一切都会好起来:
!$OMP PARALLEL DO SHARED(outmtresult,inpa,inpb,dynindexlist) PRIVATE(i,j) REDUCTION(+:outcountb)
do j=1,size1 ! <-- Swap i and
do i=1, size1 ! j here
outcountb = outcountb + 1
outmtresult(j) = tan(inpa(j) + inpb(j)) + alpha1 + dynindexlist(i)
enddo
enddo
!$OMP END PARALLEL DO
$OMP并行DO共享(outmtresult、inpa、inpb、dynindexlist)私有(i、j)缩减(+:outcountb)
do j=1,尺寸1!包括完全可编译的示例,它应该打印什么以及它应该打印什么。我不知道你的示例是关于什么的。我指的是可编译的示例,一些我们可以理解并且可以尝试的工作代码。我不知道你试图用这些代码实现什么。请在阅读后扩展您的问题!不要重复你的问题——这有什么区别?