微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用处理器标志编译 C++ 代码会使代码变慢英特尔编译器

如何解决使用处理器标志编译 C++ 代码会使代码变慢英特尔编译器

我正在做一些分析,性能对我很重要(甚至 5%)。处理器是 Frontera 上的 Intel Xeon Platinum 8280(“Cascade Lake”)。我在发布模式下使用 -Ofast 标志编译我的代码。当我添加 -march=cascadelake 时,我的测试用例中的时间变得更糟(5-6%)。如果使用 -xcore-AVX512 而不是 march 也是如此。我正在使用 icpc 19.1.1.217。任何人都可以请解释为什么?另外,您建议使用哪些编译标志以获得更好的性能

编辑 1: 我正在求解一个线性系统,它由不同的运算组成,例如点积和矩阵向量积。因此,我很难提供可重现的代码,但我可以说我的代码中有多个循环,编译器可以应用自动矢量化。我在代码中的关键循环中使用了英特尔优化报告,并且报告提到它们的潜在加速至少为 1.75(对于某些循环,潜在加速超过 5 倍)。 我还使用了aligned_alloc(64,size) 来分配具有64 位对齐的对齐内存,因为该处理器支持AVX512。另外,我将大小四舍五入为 64 的倍数。

我在我的代码添加了 OpenMP 支持并并行化了一些循环,但是对于我报告的这些实验,我只使用了 1 个 OpenMP 线程。

我试过 -mavx2,结果和 -xcore-AVX512 一样。 我使用了 -O3 而不是 -Ofast。我没有得到任何加速。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。