用于个人使用的计算机,通常包括图形显示器、键盘和鼠标等。
摩尔定律是指单芯片上的集成度每18~24个月翻一番,此定律是由Intel的创始人之一的Gordon Moore 在1965年对集成电路集成度做出的预测。
几十年来一直按此规律进行,虽然近些年来不太适用。但此定律却说明了计算机计算性能的飞速进步。
由于计算机设计需要几年时间,因此在项目结束时,单芯片的集成度相对于设计开始时很容易翻一番甚至翻两番。
计算机架构师和程序员必须发明能够提高产量的技术,否则设计时间也将会像资源规模一样按照摩尔定律增长。提高硬件和软件生产率的主要技术之一是使用抽象来表示不同设计层次,在高层次中 看不到低层次的细节,只能看到一个简化的模型。
大概率事件通常比小概率事件简单,从而易于提高。大概率事件规则意味着设计者需要知道什么事件是经常发现的,这只有通过仔细的裕与评估才能得出。可以把加速大概率事想象成一辆赛车,由于通常情况下只有一两名乘客,因此提高赛车的速度要比提高小型货车的速度容易
从计算的诞生开始,计算机设计者就通过并行(parallel)执行操作来提高性能。
在计算机系统结构中,一个特别的并行性场景就是流水线,例如许多西部片中,一些坏人在制造火灾,在消防车出现之前会有一个“消防队列”来灭火—小镇的居民们排成一排通过水桶接力快速将水桶从水源传至火场,而不是每个人都来回奔跑。可以把流水线想象成一系列水管,其中每一块代表一个流水级。隐含分层思想,将工作细化,专人专事。
遵循谚语“求人准许不如求人原谅”,最后一个传大的思想就是预测。在某些情况下,如果假定从误预测恢复执行代价不高并且预测的准确率相对较高,则通过猜测的方式提前开始某些操作,要比等到确切知道这些操作应该启动时才开始要快一些。
存储器的速度通过影响性能,通过分层来解决相互矛盾的需求
计算机不仅需要速度快,还需要工作可靠。由于任何一个物理器件都可能失效,因此可以通过使用冗余部件的方式提高系统的可靠性,冗余部件可以替代失效部件并可以帮助检测错误。
我们知道计算机中的硬件只能执行极为简单的低级指令。
而一个典型的程序,比如字处理程序或者大型数据库处理系统,可由数百万代码构成,依靠软件库来实现异常复杂的功能。
因此从从复杂的应用程序到简单的指令需要经过几个软件层次来将复杂的高层次逐步解释或翻译成简单的计算机命令。
这些程序软件的层次结构,外层是应用软件,中心是硬件是硬件,系统软件位于两者之间。
系统软件:提供常用服务的软件,包括操作系统、编译程序、加载程序和汇编程序等。
在复杂的应用中,通常存在多层应用软件层。
例如:
一个数据库系统可运行于系统软件之上,而驻留在该系统上的某应用反过来又运行在该数据库上。
操作系统(operating system):为了使程序更好地在计算机上运行而管理计算机资源的监控程序。
编译程序(compiler):把高级语言编写的程序翻译成硬件能执行的指令。翻译过程相当复杂,简要介绍。
电子硬件传递信号的方式是通过电信号的发送。因此对于计算机来说,最简单的信号就是“通”与“断”,只用2个符号“1”与“0”来表示,每一个符号就是二进制元数字中的一个二进制位(binary digit)或一位(bit)。
二进制位:基数为2的数字中的0或1,它是信息的基本组成。
指令:计算机硬件所能理解并服从的命令。
由此第一代的程序员就直接使用二进制数与计算机通信,但是这是一项及其枯燥的工作,所以设计人员开发了一种称为汇编程序的软件。
汇编程序:将指令由助记符形式翻译成二进制的程序。
例如:
add A,B
汇编程序会将其翻译成:
1000110010100000
这一种语言即汇编语言。而机器可以理解的二进制语言为机器语言。
汇编语言:以助记符形式表示的机器指令。
机器语言:以二进制元形式表示的机器指令。
但是汇编语言还是要求程序员像计算机一样思考。生产率低。
设计人员开始认识到编写一个程序来将更强大的高级语言翻译成计算机指令,即高级编程语言。
高级语言及其编译程序极大的提高了生产效率。
简单的例子说明之间的关系。
高级编程语言:如C\C++\JAVA\Visual Basic等可移植的语言,由一些单词和代数符号组成,可以由编译器转化为汇编语言。
高级应用程序(使用c语言)
swap(int v[],int k)
{
int temp;
temp=v[k];
v[k]=v[k+1];
v[k+1]=temp;
}
编译后
汇编语言程序(MIPS指令集)
swap:
multi $2, $5,4
add $2, $4,$2
lw $15, 0($2)
lw $16, 4($2)
sw $16, 0($2)
sw $15, 4($2)
jw $31
汇编后
二进制机器语言程序(MIPS指令集)
计算机的基础硬件的基本功能:输入数据、输出数据、处理数据和存储数据。
输入数据:为计算机提供信息的装置。如键盘、鼠标。
输出数据:将计算结果输出到用户或其他计算机装置。如显示器。
液晶显示:用液体聚合物薄层的带电或者不带电来传输或者阻止光线的传播。
动态矩阵显示:液晶显示技术。
像素:图像元素的最小单元。屏幕由成千上万的像素组成的矩阵而形成。
集成电路(芯片):将几十个至几百万个晶体管连接起来的设备。
中央处理器单元:数据通路和控制器,能将数字相加,测试结果。
数据通路:处理器执行算数的部分。
控制器:指令指挥数据通路、存储器、和输入、输出设备的部分。
内存:程序运行时的存储空间,同时存储程序运行时需要的数据。
DRAM:动态随机访问存储器,集成电路形式的存储器,可随机访问任何地址的内存。
缓存:小而快的存储器。一般作为大而慢的存储器的缓存。
静态随机访问存储器:一种集成电路形式的存储器。
指令集体系结构(体系结构):低层次软件和硬件之间的抽象接口。
应用二进制接口:用户部分指令加上应用程序员调用的操作系统接口,定义了二进制层次可移植的计算机标准。
实现:遵循体系结构抽象的硬件。
易失性存储器:仅在加电时保存数据。
非易失性存储器:在掉电时依然可以保持数据的存储器,用于存储运行之间的程序,如DVD.
主存储器:用来保存运行中的程序。
二级存储器:非易失性存储器,用来保存两次运行之间的程序和数据。
磁盘:也叫硬盘。
内存:一种非易失性半导体内存,价格比磁盘高,速度比磁盘快。
除了上面所说的经典部件还有一项不可缺少的功能:计算机网络。
局域网:一种在一定地理区域(如一栋大楼里)使用的传输数据的网络。
广域网:一种可将区域扩展到几百千米范围的网络。
晶体管:一种由电信号控制的简单开关。
集成电路是由成千上万个晶体管组成的芯片。
摩尔定律引用“超大规模”术语中,即超大规模集成电路。
超大规模集成电路:由数十万到数百万晶体管组成的电路。
要了解集成电路的制作过程,首先知道原材料硅的特性。
硅:一种自然因素,半导体。
半导体:一种导电性能不好的物质。
用特殊的化学方法对硅添加某些材料,可以将把细微的区域转变成三种类型之一。
芯片制造的全过程:
硅锭:一块由硅晶体组成的棒。
晶圆:厚度不超过0.1英寸的硅锭片,用来制作芯片。
但是在晶圆中或是在图样化的几十个步骤中出现一个细微的瑕疵就会使其附近的电路损坏,这些瑕疵使得制造一个完美的晶圆几乎是不可能的。
有几种策略可以解决这一问题。
这一个量化过程描述可以用成品率来表示。
瑕疵:晶圆上一个微小的缺陷,在图样化中因为包含这个缺陷而导致芯片失效。
芯片:从晶圆中切割出来的一个单独的矩形空间。
成品率:合格芯片数占总芯片数的百分比。
集成电路成品取决于成品率以及芯片和晶圆的体积,与芯片面积之间的关系一般不是线性。
如果你在两台不同的计算机运行相同的程序,首先完成任务的计算机就更快。
但如果你运行的是一个数据中心,有几台服务器提供用户投放作业,那应该是一天内完成作业最多的那台计算机快。
所以不同使用途径对性能的要求也不一样
个人用户计算机会对降低响应时间有大的要求。
数据中心更多关注吞吐率。
响应时间:
吞吐率:
一般来说,降低响应时间几乎都可以增加吞吐率。
但是当需要处理更多任务时,系统可能需要令后续请求排队。
在这种情况下,随着吞吐率的增加,可同时改进响应时间,因为缩小了排队等候的时间。
因此实际计算机中,响应时间和吞吐率往往相互影响。
使性能最大化方法:
希望任务的响应时间或执行时间最小化。
1.增加性能
2.降低执行时间
表达式:
性能 = 1 / 执行时间
见PDF 22页最下面
如果计算机A运行一个程序只需要10秒,而计算机B运行同样的程序需要15秒,那么计算机A比计算机B快多少?
答:我们知道,如果
性能A/性能B=执行时间B/执行时间A=n
则计算机A的执行速度是计算机B的n倍,故性能之比为
15/10=1.5
因此A的执行速度是计算机B的1.5倍
在以上的例子中,我们可以说,计算机B比计算机A慢1/3 因为
性能A/性能B = 1.5
意味着
性能A/1.5 = 性能B
计算机在运行程序所需的时间要与一般的响应时间区分开。
我们可以使用CPU执行时间,表示在CPU上花费的时间,不包括等待I/O或运行其他程序的时间。
(用户所感受到的是程序响应时间,而不是CPU时间)
CPU执行时间可以细分为
1.用户程序的响应时间。(用户CPU时间)
2.操作系统为用户服务花去的CPU时间。(系统CPU时间)
使用术语系统性能表示空载系统的响应时间,用CPU性能表示用户CPU时间。
时钟周期和时钟长度
时钟周期:为计算机一个时钟周期的时间,通常是处理器时钟。
时钟长度:每个时钟周期持续的时间长度。
关系:例如时钟周期为250ps,对应的时钟频率为4GHz。
公式:
一个程序的CPU执行时间 = 一个程序的CPU时钟周期 * 时钟周期时间(/时钟频率)
改进性能:
1.减少程序的CPU时钟周期数。
2.减少时钟周期时间。
公式:
CPU时钟周期数 = 程序的指令数 * 每条指令的平均时钟周期数
CPI:每条指令的时钟周期数,表示执行某个程序时每条指令所需要的时钟周期平均数。(CPI随着指令组合而变化)
见PDF 25页最下面
见PDF 26页最下面
CPU时间 = 指令数 * CPI * 时间周期时间
或
CPU时间 = 指令数 * CPI / 时钟频率
各种因素影响
指令数:执行某程序所需要的总指令数
指令组合:在一个或多个程序中,指令动态使用频率的评价指标,
见PDF 30页最下面
计算机运行的一组程序集构成了工作负载。
通过使用一组专门用于测量性能的基准测试程序。
前面我们已经了解设计计算机的几大思想之一的加速大概率事件的执行。
所以先必须准确知道哪些是大概率事件,因此基准测试在计算机系统架构中具有非常重要的作用。
工作负载:一个典型的工作负载必须指明程序和相应的频率。
基准测试程序:用于比较计算机性能的程序。
SPECINTC2006基准程序在2.6GHz的 Inter Core i7 920的运行结果:
SPEC功耗基准测试程序:
最后,祝你平安喜乐,万事胜意