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

时间:2018-03-24 15:46:15

标签: fortran openmp

我很好奇是否有方法可以判断您的程序是否已使用-fopenmp-xopenmp等进行了编程,然后在屏幕上写了一些内容,并说明了&, #34;正在使用的OpenMP等......"或者如果在没有-fopenmp-xopenmp写入的情况下编写了#34; 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

2 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:4)

如果您有符合Fortran 2008标准的编译器,则可以使用内部函数compiler_options来查找使用的编译器选项;它在内在模块iso_fortran_env中。我想,那些没有(还)提供这个的编译器可能有非标准的方法来确定使用了哪些编译器选项。

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

index(compiler_options(),'openmp')
使用-fopenmp编译代码时,

返回非0值。

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