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++ 几乎相同)
对于你的确切问题:
!$ 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经常使用这个,有或没有。