gpt4 book ai didi

fortran - Fortran 中的 COMMON block 是否必须在 OpenMP 的每个子例程中声明为 threadprivate?

转载 作者:行者123 更新时间:2023-12-03 22:58:33 25 4
gpt4 key购买 nike

我正在修改一些旧的 Fortran 代码以使用 OpenMP 指令运行,并且它大量使用了 COMMON 块。我发现多个消息来源说使用 OMP 指令将 COMMON 块声明为 THREADPRIVATE 通过为每个 OpenMP 线程提供自己的副本来解决驻留在全局范围内的 COMMON 块的问题。但我不确定的是,THREADPRIVATE 指令是否需要在每个子例程中声明之后,或者是否在主(且唯一)PROGRAM 中包含它就足够了?

最佳答案

是的,它必须每次出现。引自 OpenMP 5.0 standard

If a threadprivate directive that specifies a common block nameappears in one program unit, then such a directive must also appear inevery other program unit that contains a COMMON statement thatspecifies the same name. It must appear after the last such COMMONstatement in the program unit.


作为评论,将 OpenMP 放入一个充满全局变量的程序中可能会导致痛苦的生活。在我开始这样的努力之前,我至少会考虑一下“我想从这里开始吗” - 在添加 OpenMP 之前对代码进行现代化可能会成为一个更简单、更便宜的选择,尤其是从长远来看。

关于fortran - Fortran 中的 COMMON block 是否必须在 OpenMP 的每个子例程中声明为 threadprivate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67930379/

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