应用错误收集 您所在的位置:网站首页 201511/W020151125491865387384.jpg 应用错误收集

应用错误收集

2023-02-08 07:58| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有