今天的 C/C++ 编译器比 15 年或更长时间前要好得多,因为它们现在可以消耗更多的内存和 CPU 周期(仅仅是因为我们现在有更多的可用),同时越来越积极地优化代码。
相比之下,程序员在过去 15 年中几乎没有在他们的头骨中长出第二个大脑,他们的优化能力现在可能与 15 甚至 25 年前大致相同。
与此同时,CPU 变得更加复杂,并且迎合各种缓存、预测机制、更大的寄存器集、推测性和并行执行、更长的管道、资源争用等也变得更加困难。当我们的软件和我们用它解决的问题永远不会停止在规模、数量和复杂性上的增长时,照顾所有的精神负担和规模不佳的事情。然后,新版本的 CPU 通常不仅需要学习新技巧,还需要忘记旧技巧。
此外,您编写汇编代码的效率也不是很高,尤其是当您需要编写大量代码时。并且更难维护和更改汇编代码。出于经济原因,当编译器可以快速完成相当好的工作、腾出时间进行测试并加快周转速度时,您可能并不总是可以选择花费大量金钱和工时来生成高质量的优化汇编代码。
如果你考虑到这一点,如果你在这个行业已经足够长的时间,那么你不需要特别研究来看到大规模优化编译器优于制作优化的汇编代码。
然后人们应该记住,汇编只能给你带来大致线性的性能提升,可能是编译器在困难情况下可以做的 3-5 倍,而选择更具可扩展性的算法可以给你带来更好的提升。因此,对于那些投资于可扩展算法和并行/分布式系统的人来说,投资于寻找或培训汇编程序员并为他们的稀有技能支付大量资金可能要谨慎得多。
说到稀有技能……随着人们越来越多地转向比 C、C++ 和汇编语言更不原始(或者我应该说更少低级?)的语言,你越来越不可能找到能够在这些低级语言中大放异彩的程序员并击败编译器。它们仍然存在,并且总会有一些,但你不应该大规模地指望它们,这几乎只剩下无法击败编译器的程序员。
你可以把这算作一项研究。:)