类似的东西:
!$OMP PARALLEL DEFAULT(private) SHARED(vars....,
& more_vars...,
& more_vars...
& )
在没有OpenMP的情况下进行编译时会出现错误,因为只有第一个被识别为注释!现在的问题是我不能添加“!”在那些带有“&”的线前面在前面支持编译而不使用OpenMP:
!$OMP PARALLEL DEFAULT(private) SHARED(vars....,
! & more_vars...,
! & more_vars...
! & )
因为它不再用OpenMP编译了......但是我想在一个代码中支持两种编译......有关如何做的任何建议吗?
答案 0 :(得分:8)
您没有使用正确的语法。如果您查看OpenMP V3.0规范,第2.1.2节“自由源表单指令”,您将看到以下内容:
哨兵可以出现在任何列中,只要它前面只有空格 (空格和制表符)。它必须作为一个单词出现,没有干预 字符。 Fortran自由格式行长度,空格和延续规则适用于 指令行。初始指令行必须在标记之后有一个空格。继续 指令行必须有一个&符号作为行上的最后一个非空白字符,先前 对指令内的任何评论。延续指令行可以有一个 &符号之后的指示标记与前后可选的空格 符号
所以正确的形式应该是:
!$OMP PARALLEL DEFAULT(private) SHARED(vars...., &
!$OMP& more_vars..., &
!$OMP& more_vars... &
!$OMP& )
对于固定形式,它是同一类型的东西。您使用OMP标记开始每一行,并确保连续行在第6列中具有非空白和非零字符。
答案 1 :(得分:0)
好的伙计......我找到了解决方案:循环标识符(我的意思是我在以下代码中:do i=1,end
)必须共享,因为我正在使用DEFAULT(private)
我必须把它写进共享变量列表:)希望有一天能帮助某人:)