LinuxリモートマシンでOpenMPのバージョンを確認する方法を教えてください。
どこにインストールされているかもわかりません。
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のバージョンの年と月の指定です。
以下は、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
を使用して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++ | |
対応する情報が見つからなかったため、空白のエントリがあります。
最初に環境変数を設定 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のバージョンの年と月の指定です。
OpenMPのドキュメントは大幅に改善されました。 this リンクから、対応するコンパイラーに対応するOpenMPバージョンの詳細情報を見つけることができます。
上記のようにあなたの質問に来ると、最初にgccコンパイラーのバージョンを見つけてから、対応するOpenMPのバージョンを知るために上記のリンクを参照してください。
上記のリンクには、さまざまなコンパイラでサポートされているOpenMPバージョンもあります。