【发布时间】: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 webpage 和this 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 A 的 c$omp& 标记开始下一行,ifort 也不会给出任何错误。 (我没有ifort,自己也没试过。)
我的问题:有没有一种方法(或任何编译器标志)可以让 gfortran 用 code A 愉快地编译?如果 ifort 可以忍受,gfortran 也不能吗?我不敢相信没有编译器指令可以覆盖所有这些。 (这不代表我质疑gfortran开发者的能力和原则)
【问题讨论】:
-
因为 ifort 具有 gfortran 没有的相关标准的扩展。您已经了解了为什么从长远来看,使用扩展通常会使生活变得更加困难。我的建议?修理它。让它成为标准所说的那样。那么你再也不用担心它了。快速编写一些脚本可能就可以做到。
-
为每个可能的不正确代码片段期望一个编译器指令/选项可能是不合理的。寻求修复代码,或使用损坏代码所针对的编译器,从长远来看会是更好的投资
标签: fortran openmp gfortran icc fortran77