章节总结

CPU 前端优化总结见表 @tbl:CPU_FE_OPT

转换 如何转换? 为什么有用? 最适合于 由谁完成
基本块放置
(Basic block placement)
维护热点代码 未取分支更便宜;更好的缓存利用率 任何代码,尤其是具有大量分支的代码 编译器
基本块对齐
(Basic block alignment)
使用 NOPS 对齐移动热点代码 更好的缓存利用率 热循环 编译器
函数拆分
(Function splitting)
将冷代码块拆分并放置在单独的函数中 更好的缓存利用率 具有复杂 CFG 的函数,当热部分之间有大块冷代码时 编译器
函数重新排序
(Function reorder))
将热点函数分组在一起 更好的缓存利用率 许多小型热点函数 链接器

表:CPU 前端优化总结。

  • 代码布局改进经常被低估,最终被忽略和遗忘。CPU 前端性能问题,例如 I-cache 和 ITLB 未命中,浪费了大量周期,尤其是对于具有大型代码库的应用程序。但即使是小型和中型应用程序也可以从优化机器代码布局中受益。
  • 当开发人员试图改善应用程序性能时,他们通常不会首先关注它。他们更喜欢从低垂的果实开始,例如循环展开和向量化。然而,要知道仅仅通过更好的机器代码布局,您就可能获得额外的 5-10%,这仍然很有用。
  • 如果您可以为您的应用程序制定一套典型用例,则通常最好使用 LTO、PGO、BOLT 和其他工具。对于大型应用程序,它是改善机器代码布局的唯一实用方法。

results matching ""

    No results matching ""