1
我是一个openmp的初学者。我正在试图简化一个简单的循环。但它显然是错误的。 任何人都可以提供帮助吗?openmp给出了顺序不同的结果
use omp_lib
implicit none
integer ::n=20,it,j
real(8) :: a=0,b=5,s,func,del,sum1,tnm,x
it=2**(n-2)
tnm=it
del=(b-a)/tnm
x=a+.5*del
sum1=0.0
!$omp parallel do reduction(+:sum1)
do j=1,it
sum1=sum1+func(x)
! write(*,*)func(x)
x=x+del
end do
!$omp end parallel do
s=.5*(s+(b-a)*sum1/tnm)
write(*,*)s,sum1,it,del
end
function func(x)
real(8)::x
func=x
end function
编辑 结果:
并行运行::
$ ifort -openmp trapzd.f90
$ ./a.out
0.976562500000000 102400.000000000 262144
1.907348632812500E-005
连续运行
$ ifort trapzd.f90
$ ./a.out
6.25000000000000 655360.000000000 262144
1.907348632812500E-005
s,sum1
在这两个运行不同
@HighPerformanceMark:结果追加。 – BaRud