我目前使用OpenMP来并行化一个遗留应用程序。在我的工作中,我们为子例程和函数的参数添加了INTENT,并广泛使用关键字pure,以便让编译器检查函数和子例程是否具有无副作用的代码,以确保不更改任何全局状态。
现在,我注意到,在OpenMP标准(包括4.0草案)中写道:
“Fortran限制:所有OpenMP指令都适用以下限制:• OpenMP指令不能出现在PURE或ELEMENTAL过程中。”
为什么会这样?特别是INTENT和pure是强制编译器检查无副作用代码的好工具。为什么不允许它们结合使用?其背后的技术原因是什么?
当前实现的代码可以编译和运行,没有任何投诉,并且真正地在并行运行,我们可以通过工具和进程管理工具看到它。
如果不能这样工作,我们如何利用编译器检查无副作用的代码并与OpenMP并行运行?当前应用程序广泛使用(更改的)全局状态进行运行时控制,我们需要确定它。
它主要使用Intel Fortran Compiler(ifort)进行测试。
现在,我注意到,在OpenMP标准(包括4.0草案)中写道:
“Fortran限制:所有OpenMP指令都适用以下限制:• OpenMP指令不能出现在PURE或ELEMENTAL过程中。”
为什么会这样?特别是INTENT和pure是强制编译器检查无副作用代码的好工具。为什么不允许它们结合使用?其背后的技术原因是什么?
当前实现的代码可以编译和运行,没有任何投诉,并且真正地在并行运行,我们可以通过工具和进程管理工具看到它。
如果不能这样工作,我们如何利用编译器检查无副作用的代码并与OpenMP并行运行?当前应用程序广泛使用(更改的)全局状态进行运行时控制,我们需要确定它。
它主要使用Intel Fortran Compiler(ifort)进行测试。