OpenMP几个“共享”指导?

时间:2011-04-13 15:31:04

标签: fortran openmp shared

嘿那里, 我在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编译了......但是我想在一个代码中支持两种编译......有关如何做的任何建议吗?

2 个答案:

答案 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)我必须把它写进共享变量列表:)希望有一天能帮助某人:)