主题:OpenMP并行后,比原来的程序慢了100倍,这是什么原因?
使用简单的程序做OpenMP测试,发现OpenMP并行后的程序比原来程序慢了100倍以上
这个程序串行的时候在服务器上只需要运行7.45秒,而使用OpenMP并行之后时间用了10分钟
我的服务器是一个8核的IBM刀片服务器,编译器是intel的ifort 10.1.018,原程序intel编译器给做了矢量优化LOOP WAS VECTORIZED,进行OpenMP并行后,同时进行了OpenMP优化和矢量优化(不知道有没有冲突)。
使用的编译选项是
ifort -openmp -pg -o a.out FirstTest.F90 (OpenMP优化的选项)
ifort -pg -o a.out FirstTest.F90 (未优化的选项)
具体程序如下:
n=500000000
area=0
!$OMP PARALLEL PRIVATE(x,myid,nthreads,i,j)
!$ myid = OMP_GET_THREAD_NUM()
!$ nthreads = OMP_GET_NUM_THREADS();
!$OMP DO
do j=0,n
do i=0,n
x=i+j+0.5
area = 4.0/(1.0+x*x*x*x)
end do
end do
!$OMP END DO
!$OMP END PARALLEL
这是什么原因导致的呢?因为之前给程序做OpenMP并行效果不好,所以写了个程序对服务器做测试,得到了这个很奇怪的结果
这个程序串行的时候在服务器上只需要运行7.45秒,而使用OpenMP并行之后时间用了10分钟
我的服务器是一个8核的IBM刀片服务器,编译器是intel的ifort 10.1.018,原程序intel编译器给做了矢量优化LOOP WAS VECTORIZED,进行OpenMP并行后,同时进行了OpenMP优化和矢量优化(不知道有没有冲突)。
使用的编译选项是
ifort -openmp -pg -o a.out FirstTest.F90 (OpenMP优化的选项)
ifort -pg -o a.out FirstTest.F90 (未优化的选项)
具体程序如下:
n=500000000
area=0
!$OMP PARALLEL PRIVATE(x,myid,nthreads,i,j)
!$ myid = OMP_GET_THREAD_NUM()
!$ nthreads = OMP_GET_NUM_THREADS();
!$OMP DO
do j=0,n
do i=0,n
x=i+j+0.5
area = 4.0/(1.0+x*x*x*x)
end do
end do
!$OMP END DO
!$OMP END PARALLEL
这是什么原因导致的呢?因为之前给程序做OpenMP并行效果不好,所以写了个程序对服务器做测试,得到了这个很奇怪的结果