在 Mac 上使用 Clang/LLVM 加速和优化 C++ 程序

问题描述 投票:0回答:1

好的,这是我的问题:

  • 我正在开发一个超级复杂的项目,速度和性能至关重要 - 有很多麻烦和低级的东西(你可以问我是否有什么具体的事情你需要知道)
  • 我使用的是Mac
  • 我正在使用 clang++
  • 编译和链接它

Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)

我当前使用的所有优化标志都是

-O3
(老实说,这给了我意想不到的提升;所以我没有再进一步看;但是我仍然注意到其他程序使用各种标志......所以我感觉有点失落...)。

还有什么我应该考虑的吗?如果是这样,那又怎样?


编辑:(尝试使用

-O4
,但出现错误;知道为什么会发生这种情况吗?)

0  0x10be24280  __assert_rtn + 144
1  0x10be89659  ld::tool::HeaderAndLoadCommandsAtom<x86_64>::copyEntryPointLoadCommand(unsigned char*) const + 169
2  0x10be8853c  ld::tool::HeaderAndLoadCommandsAtom<x86_64>::copyRawContent(unsigned char*) const + 1084
3  0x10be7da56  ld::tool::OutputFile::writeAtoms(ld::Internal&, unsigned char*) + 598
4  0x10be79c14  ld::tool::OutputFile::writeOutputFile(ld::Internal&) + 564
5  0x10be74963  ld::tool::OutputFile::write(ld::Internal&) + 147
6  0x10be248ef  main + 1263
7  0x10be13234  start + 52
A linker snapshot was created at:
    /tmp/myapp-2013-00-31-150316.ld-snapshot
ld: Assertion failed: (_mode == modeFinalAddress), function finalAddress, file /SourceCache/ld64/ld64-133.3/src/ld/ld.hpp, line 657.
clang: error: linker command failed with exit code 1 (use -v to see invocation)
c++ performance optimization llvm
1个回答
0
投票

在做了明显的事情之后(编译选项:O3、lto 并且不使用任何调试标志),以下是我加速程序的步骤:

1) 简介。分析后,您将知道需要查看哪些部分/模块。

2) 仪器/基准。在关键部分周围放置一些计时代码。

3)实际尝试更改您的代码,看看它是变慢还是变快。 最大的罪魁祸首:糟糕的算法或数据结构;过度使用 malloc/new。

© www.soinside.com 2019 - 2024. All rights reserved.