编写高效程序需要做到以下几点:第一,我们必须选择一组适当的算法和结构。第二,我们必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。C语言的有些特性,例如执行指针运算和强制类型转换的能力,使得编译器很难对它进行优化。第三,针对处理运算量特别大的计算,将一个任务分成多个部分,这些部分可以在多核和多处理器的某种组合上并行地计算。我们会把这种性能改进的方法推迟到第12章中去讲。
我们描述许多提高代码性能的技术。理想的情况是,编译器能够接受我们编写的任何代码,并产生尽可能高效的、具有指定行为的机器级程序。现代编译器采用了复杂的分析和优化形式,而且变得越来越好。然而,即使是最好的编译器也受到妨碍优化的因素的阻碍,妨碍优化的因素就是程序行为中那些严重依赖于执行环境的方面。程序员必须编写容易优化的代码,以帮助编译器。
程序优化的第一步就是消除不必要的工作,让代码尽可能高效地执行所期望的任务。这包括消除不必要的函数调用、条件测试和内存引用。这些优化不依赖于目标机器的任何具体属性。
为了使程序性能最大化,程序员和编译器都需要一个目标机器的模型,指明如何处理指令,以及各个操作的时序特性。例如,编译器必须知道时序信息,才能够确定是用一条乘法指令,还是用移位和加法的某种组合。现代计算机用复杂的技术来处理机器级程序,并行地执行许多指令,执行顺序还可能不同于它们在程序中出现的顺序。程序员必须理解这些处理器是如何工作的,从而调整他们的程序以获得最大的速度。基于Intel和AMD处理器最近的设计,我们提出了这种机器的一个高级模型。我们还设计了一种图形数据流表示法,可以使处理器对指令的执行形象化,我们还可以利用它预测程序的性能。
了解了处理器的运作,我们就可以进行程序优化的第二步,利用处理器提供的指令级并行能力,同时执行多条指令。我们会讲述几个对程序的变化,降低一个计算的不同部分之间的数据相关,增加并行度,这样就可以同时执行这些部分了。
我们以对优化大型程序的问题的讨论来结束这一章。我们描述了代码剖析程序的使用,代码剖析程序是测量程序各个部分性能的工具。这种分析能够帮助找到代码中低效率的地方,并确定程序中我们应该着重优化的部分。
标签:计算机系统,代码,程序,笔记,编译器,第五章,指令,执行,优化 From: https://www.cnblogs.com/jixuxiangqian/p/17355166.html