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