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 プログラムを次に示します。2020 年 11 月にリリースされたバージョン 5.1 もカバーしています。
#include <unordered_map>
#include <iostream>
#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"},{201811,"5.0"},{202011,"5.1"}};
std::cout << "We have OpenMP " << map.at(_OPENMP) << ".\n";
return 0;
}
そしてそれをコンパイルします:
g++ -std=c++11 -fopenmp foobar.cpp