OpenMP几个“共享”指令?

问题描述

| 嘿, 我在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)
时,我必须将其写入共享变量列表中:)这有一天会帮助别人的:)