1.3 计算机系统的评价标准
评价计算机系统结构的优劣有很多标准,如运行速度、字长、存储容量、价格、功耗、系统配置、对编程难易程度的支持、体积等,可能也有人提到功能。从原理上来说,简单的通用计算机完全可以完成复杂的功能。例如,要完成64位加法运算,今天的64位运算器固然可以一次完成,但是利用过去的8位机也能计算出来,只不过要加8次,当然还要有相应的程序,而且要增加运行时间和投入编程精力。如果把图像处理看成是对屏幕上的一个个像素数据进行运算,那么8 位机同样也能实现复杂的多媒体图形处理,只不过速度达不到要求,同时还要付出软件编程的成本。可见,最重要的评价标准是性能和成本两项指标。衡量计算机性能的标准就是程序的执行时间,完成同样的任务,花费时间越少性能就越高;同样性能的计算机,成本越低,自然越好。人们常常以性能/价格即所谓性价比来综合判断一个计算机系统的好坏。这一节首先介绍计算机系统设计的定量分析原理,然后再讲述系统结构的性能评价及成本问题。
1.3.1 计算机系统设计的定量分析原理
在设计计算机系统时,经常要遵循或用到几个定量原理。这几个原理一直贯穿到计算机系统结构设计的各个环节,其重要性可想而知。
1.加快处理经常性事件的速度
这是计算机设计中最重要也最广泛采用的设计原则。其基本思想是:对大概率事件赋予它优先的处理权和资源使用权,以获得全局的最优结果,即尽可能加快处理高概率事件。例如,运算不发生溢出的概率远远高于发生溢出的概率。显然,设计时应尽量优化无溢出运算,而对溢出处理可不必过多考虑。
2.Amdahl定律
加快处理某些事件,尤其是经常性事件,无疑会提高系统性能,但是提高的效果怎样,Amdahl定律指出了衡量与比较的途径。
Amdahl定律指出,系统中某一部件由于采用某种方式使性能改进后,整个系统性能的提高与该方式的使用频率或占总执行时间的比例有关。
Amdahl定律定义了加速比来定量计算这种改进的效果:
设Sn为加速比,T0为改进前执行某任务的时间,Tn为改进后执行某任务的时间,则
加速比与两个因素相关:一个是性能改进比Fe,一个是部件加速比Se。
Fe总是小于1,它表征了要改进的部件在改进前对整个系统性能的影响。
如果该部件确实得到改进,则Se应大于1,它表征了某部件本身改进的情况。
由Fe = Ti0 / T0和Se = Ti0 / Tin,可得改进后整个任务的执行时间为
这样,改进后整个系统的加速比为
式中,(1- Fe)表示未改进部分。显然,当Fe = 0时,Sn = 1,表明不做改进。当Fe→0时,Sn→1,表明改进前部件对整个系统的影响越小,该部件改进后整个系统提高的效果也越小,这印证了必须加快处理大概率事件才能取得显著改进的效果。当Se→∞时,Sn = 1/(1- Fe),说明即使对某部件改进达到了极限,但是整个系统性能改善仍然受到Fe的约束。由此得到结论,必须优先选择那些对整个系统影响最大即执行时间在整个系统执行时间中比例最大的部件进行改进,也就是人们常说的应优先改进系统的瓶颈部分。
下面举例说明Amdahl定律的应用。
例1.1 改进一个系统处理器的性能。假设新的处理器处理Web服务器应用程序的运行速度是原来处理器的10倍,但该处理器约有45%的时间用于计算,另外55%的时间用于I/O操作,则采用改进措施后能使整个系统的性能提高多少?
解:由题意可知Fe = 0.45,Se = 10;则
Sn = 1/(1-Fe + Fe/Se)= 1/(1-0.45 + 0.45/10)≈1. 68
当Se = 10时,Sn和Fe的关系如图1.2所示。从图中可以看出,若改善某部件的性能后,系统性能急剧提高,则该部件就为“系统瓶颈”。
图1.2 Se = 10时Sn和Fe的关系
例1.2 采用哪种实现技术来求浮点数平方根(FPSQR)的操作对系统的性能影响很大。假设 FPSQR 操作占整个测试程序执行时间的 20%。一种实现方法是采用 FPSQR 硬件,使FPSQR操作的速度加快到10倍。另一种实现方法是使所有浮点操作(FP)指令的速度加快,使FP指令的速度加快到1.8倍,还假设FP指令占整个执行时间的50%。请比较这两种设计方案。
解:已知Fe1 = 0.2,Se1=10;Fe2 = 0.5,Se2 = 1.8。则
Sn1 = 1/(1-Fe1 + Fe1/Se1)= 1/(1-0.2 + 0.2/10)≈1.22
Sn2 = 1/(1-Fe2 + Fe2/Se2)= 1/(1-0.5 + 0.5/1.8)≈1.28
因为Sn2 > Sn1,可见后者方案更好。
3.CPU性能分析
中央处理单元(Central Processing Unit,CPU)主要由控制器和运算器及片内寄存器堆组成,它担负着整个计算机系统的指令运行控制、时序控制、I/O控制、部件之间的并行控制等。显然,要提高计算机系统性能,优先要考虑CPU性能的提高。
可以实测一个程序的运行时间,但不方便,例如例1.2中的FP运算时间就很难直接测量。大多数计算机都基于一个恒定速率的时钟,并主要由CPU控制,因此通过计算CPU的执行时间,就能判断系统的性能高低了。
CPU时间 = 一个程序的CPU时钟周期数 × 时钟周期长度
= 一个程序的CPU时钟周期数 / 时钟频率
这里,时钟周期是计算机主频的倒数。
设IC(Instruction Counter)表示某个程序的所有指令的条数,TC表示执行某个程序所花费的时钟周期数,CPI(Clock cycle Per Instruction)表示执行某个程序的指令平均时钟周期数,则
CPI = TC / IC
CPU时间 =(IC × CPI)× 时钟周期长度 =(IC × CPI)/ 频率
上式表明,CPU性能由三要素决定:时钟频率、指令条数IC、指令平均时钟周期数CPI。其中时钟频率由硬件技术和组成决定,IC取决于系统结构的指令集和编译技术,而CPI取决于系统结构组成和指令集的设计与实现。
若指令i在程序中执行的次数为Ii,指令i所需的时钟周期数为CPIi,n为该程序使用的指令种类数,则执行该程序的CPU时钟周期数为
每条指令的平均时钟周期数为
其中,Ii / IC表示指令i在程序所使用的指令数目中所占的比例。此式表明,若某一种指令的使用频率较高时,应设法加快执行该指令的速度,从而减少CPU的执行时间。
例1.3 设FP操作的比例为25%,FP操作的平均CPI = 4.0,其他指令的CPI = 1.33,FPSQR操作的比例为2%,FPSQR操作的CPI = 20。有两个改进方案:
● 方案1:将FPSQR操作的CPI减为2。
● 方案2:将所有FP操作的CPI减为2。
试利用CPI比较设计方案。
解:CPI 原系统 = 4 × 25% + 1.33 × 75% = 2.0
CPI 方案1 = CPI 原系统 -2% ×(CPI 原FPSQR - CPI 新FPSQR)= 2.0-2% ×(20-2)= 1.64
CPI 方案2 = CPI 原系统 -25% ×(CPI 原FP - CPI 新FP)= 2.0-25% ×(4-2)= 1.5
∵ CPI 方案2 < CPI 方案1 ∴ 方案2 较好
从加速比也可得到同样的结论:
方案1 加速比 = CPI 原系统/ CPI 方案1 = 2/1.64 = 1.22
方案2 加速比 = CPI 原系统/ CPI 方案2 = 2/1.5 = 1.33
例1.4 有A、B两台机器,其指令系统规定执行条件转移指令需2个T,其他指令需1个T,这里T为时钟周期。TB = 1.25 × TA。设A机的一次条件转移使用比较和测试转移两条指令,B机的一次条件转移使用一条比较转移指令。又设两机中条件转移操作占20%。试比较两机性能的优劣。
解:A机条件转移操作占20%,故比较和测试转移两条指令各占20%,相对B机条件转移指令占0.2/0.8 = 25%,因此
CPIA = 0.2 × 2 + 0.8 × 1 = 1.2
CPIB = 0.25 × 2 + 0.75 × 1 = 1.25
ICB = 0.8 × ICA
∵ ∴ CPUA的速度较快
本例说明将一条复杂指令简化为两条简单指令,有时还能加快运算速度。
例1.5 在例1.4中,若TB = 1.1 × TA,哪一个速度较快?
解:
∵ ∴ CPUB速度较快
本例说明不能仅按主频来衡量系统性能。
4.并行性原理
(1)并行性原理
并行性(parallelism)是指问题中具有可同时进行运算或操作的特性,并行性包括同时性和并发性。两个或多个事件在同一时刻发生属于同时性;两个或多个事件在同一时间间隔内发生属于并发性。例如,按照先写后读的原则在同一时间周期内并发访问主存。
所谓并行性原理,指尽可能实现运算或操作的并行性,实现同时对多个任务、多条指令或同时对多个数据项进行处理。
在计算机系统中,运算的并行性体现在以下几个方面:
① 时间重叠(time interleaving):多个处理过程在时间上错开,轮流重复地使用同一套硬件设备的各个部分,使之加快硬件使用的周转来赢得速度。典型的应用是流水线计算机。
② 资源重复(resource replication):靠重复设置硬件资源来提高可靠性或性能。例如双工系统,通信的两个结点之间都有接收和发送装置,实现信息接收和发送同时进行。又如若有两个乘法器,则数据不相关的两条乘法指令就可以同时进行,这比一个乘法器依次执行两次乘法运算,速度可能要快一倍。典型的应用是阵列处理机和相联处理机。阵列处理机主要通过资源重复利用,设置大量算术逻辑单元,在同一控制部件作用下同时进行运算和处理,以实现空间上的并行。
③ 资源共享(resource sharing):利用软件方法让多个用户共用同一套资源,通过提高系统资源的利用率来提高系统的性能和效率。例如多道程序分时系统通过共享CPU、主存,从而降低系统价格、提高系统性能。典型的例子即多处理器系统。多处理器系统主要通过资源共享,让共享输入/输出子系统、数据库资源及共享或不共享主存的一组处理器在统一的操作系统的全盘控制下,实现软件和硬件各级上的相互作用,达到时间和空间上的异步并行。它可以改善系统的吞吐量、可靠性、灵活性和可用性。此外,计算机网络和分布处理系统等都是资源共享的例子。
(2)并行处理的意义
据P. H. Enslow的统计,1965~1975年,器件速度提高了10倍,而系统效率提高了100倍,显然系统结构改进的贡献也是10倍,其中并行技术功不可没。开发并行处理技术是提高现代计算机系统性能的最主要途径之一。
现代经济和社会发展对计算机系统的性能要求越来越高。下面略举几例:
① 天气预报。1990年10次台风登陆,致使福建、浙江两省损失数十亿元。做好局部灾害性天气预报意义重大。天气预报模式为非线性偏微分方程形式,预报台风暴雨过程的计算量为1014~1016次浮点运算,需要10~100 GFLOPS运算速度的超级计算机。
② 石油工业。石油工业关系国计民生,它涉及地震勘探资料处理、油藏数值模拟、测井资料处理等,数据处理量巨大。以三维地震勘探为例,对于100平方公里的三维勘探面积,假定道距25米、60次覆盖、6秒长记录、2毫秒采样,将一共采集2.88 × 1010个数据,约为116 GB。叠加后数据量为4.8 × 108个数据。若利用二维叠前深 度偏移方法精确产生地下深度图像,需要执行25 × 1012 FLOPS,采用100 MFLOPS运算速度的机器要计算250天,利用1 GFLOPS的机器要计算25天,采用10 GFLOPS的机器需要35分钟。考虑到机器持续速度常常是峰值速度的10%~30%,所以需要100 GFLOPS的机器。CRAY T932/32的计算速度约为60 GFLOPS。
③ 航空领域。研究三维翼型对飞机性能的影响。数值模拟利用时间相关法解Navier-Stoker方程,网格分点为120 × 40 × 50,需内存160 MB,在每秒6亿次运算的计算机上需要求解12小时;如果在数分钟内完成设计,则需要每秒千亿次运算的计算机。
另外,如空气动力学计算需要千亿次/秒(1011),图像处理运算需要百亿次/秒(1010),AI(人工智能)处理需要万亿次/秒(1012),更不用说在军事、航天上的应用了。
要解决大规模计算和处理,光靠器件速度的提高远远达不到要求,只有开发并行处理技术才能满足要求。科学计算中的重大挑战性课题往往要求计算机系统具有3T(Tera)性能指标,即1 TFLOPS的计算能力、1 TB的存储容量和1 TB/s的I/O带宽。目前,性能最好的计算机离此目标还有一定距离。
(3)并行性级别
并行性有不同的等级,从不同角度有不同分法。
按程序执行的并行性,由低到高分为4级。
① 微操作级:执行一条指令的多个微操作之间的并行,例如现代算术逻辑单元(ALU)具有先行进位加法器,这种加法器的多个微操作利用了并行性来加速求和过程。
② 指令级:多条指令的并行执行。
③ 进程级或线程级:程序的多个进程或线程的并行执行;线程经常用来指一个进程的多个执行过程。多线程的系统结构允许不同地址空间上的多个进程同时运行,例如让多个处理器执行同一个程序并且共享程序的代码和地址空间。线程级并行与指令级并行的区别在于线程由几百条甚至几百万条并行执行的指令组成。
④ 作业级或程序级:多个作业或多道程序之间的并行运行。
按数据处理的并行性,由低到高分为4级。
① 字串位串:对一个字的各位逐位处理,即位串行处理;字也是串行处理,无并行性,即传统的串行单处理机。
② 字串位并:同时对一个字的所有位进行处理,实现位并;但字是串行处理,即传统的并行单处理机。
③ 字并位串:同时对多个字的同一位(称位片)进行处理。
④ 字并位并:同时对多个字的全部或部分位组进行处理。
按器件或者功能单元的并行性,可分为4类。
① 存储器操作并行:在一个存储周期内,采用单体多字、多体单字或多体多字方式并行访问多个字,进而采用按内容访问方式在一个存储周期内用位片串字并或全并行方式实现对存储器中大量字的高速并行进行比较、检索、更新、变换等操作。常见有并行存储器系统和以相联存储器为核心构成的相联处理机。
② 处理器操作步骤并行:是将操作步骤或具体操作的执行步骤在时间上重叠地流水进行。如将一条指令的取指、分析、执行等操作步骤流水执行,又如浮点加法的求阶差、对阶、尾数加、舍入、规格化等具体操作的流水执行。
③ 处理器操作并行:为支持向量、数组运算,可以通过重复设置大量处理单元,让它们在同一控制器的控制下,按照同一条指令的要求对多个数据组同时进行操作。典型的例子就是阵列处理机。
④ 多机并行:多个处理机同时对多条指令及有关的多数据组进行处理,包括指令、任务、作业等并行,往往构成多指令流、多数据流计算机。典型的例子是多处理机。
(4)计算机系统并行性的量度
如何衡量各个级别的并行性程度,目前尚无统一的评价标准。有的只是具体并行情况的描述,如多少个字并行或多少个位并行。在某一级并行的情况下,目前还是有一些公认的评价标准。常见的有如下评价标准。
① 指令级并行度(ILP):计算机系统每个时钟周期平均执行的指令条数。一般流水线处理机每个时钟周期平均执行的指令条数 < 1,即ILP < 1,而超标量、超流水线、超标量超流水线处理机的ILP > 1。
② 线程级并行度(TLP):线程级并行度描述了线程并行的粒度大小。
③ 数据级并行度(DLP):数据处理的并行度(如字并等)及数据流的并行度。
④ 多机系统的耦合度:所谓耦合度,是指多机系统中各个机器之间物理连接的紧密程度和交叉作用能力的强弱。实际上反映计算机之间或计算机部件之间的数据关联和功能关联程度。耦合情况可分为:最低耦合系统、松散耦合系统和紧密耦合系统三种。一般最低耦合系统耦合度最低,机器之间除共享某种存储介质外,各计算机之间无物理连接,难以构成相关的并行处理;松散耦合系统机器之间存在通道或通信线路互连,能实现有限的并行工作,但难以满足任务一级的并行处理,较适合分布处理;紧密耦合系统的机器之间有总线或高速开关互联,共享主存,可实现数据集一级、任务级、作业级并行,其并行度最高。有关多机系统的介绍请参考本书的8.2节。
(5)并行处理系统的结构
目前存在以下4种不同的结构。
① 流水线计算机:部件重叠时间并行,详见第5章的介绍。
② 阵列计算机:资源重复空间并行,详见第6章的介绍。
③ 多处理机:资源共享时空异步并行,详见第8章的介绍。
④ 数据流处理机:按数据组织并行处理。传统冯·诺依曼结构的计算机的特点是“共享数据,指令控制”。而现代数据流计算机是按数据驱动的。首先,指令之间的数据不是通过共享的存储器进行传递,而是通过一种表示操作数或参数已经准备就绪的标志——数据令牌来实现传递的。数据直接传送到享用该数据的有关指令的操作中。其次,它是以数据驱动方式来启动指令的执行,只要某条指令所需的操作数已就绪并已可用,就可以执行,也就是数据流计算机中程序不存在固定的顺序,执行顺序仅仅由指令间的数据相关性决定。因此,只要有足够多的处理单元,就可以充分地实现程序固有的并行性成分,使并行处理得以更高度的发展。
5.访问的局部性原理
所谓访问的局部性原理,是指程序执行中呈现出频繁重复使用那些最近已使用过的数据和指令的规律。实验表明,一个程序使用90%的执行时间去执行仅占10%的程序代码,这可以从编程中大量应用循环及循环嵌套,频繁进行子程序调用、递归调用、中断处理等感受到,其访存特点反映在时间局部性和空间局部性上。
所谓时间局部性是指近期被访问的信息,可能马上被访问;所谓空间局部性,是指与被访问地址相邻的地址上的信息可能会一起被访问。
利用访问的局部性,可以根据程序最近的情况,比较精确地预测最近将要用到哪些指令和数据。访问的局部性是构成层次存储体系(虚拟存储器、Cache系统等)的设计基础,也是先行控制技术中预取指令或数据的应用原理之一。
1.3.2 计算机系统的评价
评价一个计算机系统的好坏有多项指标,其中最重要的是系统性能和系统成本两个指标。计算机系统结构是把计算机的各个功能部件组成一个系统,这些部件可以是硬件、软件或两者的混合体。系统结构设计的目标是选择一种最佳的部件组织,使得整个系统的性能价格之比达到最高。
1.性能
运算时间(或运算速度)是衡量计算机性能的主要标准。它自计算机启动某个任务开始,至该任务结束为止,即所谓的系统响应时间。计算机运行时有多种时间标准。例如CPU时间,即CPU计算的时间,它不包括I/O等待时间,并且还分为用户CPU时间(CPU花费在用户程序上的时间)和系统CPU时间(CPU花费在操作系统上的时间)。此外,还有磁盘访问时间、存储器访问时间、I/O访问时间等。
衡量机器性能的唯一固定且可靠的标准就是真正执行程序的时间,那么应如何表示呢?下面介绍几种标准。
(1)MIPS
对于一个给定的程序,MIPS(Million Instructions Per Second,每秒百万条指令数)定义为
程序的执行时间:
使用MIPS有三个不足:
① 依赖于指令集。用MIPS比较指令集不同的机器性能时可能并不准确。
② 与具体执行的程序有关。即使是同一台机器,程序不同,MIPS可能相差较大。
③ 有时可能与性能相反。例如用浮点运算硬件比用软件实现浮点运算要快得多,但是编程实现浮点运算由于执行指令条数多,可能MIPS反而高。类似的情况在具有优化功能的编译器中也可发现。
此外还有相对MIPS,即测试机相对参照机而言的MIPST:
其中,TRef 、MIPSRef分别指参照机的执行时间和MIPS,Tv是测试机的执行时间。通常以VAX-11/780机(处理能力为1 MIPS)为参照基准。
一般情况下,MIPS只适于评估标量机。
(2)MFLOPS
MFLOPS即每秒百万次浮点操作次数(Million FLoating-point Operations Per Second),定义如下:
显然,MFLOPS主要用于衡量浮点操作的性能。由于相同程序在不同机器上的指令数可能不同,但浮点操作次数相同,因此对于浮点运算而言,MFLOPS比MIPS更精确。
但是,MFLOPS不能体现机器的整体性能,例如对于编译程序,使用MFLOPS就很难区别不同机器的性能高低。另外,MFLOPS还依赖于操作类型,如单纯的浮点加法要远快于单纯的浮点除法。
一般情况下,MFLOPS比较适于评估向量机。
MFLOPS与MIPS有个大致的对应关系:1 MFLOPS≈3 MIPS,即在标量机上进行一次浮点运算需要2~5条指令。
(3)利用基准测试程序评价性能
确切地说,MIPS和MFLOPS只能得到机器具体执行某一程序的性能,而难以表示机器在任何情况下的整体性能。基准测试程序在于针对机器的具体应用,较准确地得到代表机器的性能参数,其关键是如何选取实测的基准程序。一般有四种程序:
① 实际的应用程序。基准程序采用所测计算机经常用到的程序,但对用途广泛的通用计算机就不太适宜。
② 核心程序。如果实际应用程序很大,使得测试花费过大而不可取,就可以从实际程序中抽取少量关键的常用循环程序段作为核心程序来进行测试。其结果近似地表征了运行实际应用程序的性能。
③ 玩具基准测试程序。根据计算机的不同用途而设计的小测试程序,比较方便,可大致知道机器在有关方面的性能。
④ 综合基准测试程序。类似于核心程序,但考虑了各种操作和各种程序的比例,体现了机器的平均执行情况。
在微型机上也有很多测试程序,如PassMark PerformanceTest,它总共包含六大类22种独立的测试项目,包括浮点运算器测试、标准的2D图形性能测试、3D图形性能测试、磁盘文件的读取/写入及搜寻测试、内存测试与CPU的MMX相容性测试等,并提供了预设的四个基准计算机的比较数据。
2.性能的比较
下面举例说明如何比较计算机的性能。表1.2是两个程序分别在A、B、C三台计算机上的执行时间。从表中可知,不同程序在不同计算机上的执行时间是不一样的,有的甚至相差较大。常用的比较方法有以下几种。
表1.2 两个程序在三台计算机上的执行时间
① 比较总的执行时间或平均执行时间。如表1.2所示,得到B、C机一样及A机较好的结论。也可以采用平均执行时间来表示,结果是一样的:
式中,Tm为平均执行时间,n为测试程序个数,Ti是第i个程序的执行时间。
② 调和平均。若用速度Ri表示,那么平均时间是调和平均值Hm:
Hm与所有测试程序时间的总和成反比关系,较接近CPU的实际性能。
③ 加权执行时间。对于具体应用而言,机器运行不同功能的程序的频率可能不同,有必要给每一个程序提供一个比例加权因子Wi。例如,在某个任务中,程序A占20%,程序B占50%,程序C占30%,则它们的加权分别为0.2、0.5、0.3。这样,就应引入加权执行时间Am:
其中Wi是第i个程序在任务中所占的权重。
还有一种方法是将一个任务的执行时间标准化为一个参考机器的时间。参考机器的执行时间称为平均标准化时间,可用几何性能平均值表示:
其特性为Gm(Xi)/Gm(Yi)= Gm(Xi / Yi),即Gm性能与参考计算机性能无关。不过,选择不同的参考机,Gm结论也不同。
3.成本
对于用户而言,计算机系统的成本是指购买系统的费用。对于系统设计者而言,成本是指硬件和软件的生产成本。
成本指标主要包括如下几项。
① 硬件开发和生产成本:主要指设计、测试、优化和开发所花费的人力、物力成本。
② 软件的开发成本:主要是人力成本。
③ 硬件的开发、生产和软件开发工具的折旧成本:包括所用仪器设备、开发场地、水电易耗品等方面的付出。
必要的话还应考虑营销成本。
由于不同时期货币价值不一样,直接用货币表示成本有时不能说明问题,也可用能反映成本高低的一些参数来表示。例如,利用芯片面积、芯片引脚数、插座数、插座线数、功耗等物理参数反映硬件成本,利用软件规模、开发人/年数等反映软件成本。在成本问题中要注意几点。
① 生产数量越多,平均成本越小,而总成本越大。
② 早期由于硬件成本较高,衡量计算机系统的成本往往以硬件成本为主,随着硬件技术的提高,特别是VLSI技术的进步,以及利用软件手段设计硬件的技术如SOPC、FPGA等的发展,计算机系统成本逐步演变为以软件成本为主。
③ 成本必须考虑到计算机系统本身的负载,以及它的应用范围和规模。
如果要进行两个或多个计算机系统成本的比较,有时很难给出不同设计方案的绝对花费,把影响成本的最主要部分或者关键的设计抽出来进行比较是有效的方法。