【问题标题】:run LLVM opt hotcoldsplit issue运行 LLVM opt hotcoldsplit 问题
【发布时间】:2020-07-14 13:27:32
【问题描述】:

热冷拆分是 LLVM 中代码优化的有效方法。 此内置 LLVM 通行证位于:

/llvm/lib/Transforms/IPO/HotColdSplitting.cpp

实际上,我想用这个 pass 来优化我的代码,但是我没有找到任何关于如何使用这个内置 pass 来优化我的代码的文档。

我已经知道我应该使用 LLVM opt 命令来加载 pass,但我没有找到在我的程序上应用此优化 pass 的正确方法。

到目前为止我有两个问题:

1) 如何正确使用 opt 加载此 pass 以优化我的代码 2) 我可以直接在 clang 上使用这个传递来优化 C/C++ 代码作为开关,例如适用于底层编译程序的 -fsanitize=address 吗?

谢谢。

【问题讨论】:

    标签: optimization llvm llvm-clang llvm-ir llvm-c++-api


    【解决方案1】:

    热冷拆分可用于优化应用的启动性能,以及某些情况下的运行时性能。要启用热冷拆分优化,您可以使用 -mllvm -hot-cold-split 将标志传递给 llvm。

    在存在配置文件数据的情况下,热冷拆分可提供最佳性能改进。尽管它确实使用内置静态分析优化了没有配置文件数据的应用程序。例如:catch 块,已知非返回函数是冷的。热冷分裂使用这些信息。

    目前没有来自 clang 前端的直接标志来启用此功能,因此您必须使用 -mllvm -hot-cold-split。有关冷热拆分的更多详细信息,请参阅 llvm-dev 上的 youtube 视频,内容丰富:https://www.youtube.com/watch?v=Q8rqGg6vHAE

    【讨论】:

    • 这是否意味着要使用 Clang 编译项目,我应该将 -mllvm -hot-cold-split 指定给 CFLAGS/CXXFLAGS ?我试过这个,但它似乎不是在整个编译过程中使用 hot-cold-split 的正确方法。有什么想法吗?
    • 至少目前是正确的方法,因为我们没有用于热冷分裂 IIRC 的前端标志。
    【解决方案2】:

    您可以将-mllvm -hot-cold-split=true 标志传递给clang,这将在编译文件时在优化器中启用热/冷拆分通道。

    是的,原则上您可以直接使用此通行证(截至回答问题时); LLVM 中的热/冷拆分,以其当前形式,仅针对代码大小进行优化。或者,您可能想尝试首先通过 PGO 收集分析数据,然后将分析数据输入到 clang 中,以便它在构建期间利用分析信息(这可能有助于在性能方面进行热/冷分离)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 2020-09-06
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多