使用多处理器运行fortran例程

时间:2016-06-22 07:24:36

标签: multithreading fortran multiprocessing fortran77 intel-fortran

我是编程新手,我实际上是一名机械工程师。对于我的研究,我写了一个用于建模过程的fortran例程。 这个例程非常慢,因为要么是我编写的(因此它在计算上并不完美)并且它执行多次迭代以达到收敛,所以它需要时间。

但我有一个6核CPU,我想如果我可以利用所有核心,那么例程可以比现在运行得更快。

例程如下:

  PROGRAM my routine

  INCLUDE 'dimensions_of_arrays.dim'
  INCLUDE 'subroutines.sub'
  INCLUDE 'subroutines2.sub'

  DECLARATION OF VARIABLES
  ..
  .
  DO LOOP OVER MANY STEPS
  .
  CALL MANY SUBROUTINES
  .
  .
  .
  PERFORM SOME ITERATION
  END LOOP
  .
  WRITE RESULTS
  END

在子程序的文件中,子程序.sub'我有20多个子程序,如下:

  SUBROUTINE xxx(a,b)

  INCLUDE 'dimensions_of_arrays.dim'

  DECLARATION OF VARIABLES
  COMMON/PATH1/PATH2/G,J,K

  .
  .
  SOME CALCULATION
  .
  END

在文件' dimensions_of_arrays.dim'在编译期间使用了常用和参数。

您认为在此例程中使用多处理器是否可行?尽量不要修改它"严重"。

我使用英特尔Composer XE2011和Visual Studio 2010作为代码的编译器。

非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:0)

由于您使用的是英特尔Fortran,我建议您的第一步应该是添加自动并行化选项。在Windows上的Visual Studio中,这是项目属性Fortran>优化>并行化>是。当你在这里时,我建议设置选项/ QxHost。我不记得你使用的旧版本是否支持将其作为项目属性 - 如果是的话,它将是Fortran>代码生成>特定于英特尔处理器的优化>与主机处理器相同。当然,您应该构建一个Release配置来启用优化。

这可能会给你足够的性能提升,令人满意。如果不是下一步,我建议打开优化诊断,看看为什么某些循环无法并行化。

您正在使用相当旧版本的编译器 - 较新版本在并行化和优化方面要好得多,我建议您使用您可以访问的最新版本。如果这些都没有产生你想要的结果,那么我同意你需要“弄脏你的手”#34;并添加OpenMP指令,但这需要您很好地理解程序的工作方式,应该共享哪些变量以及哪些变量是私有的。中间步骤是使用英特尔并行化指令,但这些指令与OpenMP没有太大区别。

将串行程序转换为并行时,尤其是旧的Fortran代码时,在全局变量(通常是COMMON)时必须非常小心。这些可以阻止并行化或导致错误的结果。英特尔Inspector XE工具(较大的英特尔Parallel Studio XE版本的一部分)可以很好地为您找到这些。