如何解决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)
时,我必须将其写入共享变量列表中:)这有一天会帮助别人的:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。