代码之家  ›  专栏  ›  技术社区  ›  AlphaBetaGamma96

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

  •  3
  • AlphaBetaGamma96  · 技术社区  · 7 年前

    我很好奇是否有办法判断你的程序是否被 -fopenmp -xopenmp 然后在屏幕上写下“正在使用OpenMP等…”或者如果没有 -fopenmp公司 -xopenmp 写入“未使用OpenMP…”

    是否有一个标志可以用来告诉程序是用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 回复  |  直到 7 年前
        1
  •  8
  •   Vladimir 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
    

    另外,不要使用第六单元,使用 * ,它更轻便、更好。

    不要将逻辑与进行比较。是的。或错误。,就这么做吧 if (condition) ,正在执行 if (condition .eqv. .true.) 是肤浅的,甚至是令人困惑的。如果这两个条件实际上相反,只需使用 if else 加入他们。

        2
  •  5
  •   High Performance Mark    7 年前

    如果您有与Fortran 2008兼容的编译器,则可以使用内部函数 compiler_options 找出使用了哪些编译器选项;它在内部模块中 iso_fortran_env 。我想,尚未提供这种功能的编译器可能有非标准的方法来确定使用了哪些编译器选项。

    然后您可以使用 index 确定编译器选项是否包含启用OpenMP的标志。在我安装gfortran时

    index(compiler_options(),'openmp')
    

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

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