【问题标题】:Compile with gfortran without c$omp& directive在没有 c$omp& 指令的情况下使用 gfortran 编译
【发布时间】:2020-10-05 09:45:02
【问题描述】:

这个问题与使用 gfortran -fopenmp 编译支持 OpenMP 的 Fotran77(结合一些 C 库)固定格式代码有关。

This answer 讨论了在所需列超过 72 的情况下继续下一行时,在下一行中用于支持 OpenMP 的代码的正确指令是 c$omp& 标记。例如,

代码 A

C$OMP PARALLEL SHARED(Lm,Mm, pm,pn, f,f_q, fnd_rmask,rmask, dm_u,dn_v,
& iA_q)

是不正确的固定格式 Fotran77 代码部分。

this webpagethis answer 表示正确的形式是

代码 B

C$OMP PARALLEL SHARED(Lm,Mm, pm,pn, f,f_q, fnd_rmask,rmask, dm_u,dn_v,
C$OMP& iA_q)

但是,我需要使用 code A(现在不要问我,如果有人感兴趣,我可以解释)这给了我 gfortran 编译器的错误(附截图)。 This answer 还表示,即使我们不使用类似于 code Ac$omp& 标记开始下一行,ifort 也不会给出任何错误。 (我没有ifort,自己也没试过。)

我的问题:有没有一种方法(或任何编译器标志)可以让 gfortran 用 code A 愉快地编译?如果 ifort 可以忍受,gfortran 也不能吗?我不敢相信没有编译器指令可以覆盖所有这些。 (这不代表我质疑gfortran开发者的能力和原则)

【问题讨论】:

  • 因为 ifort 具有 gfortran 没有的相关标准的扩展。您已经了解了为什么从长远来看,使用扩展通常会使生活变得更加困难。我的建议?修理它。让它成为标准所说的那样。那么你再也不用担心它了。快速编写一些脚本可能就可以做到。
  • 为每个可能的不正确代码片段期望一个编译器指令/选项可能是不合理的。寻求修复代码,或使用损坏代码所针对的编译器,从长远来看会是更好的投资

标签: fortran openmp gfortran icc fortran77


【解决方案1】:

在不更改源代码的情况下,第一个问题的答案是NO

第二个问题的答案是也许。目前,gfortran 不支持 Intel 扩展。 gfortran 是开源软件 GCC 的一部分。您可以下载该软件。添加一个新选项,例如-fIntel-openmp-syntax。完成此工作后,您提交的补丁可能会提交到源代码存储库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2015-03-12
    • 2013-02-16
    相关资源
    最近更新 更多