【发布时间】:2020-11-08 21:48:38
【问题描述】:
我知道现在很多编译器都非常擅长优化代码。但是,如果一个人完全理解现代 pc 架构,是否有可能让代码比编译器更快? 比如,如果他用 100% 的汇编编写代码,专注于架构呢?如果它确实有所作为,是否值得?
【问题讨论】:
-
有时是可能的。但是,这非常困难。击败编译器的最好方法是改进程序,而不是通过优化汇编来追求性能上的微小提升。
-
是的,但今天了解很多不仅仅是处理器,处理器之外的东西对性能起着重要作用。整个系统的详细文档,包括在 x86 上的经验都不是现成的。
-
由于 pc (x86) 世界/历史的性质,使在您的机器上运行良好的代码在另一台机器上可能/将会变慢。对于 x86,您希望获得一个没有针对特定系统或系列调整的良好通用平均值。
-
不难找到可以出于各种原因改进编译器输出的地方。因此,获取编译器输出并使其“更好”并不需要太多工作。
-
是的,C++ code for testing the Collatz conjecture faster than hand-written assembly - why? 有一节介绍如何为那个小循环击败编译器。改进需要数小时/数天的人力(相对于编译器需要几秒钟),并进行基准测试以验证它是否是真正的改进,并且在实践中使用 asm 非常不方便,因此很少这样做。
标签: performance assembly compiler-optimization