使用Critical构造的OpenMP崩溃了我的代码

时间:2015-12-08 17:00:54

标签: parallel-processing fortran openmp critical-section

所以我在Fortran中编写了一些并行代码,但是我需要使用关键块来防止竞争条件。这是我的代码的一个简单版本(它是一个优化器):

do i=2,8,2
    do j=1,9-i
        Ftemp=1.0e20  !A large number
        !$OMP parallel do default(shared) private(...variables...)
        do k=1,N
            ###Some code that calculates variable Fobj###

            !$OMP Critical
            !$OMP Flush(Ftemp,S,Fv)     !Variables I want optimized
            if (Fobj.lt.Ftemp) then
                S=Stemp
                Fv=Ft
                Ftemp=Fobj
            end if
            !OMP Flush(Ftemp,S,Fv)
            !OMP end Critical

        end do                   !Line 122
        !$OMP end parallel do    !Line 123
     end do
 end do

所以没有openmp,代码工作正常。它也可以在没有关键命令的情况下运行(Flush命令很好)。我得到的错误是第122行的“意外的END语句”和第123行的“Unexpected!$ OMP end parallel do statement”。我不知道为什么这不起作用,因为关键块完全包含在并行循环中没有退出/ goto语句将离开或输入...一些gotos跳转到循环的主要部分,但从不离开它或进入/绕过关键块。

1 个答案:

答案 0 :(得分:1)

Hristo Iliev在评论中指出:你的结束指示!OMP end Critical$之后错过!

它被视为评论并被忽略。