我已经在这个网站上看到several posts来讨论这个问题。但是,我认为我的严格代码由于创建线程而产生的开销并且所有这些都不应该是一个大问题,现在开放的mp变得慢得多!我正在使用带有gfortran 4.6.3的四核机器作为我的编译器。以下是测试代码的示例。
Program test
use omp_lib
integer*8 i,j,k,l
!$omp parallel
!$omp do
do i = 1,20000
do j = 1, 1000
do k = 1, 1000
l = i
enddo
enddo
enddo
!$omp end do nowait
!$omp end parallel
End program test
如果我在没有打开mp的情况下运行它,此代码大约需要80秒,但是,如果打开mp,则需要大约150秒。我在其他严肃的代码中看到了同样的问题,在串行模式下运行时间约为5分钟左右。在这些代码中,我注意到从线程到线程没有依赖关系。那么为什么这些代码变慢而不是更快?
提前致谢。