0

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

太感谢了。

最好的问候, 贾巴巴

4

1 回答 1

1

支持 OpenMP 的编译器会查找 OpenMP pragma(行首注释符号后的打开符号)。因此,没有使用 OpenMP 感知编译器编译的 OpenMP 代码的源代码应该产生精确或非常接近的目标文件(和可执行文件)。

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

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

于 2013-01-31T07:50:21.957 回答