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

Imr*_*ran 5 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
Run Code Online (Sandbox Code Playgroud)

另外,如何使用来自终端的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
Run Code Online (Sandbox Code Playgroud)

ser*_*rvn 2

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

我想不出 MacPorts clang++ 会生成较慢代码的任何具体原因...我会检查您是否传递了类似的命令行选项。会产生很大差异的一件事是,如果您使用一个编译器生成 32 位代码,而使用另一个编译器生成 64 位代码。