c++ - 为什么我使用 XCode 的 llvm 与来自 MacPorts 的 clang++ 获得更快的二进制文件?

标签 c++ xcode llvm

我已经编写了一个基准测试方法来测试我的 C++ 程序(搜索游戏树),并且我注意到使用 XCode 4.0.2 中的“LLVM 编译器 2.0”选项进行编译可以使我的二进制文件速度明显快于我使用来自 MacPorts 的最新版本的 clang++ 进行编译。

如果我理解正确的话,我在这两种情况下都使用了 clang 前端和 llvm 后端。 Apple 是否改进了他们的 clang/llvm 发行版以生成更快的 Mac OS 二进制文件?我找不到有关该项目的太多信息。

以下是我的程序为各种编译器生成的基准,全部使用 -O3 优化(越高越好):

(Xcode) "gcc 4.2": 38.7
(Xcode) "llvm gcc 4.2": 51.2
(Xcode) "llvm compiler 2.0": 50.6
g++-mp-4.6: 43.4
clang++: 40.6

此外,如何使用终端使用的 clang/llvm XCode 进行编译?我找不到命令。

编辑:我输出的分数是“每秒数千场比赛”,这是在足够长时间的程序运行中计算得出的。多次运行的分数非常一致,例如,最近的主要算法改进使我的速度提高了 1% - 5%。 40 到 50 的 25% 加速对我的程序来说是巨大的。

更新:我没有使用 -flto 从命令行调用 clang++。现在,当我从命令行比较 clang++ -O3 -flto 与/Developer/usr/bin/clang++ -O3 -flto 时,结果更接近,但 Apple 仍然快 6.5%。

现在如何为 gcc 启用链接时间优化?当我尝试 g++ -flto 时,出现以下错误:

cc1plus: error: LTO support has not been enabled in this configuration

最佳答案

Apple LLVM 编译器应该在/Developer/usr/bin/clang 下可用。

我想不出 MacPorts clang++ 会生成较慢代码的任何特定原因……我会检查您是否传递了可比较的命令行选项。如果您使用一种编译器生成 32 位代码,而使用另一种编译器生成 64 位代码,那将产生很大的不同。

关于c++ - 为什么我使用 XCode 的 llvm 与来自 MacPorts 的 clang++ 获得更快的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346213/

相关文章:

c++ - 从 C++ 调用 Fortran 子例程,链接时 undefined reference

C++ 2D 矩阵迭代器与嵌套 for 循环的效率比较

llvm - LLVM 的整数溢出捕获?

llvm - pypy 在浏览器中?

c++ - 为什么 llvm::Module 存储在 unique_ptr 中?

c++ - 如何使函数中的引用参数可选(可选缓冲区)

C++ 函数指针数组错误

ios - 将 iPhone 应用程序连接到接入点

ios - Glance 将不再出现 - 没有与 App 关联的 glance

xcode - 是否有快捷方式在 Xcode 中搜索光标下的单词?