在Fortran中使用openmp和多个子程序的最佳方法是什么?

时间:2013-01-31 04:24:12

标签: fortran openmp

我有一个用Fortran编写的程序,我有100多个子程序。但是,我有大约30个子程序,其中存在open-mp代码。我想知道编译这些子程序的最佳程序是什么。当我使用所有文件立即编译时,我发现open mp编译的代码比没有open-mp的代码运行得更慢。我应该单独使用open-mp标签编译子程序吗?在这些条件下最佳做法是什么?

非常感谢你。

最诚挚的问候, Jdbaba

1 个答案:

答案 0 :(得分:1)

OpenMP感知编译器查找OpenMP pragma(行开头处的注释符号后面的开放符号)。因此,没有使用OpenMP感知编译器编译的OpenMP代码的源应该产生完全或非常接近的目标文件(和可执行文件)。

编辑:应该注意,如下面的Hristo Iliev所述,启用OpenMP可能会影响串行代码,例如使用可能在算法上有所不同的OpenMP版本的库(在并行中更有效)和优化。

最有可能的是,这里的问题与您的代码算法更相关。 或者,在比较OpenMP和非OpenMP版本时,您可能没有使用相同的优化标志进行编译。