我目前使用OpenMP来并行化遗留应用程序。在我的工作中,我们将INTENTs添加到子程序和函数的参数中,这些子程序和函数的参数是在并行线程中调用的,并且广泛使用了keywork pure来让编译器检查函数和子函数的副作用免费代码,以确保不会更改任何全球国家。
现在我注意到,在OpenMP标准(包括4.0草案)中写道:
“Fortran限制:以下限制适用于所有OpenMP 指令:•OpenMP指令可能不会出现在PURE或ELEMENTAL中 程序“。
为什么会这样?特别是INTENT和pure是强大的工具,可以强制编译器检查无副作用的代码。为什么不允许合并?它背后的技术原因是什么?
当前实现的代码编译并运行无bug,没有任何抱怨,它实际上是并行运行,我们可以通过工具和流程管理工具看到它。
如果不能这样工作,我们如何利用编译器检查无副作用的代码并与OpenMP并行运行?当前的应用程序广泛使用(改变的)全局状态进行运行时控制,我们需要识别它。
主要使用英特尔Fortran编译器(ifort)测试。
答案 0 :(得分:1)
OpenMP做的事情并不简单,比如启动线程和与操作系统交互。这与纯程序的概念模型不太相容。