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版本的年和月指定.
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)
首先在 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 版本的年份和月份名称。
您需要使用检查您的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)
空白条目在那里是因为我没有找到相应的信息。