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