通过完全理解现代 pc 架构,是否有可能获得比编译器更好的性能?

김도영*_*김도영 1 performance assembly compiler-optimization

我知道现在很多编译器都非常擅长优化代码。但是,如果一个完全理解现代pc架构的人,是否有可能使代码比编译器更快?比如,如果他用 100% 的汇编编写代码,专注于架构呢?如果它确实有所作为,是否值得?

Jér*_*ard 8

是的!一个有经验的开发人员可以清楚地击败一个编译器特定的任务(赋予相对大量的时间)。

一个原因是开发人员可以获得比编译器更多的关于给定任务的信息(开发人员可以试验算法,获得有关数据大小、可能的输入、程序执行上下文的信息)。另一个原因是编译器并不完美(它们使用启发式算法)并且经常无法进行高级代码转换。

然而,通常只向编译器提供提示、调整编译参数、插入内联汇编或内置调用就足够了,而不是用汇编编写完整的程序。

一个很好的例子是使用低级处理器指令,例如非临时指令SIMD 指令以及按位指令。这些指令通常可以从带有足够提示的编译器中生成。在寄存器分配的情况下,目标硬件的专家可以设计出更好的汇编代码(在这种情况下,编译器提示是不够的)。