1.1.3 你能从本书中学到什么
成功的程序员总是关注程序的性能,因为让用户快速获得结果对于软件的成功而言至关重要。20世纪六七十年代,限制计算机性能的主要因素是计算机的内存容量。因此,当时的程序员经常遵循一个简单的信条:尽量减少程序占用的内存空间以加速程序运行。近20年以来,计算机设计和存储器技术有了显著进步,除了嵌入式计算系统以外,大多数应用系统中内存容量对计算机性能的影响已大大降低了。
现在,关心性能的程序员应该非常明确,20世纪60年代的简单存储模型已经不复存在,现代计算机的特征是处理器的并行性和存储的层次性。我们将在第3章至第6章中展示如何将C程序的性能提高200倍,从而阐释这一理解的重要性。此外,正如我们在1.7节中所阐述的,当今程序员需要考虑在个人移动设备或云上程序运行的能效,这就要求他们了解代码之下的诸多细节。因此,为了创造有竞争力的软件,程序员必须加强对计算机组成的认知。
我们很荣幸有机会解释这个革命性的计算机器中的内容,并阐明程序之下的软件以及机箱覆盖下的硬件是如何工作的。在你读完这本书的时候,我们相信你能够回答以下问题:
• 用C或Java等高级语言编写的程序如何被翻译成机器语言,以及硬件如何执行最终的程序?这些概念是理解软硬件如何影响程序性能的基础。
• 软件和硬件之间的接口是什么?软件如何指导硬件执行所需的功能?这些概念对于理解如何编写软件是至关重要的。
• 什么因素决定了程序的性能,以及程序员如何改进程序性能?我们将从本书知道,这取决于原始程序、将该程序转换成计算机语言的软件以及硬件执行该程序的有效性。
• 硬件设计人员可以使用哪些技术来提高性能?本书将介绍现代计算机设计的基本概念。感兴趣的读者可以在我们的进阶教材《计算机体系结构:量化研究方法》中找到更多关于此主题的内容。
• 硬件设计人员可以使用哪些技术来改善能效?程序员可以做些什么来改变能效?
• 串行处理发展到并行处理的原因和结果是什么?本书给出了这一发展变化的动机,描述了当前支持并行的硬件机制,并评述了新一代“多核”微处理器(见第6章)。
多核微处理器:在单个集成电路中包含多个处理器(“核”)的微处理器。
• 自1951年第一台商用计算机诞生以来,计算机架构师提出的哪些伟大思想奠定了现代计算技术的基础?
如果不了解这些问题的答案,那么要在现代计算机上改进程序性能,或者要评估不同计算机解决特定问题的优劣,都将是一个复杂的反复试验过程而非一个深入分析的科学过程。
第1章为本书的其余章节奠定基础。其中介绍了基本概念和定义,对软件和硬件的主要组成部分进行了剖析,展示了如何评估性能和功耗,介绍了集成电路(推动计算机革命的技术),并在最后解释了技术向多核转变的原因。
在本章及后面的章节中,读者可能会看到很多新的术语,或者可能听到过但不确定确切含义的术语。请不要惊慌或担心!在描述现代计算机时,确实会使用许多专用术语,这使我们能够精确地描述计算机的功能或性能。此外,计算机设计师(包括本书作者)喜欢使用首字母缩略词,一旦知道这些字母代表的是什么,就很容易理解了。为了帮助读者记住和理解这些术语,在术语第一次出现的时候,本书将给出明确定义。经过与术语的短时间接触,你将会熟练掌握它们,而且你的朋友也将对你正确使用BIOS、CPU、DIMM、DRAM、PCIe、SATA等许多缩略词印象深刻。
首字母缩略词:通过提取一串单词的首字母构成的单词。例如:RAM是随机存取存储单元(Random Access Memory)的首字母缩略词,CPU是中央处理单元(Central Processing Unit)的首字母缩略词。
为了加强对程序运行时如何应用软件和硬件以影响性能的理解,我们安排了贯穿整书的专门模块“理解程序性能”,概括对程序性能的重要理解。下面就是第一个。
理解程序性能 程序的性能取决于以下各因素的组合:程序中所用算法的有效性,用来创建程序和将其翻译为机器指令的软件系统,计算机执行这些机器指令(可能包括输入/输出操作)时的有效性。下表总结了软件和硬件是如何影响程序性能的。
自我检测 “自我检测”部分旨在帮助读者评估自己是否理解一章中介绍的主要概念并理解这些概念的含义。其中一些问题的答案比较简单,另外一些问题则适用于小组讨论。在本章最后可以找到一些具体问题的答案。“自我检测”只出现在章节末,如果你确定自己完全理解了该章节的内容,则可以跳过该部分。
1.每年嵌入式处理器的销售数量远远超过PC处理器甚至后PC处理器的数量。根据自己的经验,你支持还是反对这种看法?尝试列举你家中的嵌入式处理器。它与你家中传统计算机的数量相比如何?
2.如前所述,软件和硬件都会影响程序的性能。请思考以下哪个例子属于性能瓶颈。
• 所选算法
• 编程语言或编译器
• 操作系统
• 处理器
• I/O系统和设备