应用错误收集 | 您所在的位置:网站首页 › 201511/W020151125491865387384.jpg › 应用错误收集 |
6 个答案:
答案 0 :(得分:47) 似乎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版本。自GCC 4.7以来支持OpenMP 3.1。 修改在尝试了一下之后,我得到了以下工作。它至少给出了OpenMP版本的指示 - 尽管它仍然需要你查找一些东西。 $ echo |cpp -fopenmp -dM |grep -i open #define _OPENMP 200805您可以到此处(http://www.openmp.org/specifications/)发现所提供日期与实际OpenMP版本号之间的映射。 在支持预处理器的实现中,_OPENMP宏名称被定义为具有小数值yyyymm,其中yyyy和mm是实现支持的OpenMP API版本的年和月指定。 答案 1 :(得分:13) 这是一个简短的C ++ 11程序,用于显示您的OpenMP版本;它还涵盖了2015年11月发布的4.5版本。 #include #include #include int main(int argc, char *argv[]) { std::unordered_map 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答案 2 :(得分:4) 您需要使用 检查gcc版本 gcc --version然后查看下面的(不完整)表格(其信息来自this Wiki article和来自OpenMP官方网站的this webpage): | 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++ | |空白条目存在,因为我没有找到相应的信息。 答案 3 :(得分:1) 第一个设置环境变量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个十进制值yyyymm,其中yyyy和mm是实现支持的OpenMP API版本的年和月指定。 答案 4 :(得分:0) OpenMP文档改进了很多。您可以从this链接中找到有关支持的OpenMP版本的相应编译器的更多信息。 谈到您的问题,如上所述,首先找到gcc编译器版本,然后参考上面的链接以了解相应的OpenMP版本。 上面的链接在不同的编译器中也具有受支持的OpenMP版本。 答案 5 :(得分:0) 这是上面user2023370的答案的安全性更高的版本。为简便起见,省略了古代OpenMP版本: #include #include using namespace std; ... fmt::print("OpenMP v{}\n", map{{200805, "3.0"},{201107, "3.1"}, {201307, "4.0"}, {201511, "4.5"}, {201811, "5.0"}}[_OPENMP]);如果遇到新版本号或已损坏的版本号,与使用at()函数成员相反,此语句不会引发异常。 版本号来自https://github.com/jeffhammond/HPCInfo/blob/master/docs/Preprocessor-Macros.md。 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |