c++ - clang osx march=native 没有优化的大约 1/3rd 速度

标签 c++ c++11

我有一个项目,其中速度是最重要的,所以正在试验编译器标志以尝试获得一些免费性能。我有两个相同的构建,除了构建 2 中的附加标志 march=native。

为了完整性,标志是:

A) -std=c++14 -g -fno-omit-frame-pointer -O3

B) -std=c++14 -g -fno-omit-frame-pointer -O3 -march-native

在这些构建上运行基准测试会产生令人困惑的结果:

A) 61s

B) 160s

这里可能发生了什么?

最佳答案

使用 -march=native 优化当前 cpu 的代码。大多数时候,它会提高执行速度。有时它可能无法生成最快的代码,因为它启用了某些 CPU 指令。

echo | clang -E - -march=native -###

将显示 clang 通过 -march=native 启用的内容。最有可能的罪魁祸首是 CMOV,它由 -march=native 启用。你可以在这个问题的答案中看到为什么这可能会减慢速度的解释:gcc optimization flag -O3 makes code slower than -O2 .

关于c++ - clang osx march=native 没有优化的大约 1/3rd 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37513675/

相关文章:

c - 有什么干净的方法可以让 OpenMP pragmas 与宏一起工作?

c++ - 实际上,C++11 中 std::atomic 的内存占用是多少?

c++ - 如何在没有智能指针的情况下防止双重删除?

c++ - Mac 上 Qt Creator 中的 openCV

c++ - 将对象转换为 vector 的 const_iterator

C++ 11 STL合并使用2个 map 之间的移动分配

c++ - 为类型列表创建别名并将其作为模板参数传递

c++ - 自定义异常中的损坏消息

c++ - 带有选项卡式窗口和分隔线的 Source Insight 类型编辑器?

带有记录 : string at beginning 的 C++ 二进制文件