打开 MP 如果 OpenMP:...else

Sha*_*ANG 3 fortran openmp fortran90

问题:我有一些我自己和其他人编写的代码,我使用了这些代码并使用 mpi 和 openmp 取得了很好的结果(有助于我在 Blue Gene/Q 上运行它)。

我不喜欢的一件事是,现在我无法在没有 -openmp 指令的情况下编译代码,因为为了获得我需要的加速,我使用了缩减变量。例子:

!$OMP parallel do schedule(DYNAMIC, 4) reduction(min:min_val)
....
    min_val = some_expression(i)
....
!$OMP end parallel do
result = sqrt(min_val)
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的东西:

!$OMP if OMP:
!$OMP min_val = some_expression(i)
!$OMP else:
if ( min_val .gt. some_expression(i) ) min_val = some_expression(i)
!$OMP end else
Run Code Online (Sandbox Code Playgroud)

有人知道这样的事情吗?请注意,如果没有 -openmp,!$OMP 行将被忽略,代码会正常运行,并给出正确的、呃相同的答案。

谢谢,

(是的,它是 FORTRAN 代码,但它与 C 和 C++ 几乎相同)

Vla*_*r F 6

对于你的确切问题:

!$ whatever_statement
Run Code Online (Sandbox Code Playgroud)

仅当使用 OpenMP 编译时才会使用该语句。


否则,在您的具体情况下,您不能只使用:

!$OMP parallel do schedule(DYNAMIC, 4) reduction(min:min_val)
....
    min_val = min(min_val, some_expression(i))
....
!$OMP end parallel do

result = sqrt(min_val)
Run Code Online (Sandbox Code Playgroud)

我通常-openmp经常使用这个,有或没有。