1、15.1 重叠解释方式重叠解释方式 5.1.1 基本思想和一次重叠基本思想和一次重叠 图图 5.1 对一条机器指令的解释对一条机器指令的解释 取指令分析执行t图 5.2 指令的顺序解释与重叠解释 图 5.3 一次重叠工作方式 图 5.4 当第k条指令是条件转移时 如果采用Von Neumann型机器上指令可修改的办法经第k条指令的执行来形成第k+1条指令,如 k:存 通用寄存器,k+1;(通用寄存器)k+1 k+1:由于在“执行k”的末尾才形成第k+1条指令,按照一次重叠的时间关系,“分析k+1”所分析的是早已取进指缓的第k+1条指令的旧内容,这就会出错。为了避免出错,第k、k+1条指令就不能
2、同时解释,我们称此时这两条指令之间发生了“指令相关”。特别是当指令缓冲器可缓冲存放n条指令情况下,执行到第k条指令时,与已预取进指缓的第k+1到第k+n条指令都有可能发生指令相关。指缓容量越大,或者说指令预处理能力愈强的机器发生指令相关的概率就愈高。5.1.2 相关处理相关处理 1.指令相关的处理指令相关的处理 “执行”指令是IBM 370机器为此设置的一条指令,其形式为 执行R1X2B2D2当执行到“执行”指令时,按第二操作数(X2)+(B2)+D2地址取出操作数区中单元的内容作为指令来执行,参见图5.5。图 5.5 IBM 370“执行”指令的执行 2.主存空间数相关的处理主存空间数相关的
3、处理 图图 5.6 主存数相关的处理主存数相关的处理 3.通用寄存器组相关的处理通用寄存器组相关的处理设机器的基本指令格式为 操作码L1L3B2d2或 操作码L1L3L2图图 5.7 指令解释过程中与通用寄存器内容有关的微操作时间关系指令解释过程中与通用寄存器内容有关的微操作时间关系图图 5.8 “执行执行k”、“分析分析k+1”重叠时,访问通用寄存器组的时间关系重叠时,访问通用寄存器组的时间关系 图 5.9 用相关专用通路解决通 用寄存器组的数相关 设操作数的有效地址 222)0000()()(dBBXd由分析器内的地址加法器形成。由于通常情况下,“分析”周期等于主存周期,所以,从时间关系上
4、要求在“分析”周期的前半段,就能由通用寄存器输出总线取得(B2),送入地址加法器。由于运算结果是在“执行”周期的末尾才送入通用寄存器组的,它当然不能立即出现在通用寄存器输出总线上。也就是说,在“执行k”得到的、送入通用寄存器的运算结果来不及作为“分析k+2”的基址值用,更不用说作为“分析k+1”的基址值用。因此,虽然是一次重叠,但基址值相关(B相关)就不止会出现一次相关,还会出现二次相关。即当出现B(k+1)=L3(k)时,称为发生了B一次相关;而当出现B(k+2)=L3(k)时,称为发生了B二次相关,如图5.10所示。图 5.10 B一次相关与二次相关 图 5.11 B一次、二次相关的推后处
5、理 图 5.12 B相关专用通路法 5.2 流流 水水 方方 式式 5.2.1 基本概念基本概念 1.流水是重叠的引申流水是重叠的引申 图 5.13 指令分解为“分析”与“执行”子过程 图 5.14 流水处理 2.流水线的分类流水线的分类 图 5.15 处理机间的流水处理 图 5.16 ASC机运算器的流水线 图 5.17 静、动态多功能流水线时-空图举例图 5.18 非线性流水线举例 5.2.2 流水线处理机的主要性能流水线处理机的主要性能 吞吐率吞吐率 吞吐率是流水线单位时间里能流出的任务数或结果数。在图5.14的流水线例子中,各个子过程经过的时间都是t2,满负荷后,流水线每隔t2解释完一
6、条指令,其最大吞吐率TPmax为1/t2。实际上,各个子过程进行的工作不相同,所经过的时间也就不一定相同,所以前述在子过程间设置了接口锁存器,让各锁存器都受同一时钟脉冲同步。时钟脉冲周期直接影响流水线的最大吞吐率,总希望它越小越好。如果各个子过程所需的时间分别为t1、t2、t3、t4,时钟周期应当为maxt1,t2,t3,t4,即流水线的最大吞吐率 ,max14321maxttttTP 它受限于流水线中最慢子过程所需要的时间。称流水线中经过时间最长的子过程为瓶颈子过程。图 5.19 最大吞吐率取决于瓶颈段的时间 图 5.20 瓶颈子过程再细分 图 5.21 瓶颈子过程并联 设一m段流水线的各段
7、经过时间均为t0,则第1条指令从流入到流出需要T0=mt0的流水建立时间,之后每隔t0就可以流出一条指令,其时空图如图5.22所示(这里设m=4)。这样,完成n个任务的解释共需时间T=mt0+(n-1)t0。在这段时间里,流水线的实际吞吐率 nmTPnmttntmnTP11)11(1)1(max000图 5.22 从时空图分析实际的吞吐率 不仅实际的吞吐率总是小于最大的吞吐率,而且只有当nm时,才能使实际的吞吐率接近于理想的最大吞吐率。如果用加速比(Speedup Ratio,Sp)表示流水线方式相对非流水线顺序串行方式速度提高的比值,那么,非流水线顺序串行方式工作,连续完成n个任务需要nmt
8、0的时间,因此,流水线方式工作的加速比 nmmtntmtmnSp11)1(000 如果线性流水线各段经过的时间ti不等,其中瓶颈段的时间为tj,则完成n个任务所能达到的实际吞吐率 jmiimiipjmiitnttnStntnTP)1()1(111其加速比 2.效率效率 流水线的效率是指流水线中的设备实际使用时间占整个运行时间之比,也称流水线设备的时间利用率。由于流水线存在有建立时间和排空时间(最后一个任务流入到流出的时间),在连续完成n个任务的时间里,各段并不总是满负荷工作的。如果是线性流水线,且各段经过时间相同,如图5.22那样,则在T时间里,流水线各段的效率都相同,均为0,即 Tmtnmm
9、mmnmnTtnmm002100211整个流水线的效率 式中,分母mT是时空图中m个段和流水总时间T所围成的总面积,分子mnt0则是时空图中n个任务实际占用的总面积。因此,从时空图上看,效率实际上就是n个任务占用的时空区面积和m个段总的时空区面积之比。显然,与吞吐率类似,只有当nm时,才趋近于1。同时还可看出,对于线性流水且每段经过时间相等时,流水线的效率是正比于吞吐率的,即 00)1(tTPmnnTtn 如果流水线各段经过的时间不等,各段的效率就会不等,但是,参照图5.22,不难得出整个流水线的效率 jmiimiitntmtnmn)1(11空区个段总的时空白个任务实际占用的时jmiimiim
10、iiitntatan)1(111其中,分母为m个段的总的加权时空区,分子为n个任务总的加权时空区。当 时,有 miia11mijimiiitnttan11)1(对于复杂的非线性流水线,实际的吞吐率TP和效率需要通过画出实际工作时的时空图,才能分别用下列两个式子求得:空区个段的总的加权时空区个任务的总的加权时个任务全部流出的时间从开始流入到任务数mnnTP图 5.23 流水线工作举例 3.流水线工作举例流水线工作举例 5.2.3 流水机器的相关处理和控制机构流水机器的相关处理和控制机构 1.局部性相关的处理局部性相关的处理 图 5.24 顺序流动和异步流动 图5.25 IBM 360/91的浮点
11、执行部件结构框图 浮点操作站FLOS(Floating Point Operand Stack)缓冲的浮点操作命令的格式为 操作 源1(目的),源2 操作可以是浮点加、减、乘、除。源1指明存放源操作数的浮点寄存器FLR的号,并兼作存放中间结果的目的寄存器的号。源2指明存放经存贮器总线送来的浮点操作数的缓冲器FLB的号。它们分别经FLR总线和FLB总线将数据送入浮点加法流水线或浮点乘/除法流水线输入端的保存站。浮点加法器流水线的输入端设有3个保存站A1至A3,浮点乘/除法器流水线的输入端设有两个保存站M1和M2,分别用规定的站号标记。保存站由控制部分控制,只要任意一个保存站的两个源操作数都到齐,
12、且流水段空闲时就可以进入流水线向前流动,因此是采用异步流动方式工作的。由于操作命令中源1兼作目的,因此同时进入两条流水线的操作命令之间发生操作数相关的概率是较高的。设k+i表示k之后同时在两条流水线流动的第i条指令,则只要k+i 的源1与k的目的一样,就会发生“先写后读”相关,k+i的目的与k的目的一样,就会发生“写写”相关,k+i的目的与k的源1一样,就会发生“先读后写”相关。也就是说,只要同时进入流水线的各个操作命令中使用了同一个浮点寄存器FLR的号就会发生相关。现在,以FLOS依次送出 ADD F2,FLB1;(F2)+(FLB1)F2 MD F2,FLB2;(F2)*(FLB2)F2两
13、条操作命令为例,来说明是怎样判出发生相关以及怎样控制推后和相关直接通路的联接的。很明显,这两条命令异步流动时,“先写后读”、“写写”、“先读后写”三种相关都会发生。当FLOS送出 ADD F2,FLB1 操作命令时,它控制由FLR取得(F2),由FLB取得(FLB1)送往加法器保存站,例如送往A1,同时立即将F2的“忙位”置“”,以指明该寄存器的内容已送往保存站等待运算,这样F2的内容再不能被其他操作命令作源操作数读出用。由于F2这时已成为“目的”寄存器,准备接收由加法器来的运算结果,因此将F2的“站号”字段置成是A1的站号“1010”,以便控制把站号为1010的保存站A1在加法流水线流出的运
14、算结果经CDB总线送回F2。一旦结果送回后,立即将F2的“忙位”和“站号”都置成“”,以释放出F2为别的操作命令使用。问题在于,当F2的“忙位”为“”,而加法结果并未流出加法流水线时,FLOS又送出操作命令 MD F2,FLB2由译码控制去访问F2取源1操作数时,由于其“忙位”为“”,表明出现了F2相关,此时就不能直接将(F2)送往乘法器保存站,而改成为把原存在F2的“站号”字段中的站号A1(即1010,指明F2应有内容的来源)送往M1的“源1站号”,并把F2内的站号由A1(1010)改为M1(1000)以指明应改为从M1接收运算结果。2.全局性相关的处理全局性相关的处理 1)猜测法 图 5.
15、26 用猜测法处理条件转移 2)加快和提前形成条件码3)采取延迟转移 4)加快短循环程序的处理 3.流水机器的中断处理流水机器的中断处理 中断会引起流水线断流。然而,其出现概率比条件转移的概率要低得多,且又是随机发生的。所以,流水机器处理中断主要是如何处理好断点现场的保存和恢复,而不是如何缩短流水线的断流时间。在执行指令i时有中断,断点本应在指令i执行结束,指令i+1尚未开始执行的地方,但流水机器是同时解释多条指令,指令i+1、i+2可能已进入流水线被部分解释。对于异步流动流水线,这些指令中有些可能流到了指令i的前面去了。4.流水线调度流水线调度 图图 5.27 流水线预约表及状态图举例流水线
16、预约表及状态图举例 表表 5.1 各种调度方案的平均间隔拍数的例子各种调度方案的平均间隔拍数的例子 图 5.28 多功能流水线预约表及状态图举例 使用交叉冲突向量(Crosscollision Vector)来反映有A、B两种功能的动态流水线各个后继任务流入流水线所禁止使用的间隔拍数。这样,对于本例就应有4个交叉冲突向量,即 VAB=(1011),VBA=(1010),VAA=(0110),VBB=(0110)。其中,VAA和VBB分别表示同按A功能和B功能流水时,后继任务流入流水线的冲突向量;而VAB表示先前按B功能流水流入的任务与后继按A功能流水流入的任务之间的冲突向量,VBA则表示先前按
17、A功能流水流入的任务与后继按B功能流水流入的任务之间的冲突向量。就一般情况而言,一个有P个功能的流水线将有P2个交叉冲突向量,它们可以分别归类写成P个冲突矩阵Mp,其中p分别为1至P。冲突矩阵Mp表示按p功能流水线进入一个任务后与按各种功能流水线流入后继任务所产生的全部冲突向量的集合。对本例来说有两个初始冲突矩阵,分别为)(0110)(1011,)(1010)(0110BBABMBBAAAMA 例如,按A功能刚流入一个任务后,根据VAA的(0110),知道可隔1拍或4拍流入一个A功能的新任务。将MA初始冲突矩阵各行同时右移1位,再与A功能的初始冲突矩阵MA对应行按位“或”,形成新的冲突矩阵 。
18、根据此时VAA的(0111),知道只有隔4拍流入一个A功能的新任务才能不发生冲突,从而形成在此基础上的新的冲突矩阵 。1111011110100110 再如,根据初始冲突矩阵中的VBA为(1010),知道可在第一拍或第三拍进行B功能的新任务的送入而不发生冲突。于是将MA初始冲突矩阵均右移1位或3位,再与MA的初始冲突矩阵对应行按位“或”,形成新的冲突矩阵,它们恰好都为 。据此可知,或者是隔3拍流入A功能的新任务,或者是隔4拍流入B功能的新任务,又将分别产生不同的新的冲突矩阵。011110115.3 向量的流水处理与向量流水处理机向量的流水处理与向量流水处理机 5.3.1 向量的流水处理向量的流
19、水处理 例如,要计算D=A*(B+C),其中,A、B、C、D都是具有N个元素的向量,应该采用什么样的处理方式才能最充分发挥流水线的效能呢?如果采用逐个求D向量元素的方法,即访存取ai、bi、ci元素,按上述算术表达式求出di,再取ai+1、bi+1、ci+1,求di+1,这种处理方式我们称其为横向(水平)处理方式。如果向量的长度N太长,超出了向量寄存器组中寄存器的个数,可以将该向量分割成若干个组,使每组都能装得进向量寄存器组中。这样,每一组内均按纵向方式处理,而组和组之间则采用软件方法编制循环程序的方法依次循环处理。我们称这种处理方式为分组纵横处理方式。有了这种分组纵横处理的方式,就可以对向量
20、长度N的大小不加限制。CRAY1就是采用这种方式来进行向量的流水处理的。5.3.2 向量流水处理机向量流水处理机 1.向量处理机的指令系统向量处理机的指令系统 向量处理机的指令系统一般应包含有向量型和标量型两类指令。向量型运算类指令一般又可以有如下几种:向量V1运算得向量V2,如V2=SIN(V1);向量V运算得标量S,如;向量V1与向量V2运算得向量V3,如V3=V1V2;向量V1与标量S运算得向量V2,如V2=S*V1。niiVS12.向量流水处理机的结构向量流水处理机的结构 CRAY1是由中央处理机、诊断维护控制处理机、大容量磁盘存贮子系统、前端处理机组成的功能分布异构型多处理机系统。中
21、央处理机的控制部分里有总容量为256个16位的指令缓冲器,分成4组,每组为64个。中央处理机的运算部分有12条可并行工作的单功能流水线,可分别流水地进行地址、向量、标量的各种运算。另外,还有可由流水线功能部件直接访问的向量寄存器组V0V7、标量寄存器S0S7及地址寄存器A0A7。图 5.29 CRAY1的向量流水处理部分简图 为了能充分发挥向量寄存器和可并行工作的6个流水线功能部件的作用,加快对向量的处理,将CRAY1设计成每个Vi组都有连到6个功能部件的单独总线,而每个功能部件也都有把运算结果送回向量寄存器组的输出总线。这样,只要不出现Vi冲突和功能部件冲突,各个Vi之间和各个功能部件之间都
22、能并行工作,大大加快了向量指令的处理,这是CRAY1向量处理的一个显著特点。所谓Vi冲突指的是,并行工作的各向量指令的源向量或结果向量使用了相同的Vi。除了相关情况之外,就是出现源向量冲突,例如 V4V1+V2 V5V1V3这两条向量指令不能同时执行,必须在第一条向量指令执行完,释放出V1之后,第二条向量指令才能开始执行。因为虽然这两条向量指令的源向量之一都取自V1,由于二者的首元素下标可能不同,向量长度也可能不同,难以由V1同时提供两条指令所需要的源向量。所谓功能部件冲突指的是,同一个功能部件被一条以上的要求并行工作的向量指令所使用。例如 V4V2*V3 V5V1*V6这两条向量指令都需要使
23、用浮点相乘流水功能部件,那就需在第一条向量指令执行到计算完最后一个结果分量,释放出功能部件之后,第二条向量指令才能开始执行。图图 5.30 CRAY1的的4种向量指令种向量指令 CRAY1向量处理的另一个显著特点是,只要不出现功能部件冲突和源向量冲突,通过链接机构可使有数据相关的向量指令仍能重叠并行处理。例如,对前述向量运算D=A*(B+C)若向量长度N64,向量为浮点数,则在B、C取到V0、V1后,就可用以下3条向量指令求解:V3存贮器(访存取A向量)V2V0+V1(B向量和C向量浮点加)V4V2*V3(浮点乘,存D向量)图 5.31 通过链接技术实现向量 指令之间大部分时间并行 CRAY1
24、启动访存,把元素送往功能部件,把结果存入Vi都需要有1拍的传送延迟。由于第一、二条指令之间没有冲突,可以同时执行,并且“访存”拍数正好与“浮加”的一样,因此,从访存开始,直至把第一个结果分量存入V4,所需拍数(亦称为链接流水线的建立时间)为 拍存浮乘送浮乘部件送浮乘部件存存浮加访存送浮加部件启动访存17417123161VVV此后,每拍就可取得一个结果分量存入V4,一共只需17+(N-1)拍就可以执行完这3条向量指令,获得全部结果分量。显然,这要比第一、二条指令全执行完,所有分量全部送入V2、V3后,才开始执行第三条指令要快得多,因为后者需1+6+1+N-1+1+7+1+N-1=15+2N拍。
25、CRAY1指令可以链接的特点,使得它能灵活地组织各流水线功能部件的并行操作。最多能并行处理6条向量指令,进一步发挥这些流水线功能部件的效能。因此,链接技术是提高机器整体运算速度的一个非常重要的措施。CRAY1的向量指令还可以通过让源向量和结果向量使用同一个向量寄存器组,并控制分量计数器值的修改,来实现递归操作。CRAY1的每个向量寄存器组Vi都有一个相应的分量计数器。当一条向量指令开始执行时,它的源向量寄存器和结果向量寄存器相应的分量计数器均置成“”。图 5.32 递归向量和的部分时间关系 加法指令在t0时启动,两个源向量的第0个分量V00和V11被送到浮点加功能部件,等到t1时开始计算V00
26、+V10。由于V1的分量计数器已在t0结束时加“”,而V0的分量计数器仍保持为0,所以t1时又将源向量分量V00和V11送往功能部件。这样,功能部件在t2时计算V00+V11,并将V00和V12送往功能部件。依次类推,一直继续到t8,V00接收V00+V10的运算结果。此后,V0的分量计数器也开始每周期加1。t8时,送往功能部件的V00和V18中的V00已不是初始的“”值,而是0+V10(即V10值)了。t8以后,由于V0的分量计数器的变化,所以每次送V0的下一分量的内容。运算结束后,V0中各个分量的内容如下:可以看出,第八部分(结果部分)V056到V063中存放的是V1的64个分量的8个部分
27、和。这种递归向量和的运算是很有用的。例如在科学计算中,经常需要计算两个向量A=(a0,a1,aN-1)和B=(b0,b1,bN-1)的点积 10NnnnbaBA在STAR100机中,需用专门处理点积的指令来完成,而在CRAY1机上,未专门设置处理点积的指令,只需用一个向量循环和一个标量循环即可。在向量循环中,就可以利用这种递归特性组成一个乘加链:V1V3*V4 (A、B分别放在V3、V4中)V0V0+V1(递归向量和)如果向量长度N=64,乘加链执行完毕时,点积的64个部分和就已减少成只有8个,并存放在V056到V063中。这样,下一步的标量循环只需求此8个部分和的和。因此,速度有了显著的提高
28、。3.超级向量流水处理机举例超级向量流水处理机举例 美国CRAY研究公司成立于1972年,至今已生产了400台以上安装于世界各地的CRAY超级计算机。1979年生产的CRAY1S是对CRAY1的改进,它有10条流水线,时钟周期为12.5 ns,使用CRAY操作系统COS,只允许单用户批处理。1983年的CRAY XMP系列采用多处理机配置。1985年的CRAY2S最多可采用4台CRAY1,有2 GB的共享存贮器,超流水线时钟为4.1 ns。主要特点是,将操作系统由批处理COS改为多用户UNIX系统。1988年的CRAY YMP,由8台处理机组成,时钟周期为6 ns,共享1 GB中央存贮器,采用
29、256个体交叉访问。1991年问世的CRAY YMP C90是目前最大的CRAY机器,它是由16个类似于YMP的CPU组成的集成系统。CRAY公司1992年10月公布了MPP研究计划,目的是想解决目前大多数用RISC微处理器作为MPP系统构造块在性能、效率上的不足。CDC公司于1973年推出了第一台超级计算机STAR100之后,于1982年生产了CYBER 205。以后又推出了有8个CPU,共享存贮器和18台I/O处理机的ETA10,性能可达10 GFLOPS。日本早期由Fujitsu公司生产的VP2000系列最高性能为5 GFLOPS,时钟周期为3.2 ns。1991年NEC公司生产的SXX
30、系列性能已达22 GFLOPS,时钟周期为2.9 ns,具体机器是1992年生产的NEC SXX44向量超级计算机。采用基于VLSI的高密度封装。4台运算处理机共享寄存器或2 GB主存通信,每台处理机有4组向量流水线,每组含2条加/移流水线和2条乘/逻辑运算流水线,可有64路并行。高速标量部件采用128个标量寄存器的RISC结构。指令通过重新排序来开发较高的并行性。主存采用1 024路交叉。16 GB的扩展存贮器的最大数据传输速率可达2.75 GB/s。系统最多可配4台I/O处理机,每台I/O处理机的数据传输率为1 GB/s,可有256个通道用于高速网络、图形和外围操作,能支持100 MB/s
31、的通道工作。5.4 指令级高度并行的超级处理机指令级高度并行的超级处理机 5.4.1 超标量处理机超标量处理机 图 5.33 常规(度m=1)的标量流水机时-空图 图 5.34 度m=3的超标量处理机时-空图 典型的超标量流水线处理机有IBM RS/6000、DEC 21064、Intel i960CA、TandemCyclone等。1986年的Intel i960CA时钟频率为25 MHz,度m=3,有7个功能部件可以并发使用。1990年的IBM RS/6000使用1 m CMOS工艺,时钟频率为30 MHz。处理机中有转移处理、定点、浮点 3 种功能部件,它们可并行工作。转移处理部件每t可
32、执行多达5条指令,度m=4,性能可达34 MIPS和11 MFLOPS。非常适合于在数值计算密集的科学工程上应用及在多用户商用环境下工作。许多基于RS/6000的工作站和服务器都是IBM生产的。如POWER Station 530。1992年的DEC 21064使用0.75 m CMOS,时钟频率为150 MHz,度m=2,10段流水线,最高性能可达300 MIPS和150 MFLOPS。Tandem公司的Cyclone(旋风)计算机由4到16台超级标量流水处理机组成。每个处理机的寄存器组有9个端口(其中5个为读,4个为写),有两个算术逻辑部件,度m=2。由于程序中可开发的指令并行性有限,所以
33、超标量流水线处理机的度m比较低。5.4.2 超长指令字处理机超长指令字处理机 图 5.35 超长指令字(VLIW)处理机 5.4.3 超流水线处理机超流水线处理机 超流水线处理机不同于超标量处理机和VLIW处理机,每个t仍只流出一条指令,但它的t值小,一台度为m的超流水线处理机的t只是基本机器周期t的1/m。因此,一条指令需花kmt的时间,k为一条指令所含的基本机器周期数。只要流水线性能得以充分发挥,其并行度就可达m。图图 5.36 每每t流出一条指令,且度流出一条指令,且度m=3的超流水线处理机时的超流水线处理机时-空图空图 超流水线处理机早就出现了,如CRAY1的定点加法为3t。1991年
34、2月MIPS公司的64位RISC计算机R4000,度m=3。超流水线还可以与超标量组合构成超流水线超标量处理机,如DEC公司早期的Alpha处理机每t可流出两条指令且度m=6。超标量处理机利用资源重复,设置多个执行部件寄存器堆端口。超流水线处理机则着重开发时间并行性,在公共的硬部件上采用较短的时钟周期,深度流水来提高速度,需使用多相时钟,时钟频率高达100 MHz到500 MHz。没有高速时钟机制,超流水线处理机是无法实现的。如果一台有k段流水线的m度超流水线处理机,执行完N条指令的时间为)1/()1()/)1(/()1(327311241NmkNkmtmNktNkSptttmNk如图5.36所示,所需时间为 相对常规流水线处理机加速比为 87