星期日, 十月 08, 2006

两种有关编译优化的观点

编绎优化一直都存在两种争论:

一种认为,编译优化应当由编译器能做,程序员不应当管。因为编译器几乎者是由专家编写研究出来的,专家对于怎么优化程序比普通的程序员现然更有见解。程序员不可能个个是专家,与其让不太精通的程序员去优化,不如让专家的编译器来优化。而且一个高性能的编译优化器能对它所编译的所有程序进行优化,而这些程序不一定也不可能都是由相当出色的程序员完成的。再者,按现在软件工程的要求,程序源代码的可读性被放在相当重要的位置,这当然也在很大程度上限制了程序员能对其进行的优化。当然,表面上看一种接合良好的方案是编译器提供足够多的预编译指令,让程序员有能力指导编译器进行优化,但这使得编译器的设计复杂度大大增加,而且不通此道的程序员很可能是“瞎指挥”反倒使编译器的优化品质下降。

另外一种观点认为,编译优化应当尽可能多的由程序员优化代码完成。因为无法保证每个编译器都能提供足够强劲的最优化指令,有些甚至在产生最优化指令时会因最优化玩得过火而出错(现在的gcc中就有一个很著名的bug,因为优化而导致程序执行出错)。而一旦最优化指令出错,对于程序员来说几乎是灾难性后果。因为检查、排错最优化后的二进制代码远比对源代码进行相应的操作麻烦。另外产生高性能的最优化编译器难度很大,有时候这种开发代价高于它产生的实际价值。

对于我个人来说,我是比较倾向于第二种看法:程序员应当从自身做起尽可能的优化自己的程序,这样才能有信心在任何编译平台上都能取得较高的性能。

没有评论: