我有一个主要在f77编写的代码,但是也有用f90语法编写的例程。
我一直在阅读如何在每种情况下使用openMP,但现在我怀疑如果我在同一代码中同时使用两种语法,我应该怎么做?
更具体地说,我应该使用
use omp_lib
或
include 'omp_lib.h'
但是在同一个.f文件中,我有两个sintaxys。如果我同时使用两者怎么办?
我正在使用gfortran 4.8.4进行编译。
如果我使用let's say
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?
来识别同样的问题恰恰相反。
答案 0 :(得分:2)
首先,只有在调用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的常见非标准扩展。