Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 使用关键构造的OpenMP使我的代码崩溃_Parallel Processing_Fortran_Openmp_Critical Section - Fatal编程技术网

Parallel processing 使用关键构造的OpenMP使我的代码崩溃

Parallel processing 使用关键构造的OpenMP使我的代码崩溃,parallel-processing,fortran,openmp,critical-section,Parallel Processing,Fortran,Openmp,Critical Section,因此,我用Fortran编写了一些并行代码,但我需要使用关键块来防止竞争情况。下面是我的代码的基本版本(它是一个优化器): 因此,如果没有openmp,代码工作正常。它也可以在没有关键命令的情况下运行(Flush命令也可以)。我得到的错误是第122行的“意外结束语句”和第123行的“意外!$OMP END parallel do语句”。我不知道为什么这不起作用,因为关键块完全包含在并行循环中,并且没有退出或进入的exit/goto语句。。。一些Goto在循环的主要部分跳跃,但从不离开循环或进入/

因此,我用Fortran编写了一些并行代码,但我需要使用关键块来防止竞争情况。下面是我的代码的基本版本(它是一个优化器):


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

正如赫里斯托·伊利耶夫在评论中指出的那样:你的关闭指令
!OMP end Critical
之后缺少一个
$


它被视为注释并被忽略。

2
刷新
指令的意义是什么,因为
关键
意味着在进入和退出该区域时进行完整的
刷新
?我怀疑这与您的问题有关,但是,如果只是为了代码的清晰性,应该删除2
flush
指令。您使用哪种编译器?你确定你准确地复制了代码吗?你的结束指令
!OMP end Critical
之后缺少一个
$
。正如@HristoIliev的评论所表明的,这似乎是一个简单的打字错误造成的。投票结束。
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