并行化混合的 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 程序时才需要 use
或 include
。如果您只有几个 !$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 的常见非标准扩展。
我有一段代码主要是用 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 程序时才需要 use
或 include
。如果您只有几个 !$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 的常见非标准扩展。