如何检查Linux上的OpenMP版本

Tim*_*Tim 30 linux gcc version openmp

我想知道如何检查Linux远程机器上的OpenMP版本?

我也不知道它的安装位置.

nob*_*bar 50

似乎OpenMP的C/C++规范没有提供以编程方式执行此操作的直接方法.因此,您必须检查编译器版本的文档.

gcc --version ## get compiler version
Run Code Online (Sandbox Code Playgroud)

对于GCC来说,这是一个很好的资源(没有提到最新版本的GCC):http://gcc.gnu.org/wiki/openmp:

从GCC 4.2开始,编译器实现了OpenMP标准的2.5版本,从4.4开始,它实现了OpenMP标准的3.0版本.自GCC 4.7以来支持OpenMP 3.1.


编辑

在尝试了一下之后,我得到了以下工作.它至少给出了OpenMP版本的指示 - 尽管它仍然需要你查找一些东西.

$ echo |cpp -fopenmp -dM |grep -i open
#define _OPENMP 200805
Run Code Online (Sandbox Code Playgroud)

您可以访问此处(http://www.openmp.org/specifications/)以查找提供的日期与实际的OpenMP版本号之间的映射.

在支持预处理器的实现中,_OPENMP宏名称被定义为具有小数值yyyymm,其中yyyy和mm是实现支持的OpenMP API版本的年和月指定.

  • 为了快速参考(从http://openmp.org/wp/openmp-specifications/复制),`#define _OPENMP`到OPENMP API版本的映射是`{200505:'2.5',200805:'3.0', 201107:'3.1',201307:'4.0'}`其中每对是'_OPENMP的值:OpenMP API版'. (4认同)
  • "_OPENMP"的另一个版本是{201511:'4.5'}. (2认同)

use*_*370 13

这是一个简短的C++ 11程序来显示您的OpenMP版本; 它还涵盖了2015年11月发布的4.5版本.

#include <unordered_map>
#include <cstdio>
#include <omp.h>

int main(int argc, char *argv[])
{
  std::unordered_map<unsigned,std::string> map{
    {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"}};
  printf("We have OpenMP %s.\n", map.at(_OPENMP).c_str());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

并编译它:

g++ -std=c++11 -fopenmp foobar.cpp
Run Code Online (Sandbox Code Playgroud)


Ada*_*dam 9

首先在 bash 中设置环境变量OMP_DISPLAY_ENV

export  OMP_DISPLAY_ENV="TRUE" 
Run Code Online (Sandbox Code Playgroud)

或在类似 csh 的外壳中:

setenv OMP_DISPLAY_ENV TRUE
Run Code Online (Sandbox Code Playgroud)

然后编译并运行您的 OpenMP 程序:

./a.out
Run Code Online (Sandbox Code Playgroud)

会有额外的信息,比如:

OPENMP DISPLAY ENVIRONMENT BEGIN
  _OPENMP = '201511'
  OMP_DYNAMIC = 'FALSE'
  OMP_NESTED = 'FALSE'
  OMP_NUM_THREADS = '8'
  OMP_SCHEDULE = 'DYNAMIC'
  OMP_PROC_BIND = 'FALSE'
  OMP_PLACES = ''
  OMP_STACKSIZE = '0'
  OMP_WAIT_POLICY = 'PASSIVE'
  OMP_THREAD_LIMIT = '4294967295'
  OMP_MAX_ACTIVE_LEVELS = '2147483647'
  OMP_CANCELLATION = 'FALSE'
  OMP_DEFAULT_DEVICE = '0'
  OMP_MAX_TASK_PRIORITY = '0'
OPENMP DISPLAY ENVIRONMENT END
Run Code Online (Sandbox Code Playgroud)

其中 _OPENMP 具有 8 位十进制值 yyyymm,其中 yyyy 和 mm 是实现支持的 OpenMP API 版本的年份和月份名称。


nbr*_*bro 8

您需要使用检查您的gcc版本

gcc --version
Run Code Online (Sandbox Code Playgroud)

然后查看下面的(不完整的)表格(其信息来自这篇 Wiki 文章和来自OpenMP 官方网站的这个网页):

| gcc version | OpenMP version |    Languages    | Offloading |
|-------------|----------------|-----------------|------------|
|    4.2.0    |       2.5      |        C        |            |
|    4.4.0    |       3.0      |        C        |            |
|    4.7.0    |       3.1      |        C        |            |
|    4.9.0    |       4.0      |      C, C++     |            |
|    4.9.1    |       4.0      | C, C++, Fortran |            |
|      5      |                |                 |     Yes    |
|     6.1     |       4.5      |      C, C++     |            |
Run Code Online (Sandbox Code Playgroud)

空白条目在那里是因为我没有找到相应的信息。