gpt4 book ai didi

Fortran 和 OpenMP : Why are OpenMP directives not allowed inside pure procedures?

转载 作者:行者123 更新时间:2023-12-05 06:46:35 25 4
gpt4 key购买 nike

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

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

"Fortran Restrictions: The following restriction applies to all OpenMP directives: • OpenMP directives may not appear in PURE or ELEMENTAL procedures."

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

当前实现的代码编译和运行没有错误,没有任何提示,它确实是并行运行的,正如我们可以通过工具和进程管理工具看到的那样。

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

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

最佳答案

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

关于Fortran 和 OpenMP : Why are OpenMP directives not allowed inside pure procedures?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14455892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com