编译器代码生成 - 我们如何知道它是高质量的?

joh*_*und 3 assembly compiler-optimization

现在常见的口头禅是:"C/C++编译器生成的代码比手写汇编更好." 或者"编译器生成的代码与手工编写的代码一样好并且通常更好."

但我们怎么知道这是真的呢?有关HLL编译器代码质量的一些有价值的研究吗?我想读一些关于这个主题的着作,不仅是C/C++,还有其他语言.

谢谢

编辑:我要求不讨论这个问题,也不要求个人意见或想法.我问引用到有关学科的研究.这些研究肯定必须包含一些可以验证的关于该主题的实验或理论工作.

如果您没有这些信息,请不要回答这个问题.我已经知道你对这个问题的所有看法.

Ale*_*nze 6

今天的C/C++编译器比15年或更久以前要好得多,因为它们现在可以消耗更多内存和CPU周期(仅仅因为我们现在有更多可用内存),同时更加积极地优化代码.

相比之下,程序员在过去的15年里几乎没有在他们的头骨中长出第二个大脑,他们的优化能力现在可能保持在与15年甚至25年前相同的水平.

同时,CPU变得更加复杂,并且适应各种缓存,预测机制,更大的寄存器集,推测和并行执行,更长的流水线,资源争用等等也变得更加困难.当我们用它解决的软件和问题从未停止在规模,数量和复杂性方面的增长时,照顾所有精神上的税收并且规模很小.然后,新版本的CPU通常不仅需要学习新技巧,还需要学习旧技巧.

此外,编写汇编代码的效率也不高,尤其是当您需要编写大量代码时.并且维护和更改汇编代码更加困难.出于经济原因,当编译器可以快速完成相当不错的工作时,您可能无法总是花费大量金钱和工时来生成高质量的优化汇编代码,从而节省测试时间并加快周转速度.

如果你考虑到这一点,如果你已经在这个行业足够长的时间,那么你不需要特殊的研究就可以看到大规模的优化编译器优于制作优化的汇编代码.

然后应该记住,汇编只能给你一个大致线性的性能提升,可能是编译器在困难情况下可以做的3-5倍,而选择更具伸缩性的算法可以给你更好的提升.因此,对于那些投资可扩展算法和并行/分布式系统而不是寻找或培训汇编程序员并为稀有技能支付大量资金可能是非常谨慎的.

谈到这种罕见的技巧......随着人们越来越多地转向不那么原始(或者我应该说低级别?)语言而不是C,C++和汇编语言,你找不到那些可以用这些低级语言发光的程序员并击败编译器.它们仍然存在并且总会存在一些,但是你不应该大规模地依赖它们,这使得你几乎只有那些无法击败编译器的程序员.

你可以把它算作一项研究.:)

  • 你好,约翰!如果编译器生成更好的代码,我们只需窃取编译器的代码.如果我们能够击败它,我们就能做到.编译器可以做的最好的是收支平衡! (6认同)
  • 我不能接受这个作为一项研究,因为显而易见的原因 - 没有事实和证据,或至少有一些参考.只有一般会谈. (3认同)