web-dev-qa-db-ja.com

Linux上のOpenMPのバージョンを確認する方法

LinuxリモートマシンでOpenMPのバージョンを確認する方法を教えてください。

どこにインストールされているかもわかりません。

34
Tim

OpenMPのC/C++仕様では、これをプログラムで直接実行する方法は提供されていないようです。だからあなたはあなたのコンパイラバージョンのドキュメントをチェックする必要があります。

gcc --version ## get compiler version

GCCにとって、これは良いリソースです(GCCの最新バージョンについては触れません): http://gcc.gnu.org/wiki/openmp

GCC 4.2以降、コンパイラーはOpenMP標準のバージョン2.5を実装し、4.4以降ではOpenMP標準のバージョン3.0を実装します。 OpenMP 3.1はGCC 4.7以降でサポートされています。


編集する

もう少し頑張った後、次のように動作しました。少なくともOpenMPのバージョンを示しますが、何かを調べる必要があります。

$ echo |cpp -fopenmp -dM |grep -i open
#define _OPENMP 200805

ここ( http://www.openmp.org/specifications/ )にアクセスして、提供された日付と実際のOpenMPバージョン番号の間のマッピングを見つけることができます。

プリプロセッサーをサポートする実装では、_OPENMPマクロ名は10進値yyyymmを持つように定義されます。yyyyとmmは、実装がサポートするOpenMP APIのバージョンの年と月の指定です。

53
nobar

以下は、OpenMPバージョンを表示する短いC++ 11プログラムです。 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;
}

そしてそれをコンパイルします:

g++ -std=c++11 -fopenmp foobar.cpp
14
user2023370

を使用してgccバージョンを確認する必要があります

gcc --version

次に、以下の(不完全な)表を参照してください(その情報は、OpenMP公式Webサイトの このWiki記事 および このWebページ から収集されます)。

| 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++     |            |

対応する情報が見つからなかったため、空白のエントリがあります。

6
nbro

最初に環境変数を設定 OMP_DISPLAY_ENV :bashで:

export  OMP_DISPLAY_ENV="TRUE" 

またはcshのようなシェル:

setenv OMP_DISPLAY_ENV TRUE

次に、OpenMPプログラムをコンパイルして実行します。

./a.out

次のような追加情報があります。

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

ここで、_OPENMPは8つの10進数値yyyymmを持ちます。ここで、yyyyとmmは、実装がサポートするOpenMP APIのバージョンの年と月の指定です。

2
Adam

OpenMPのドキュメントは大幅に改善されました。 this リンクから、対応するコンパイラーに対応するOpenMPバージョンの詳細情報を見つけることができます。

上記のようにあなたの質問に来ると、最初にgccコンパイラーのバージョンを見つけてから、対応するOpenMPのバージョンを知るために上記のリンクを参照してください。

上記のリンクには、さまざまなコンパイラでサポートされているOpenMPバージョンもあります。

1