如何判断您的Fortran程序是否已使用OpenMP编译?

Alp*_*a96 2 fortran openmp

我很好奇,如果有一种方法,你的程序已经compuled有说,如果-fopenmp还是-xopenmp等等,然后写些东西到屏幕上说:"正在使用的OpenMP等......",或者如果它已不符合-fopenmp-xopenmp写" OpenMP没有被使用......"

是否有一个标志可用于判断程序是否已使用OpenMP编译或未编译,因此我可以在我的程序中编写一些内容,就像我在下面简要编写的那样?

program main 
  use omp_lib
  implicit none 

  !define other variables here...
  logical :: complied_with_openmp

  if(complied_with_openmp .eqv. .true.) write(6,*) 'OpenMP used...'
  if(complied_with_openmp .eqv. .false.) write(6,*) 'Openmp not used...'

  !some other code here...


end program
Run Code Online (Sandbox Code Playgroud)

Vla*_*r F 7

你的问题很奇怪.你真的不想问你是否正在使用OpenMP进行编译吗?这可以通过使用!$语法来完成.后面!$的语句仅使用OpenMP编译.

 logical :: compiled_with_openmp = .false.

  !$ compiled_with_openmp = .true.

  if (compiled_with_openmp) then
      write(*,*) 'OpenMP used...'
  else
      write(*,*) 'Openmp not used...'
  end if
Run Code Online (Sandbox Code Playgroud)

另外,不要使用单元6,使用*,它更便携,更好.

并且不要将逻辑与.true进行比较.或者.false.,只是做if (condition),做得很if (condition .eqv. .true.)肤浅,甚至是混乱.如果这两个条件实际相反,只需使用if else它们即可.


Hig*_*ark 5

如果您具有符合Fortran 2008的编译器,则可以使用内在函数compiler_options来查找使用了哪些编译器选项;否则,不进行任何操作。它在内部模块中iso_fortran_env。我想如果尚未提供此功能的编译器可能具有确定使用哪些编译器选项的非标准方法。

然后,您可以index用来确定编译器选项是否包含启用OpenMP的标志。在我安装gfortran的表达式中

index(compiler_options(),'openmp')
Run Code Online (Sandbox Code Playgroud)

使用编译代码时,返回非0值-fopenmp

omp_lib提供整数常量,openmp_version以告诉您所使用的版本。为了更准确,它将返回一个整数yyyymm,该整数将解码为OpenMP版本的发行年份和月份,而不是该版本的直接表示形式,例如4.5