并行化混合的 f77 f90 Fortran 代码?

Paralelize mixed f77 f90 Fortran code?

我有一段代码主要是用 f77 编写的,但是也有一些例程是用 f90 语法编写的。

我一直在阅读如何针对每种情况使用 openMP,但现在我怀疑如果我在同一代码中同时使用这两种语法,我应该怎么做?

我应该更具体地使用

  use omp_lib

  include 'omp_lib.h'

但在同一个 .f 文件中我有两个 sintaxys。如果我同时使用两者呢?

我正在使用 gfortran 4.8.4 进行编译。

如果我使用假设

use omp_lib (meaning f90 syntax)

那我就得用对应的语法了

!$omp parallel shared ( var1, var2 ) private ( i, j )

!$omp do
do j = 1, n
do i = 1, m
  var1(i,j) = var2
end do
end do
!$omp end do

然而,几行之后我将有一个用 f77 编写的 do 循环

 c$omp parallel shared ( w ) private ( i, j )

 c$omp do
  do 20 i = 10, 1, -2
     write(*,*) 'i =', i
  20  continue
 c$omp end do

但是这种调用并行循环的方式可以通过使用 omp_lib?

来识别

同题时反之

首先,只有在调用 OpenMP 程序时才需要 useinclude。如果您只有几个 !$omp 指令,则不需要。

你只需要这个,当你调用这样的过程时:

   call omp_set_num_threads(1)

   tid = omp_get_thread_num()

但不适用于指令。

对于 Fortran 90 和更高版本的代码(即使是看起来像 Fortran 77 的固定形式)使用

use omp_lib

因为编译器能够更好地检查您是否正确调用函数(它有一个明确的接口)。

如果代码是真的 Fortran 77(而且不仅仅是看起来像),您必须使用 include,尽管从技术上讲 Fortran 77 甚至不知道这一点。它是 Fortran 77 的常见非标准扩展。