3

我目前使用 OpenMP 来并行化遗留应用程序。在我的工作中,我们将 INTENT 添加到子程序和函数的参数中,这些子程序和函数将在并行线程中调用,并广泛使用 keywork pure 来让编译器检查函数和子路由的无副作用代码,以确保不更改任何代码全局状态。

现在我注意到了,在 OpenMP 标准(包括 4.0 草案)中是这样写的:

“Fortran 限制:以下限制适用于所有 OpenMP 指令: • OpenMP 指令不得出现在 PURE 或 ELEMENTAL 过程中。”

为什么呢?尤其是 INTENT 和 pure 是强制编译器检查无副作用代码的好工具。为什么不允许合并?其背后的技术原因是什么?

当前实现的代码编译和运行没有错误,没有任何抱怨,它实际上是并行运行的,我们可以通过工具和流程管理工具看到它。

如果不是这样,我们如何利用编译器检查无副作用的代码并与 OpenMP 并行运行?当前的应用程序广泛使用(更改的)全局状态来进行我们需要识别的运行时控制。

它主要使用英特尔 Fortran 编译器 (ifort) 进行测试。

4

1 回答 1

1

OpenMP 做的事情并不简单,比如启动线程和与操作系统交互。这与纯过程的概念模型不太兼容。

于 2013-01-22T11:22:03.347 回答