本系列文章为408考研计算机组成原理知识点整理仅涉及到一些重要的考研知识点并不是完全系统全面的知识,参考书目和视频资料:唐朔飞 计算机组成原理(第二版),袁春风 计算机组成与系统结构(第二版)王道考研计算机组成原理,B站王道考研计算机组成原理视频课。
5.1 CPU的功能与基本结构
5.1.1 CPU的功能
- 指令控制:完成取指令、分析指令和执行指令的操作,也即程序的顺序控制
- 操作控制:一条指令的功能是通过若干操作信号组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应音部件,从而控制这些部件按指令的要求进行动作
- 时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号
- 数据加工:对数据进行算数和逻辑运算
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理
5.1.2 CPU的基本结构
运算器
运算器是计算机中加工数据的中心,除了ALU外,它还有很多寄存器,这里先给出它们的大致功能
- 暂存寄存器:用于暂存从主存读过来的数据,该数据不能存放在通用寄存器中,否则会破坏其原有内容。暂存寄存器对应用程序员是透明的
- 累加寄存器:它是一个通用寄存器,用于暂时存放ALU的运算结果,可以作为法运算的一个输入端
- 通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数,目的操作数及中间结果)和各种地址信息。注意SP是堆栈指针,用于指示栈顶地址
- 程序状态字寄存器:保留由算数逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(0F)、符号标志(SF)、零标志(ZF),进行标志(CF)等。PSW中的这些位参与并决定微操作的形成
- 移位器:对操作数或运算结果进行移位运算
- 计数器:控制乘除运算的操作步数
控制器
控制器主要作用是取指令,分析指令和执行指令,主要涉及以下寄存器
- 程序计数器PC:用于指出下一条指令在主存中的存放地址
- 指令寄存器IR:用于保存当前正在执行的那条指令
- 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号
- 存储器地址寄存器:用于存放要访问的主存单元的地址
- 存储器数据寄存器:用于存放向主存写入的信息或从主存读出的信息
- 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到
- 微操作信号发生器:根据IR的内(指令)、PSW的内容及时序信号,产生控制计算机系统的所需要的各种控制信号
CPU的本质就是寄存器的集合体
用户可见的寄存器:通用寄存器组、程序状态字寄存器PSW、程序计数器PC、基址寄存器(汇编程序员可见)
用户不可见的寄存器:MAR、MDR、IR和暂存寄存器
5.2 指令执行过程
5.2.1 指令周期
指令周期:是指CPU从主存中取出并执行一条指令所需要的全部时间,不同指令的指令周期可能不同。指令周期常用若干机器周期(又叫CPU周期)来表示,一个机器周期又包含若干时钟周期(也称为节拍或T周期,时钟周期是CPU操作的最基本单位)
每个指令周期内的机器周期数可以不等
每个机器周期内的时钟周期数可以不等
机器周期指的是完成一个子过程所花费的时间,下图中的方波表示若干时钟周期。例如CPU取指令,它是一个程序化、步骤化的过程,所以需要花费多个时钟周期(对应多个操作)来完成。
不同指令的指令周期可能不同,自然也会有不一样的执行流程。某个指令在执行过程中是否要经过某个周期需要进行判断。且这四个工作周期都会涉及到CPU的访存操作,只是访存的目的不同
- 取指周期(FE): 为了取出指令
- 间址周期(IND)(可能有):为了得到有效地址
- 执行周期(EX): 为了取得操作数
- 中断周期(INT)(可能有):为了保存程序断点
5.2.2 指令周期流程
取值周期
流向:
(PC)->MAR
1->R
M(MAR)->MDR
(MDR)->lR
PC+1
间址周期
流向:
Ad(IR)->MAR(也可以是Ad(MDR)->MAR)
1->R
M(MAR)->MDR(存放有效地址EA)
执行周期
执行周期的任务就是根据IR中指令字的操作码和操作数通过ALU产生执行结果,由于不同指令的执行周期操作不同,所以没有统一的数据流向。
中断周期
(SP-1)->SP
SP->MAR
1->W
(PC)->MDR
MDR->M (程序断点存入主存)
中断服务程序的入口地址->PC
5.2.3 指令执行方案
指令执行方案:一个指令周期通常要包括几个执行步骤,每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。出于性能和硬件成本的考虑,可以选用如下三种不同的方案来安排指令的执行步骤。
单指令周期
单指令周期:对所有指令都选用相同的执行时间来完成,称为单指令周期方案
此时每条指令都在固定的时钟周期内完成,指令之间串行执行,即下一条指令只能在前一条指令执行结束之后启动。因此指令周期取决于最长的指令的执行时间,对于那些本来可以在更短时间内完成的指令,也要使用这个较长的执行周期,会降低整个系统的运行速度
多指令周期
多指令周期:对不同类型的指令选用不同的执行步骤来完成,称为多指令周期方案
指令之间串行执行,即下一条指令只能在前一条指令执行结束后启动。但是可以选用不同个数的时钟周期来完成不同指令的执行过程,指令需要几个周期就分配几个周期,而不再强求所有指令占用相同的执行时间
流水线方案
流水线方案:指令之间可以并行执行的方案,称为流水线方案
流水线方案力争在每个时钟周期完成一条指令的执行过程(当然这只有在理想情况下才能达到)。这种方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自在不同的执行步骤。
5.3 数据通路的功能和基本结构
5.3.1 数据通路
数据通路:描述了数据在各个功能部件之间传送的路径。我们需要确定信息从哪里开始,中间经过哪些踣部件,最后又传至哪里。因此只要确定了数据的流向,我们就可以发出不一样的控制信号,来控制这些数据的流动。
数据通路的种类
- CPU内部单总线:该方式将所有寄存器的输入端和输出端都连接到同一条公共的通路上,这意味着同一时刻只允许两个部进行数据交换,它们对总线的使用是独占的。本节探讨的内容所用的数据通路方式便是这种方式
- CPU内部多总线方式:将所有寄存器的输入和输出端都连接到多条公共通路上。采用多总线方式,可以同时在多个总线上传送不同的数据
- 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,性能高,但是硬件消耗量大
5.3.2 数据传送
寄存器之间的数据流动
比如要把PC的内容送至MAR,那么传送操作流程如下:
主存与CPU之间的数据流动
比如CPU要从主存中读取指令,那么传送操作流程如下:
寄存器和ALU之间的数据流动
执行算数或逻辑运算时数据可能会流向ALU,比如现在要执行一条加法指令,加法运算的其中一个操作数已经被存放在ACC中了,另一个操作数地址会由加法指令直接指明,那么传送操作流程如下:
5.4 控制器的功能和工作原理
5.4.1 硬布线控制
在一个指令周期内需要若干微操作序列来完成该指令周期的工作,每个指令周期又由若干时钟周期组成(节拍),CU会在每一个节拍内发出一个微命令,生成对应的微操作。
因此微命令和微操作是一一对应的:比如微命令1使得PCout、MARin有效,完成对应的微操作(PC)->MAR
每个节拍内可以并行地完成互不冲突的微操作,而且同一个微操作也可能在不同指令的不同阶段被使用
CU如何发出微命令
1.得让CU知道现在执行的是什么命令:首先需要把IR的n位操作码送给操作码译码器(n位操作码意味着有2n种不一样的指令,经过操作码译码器译码后对应的地址选译线就会被选通),CU通过判断对应哪一个输入信号有效,来判断当前执行的是哪一条指令
2.得让CU知道当前执行到了该指令的哪一个机器周期:所以需要把FE、IND、EX和INT这四个触发器的二进制信息送给CU,CU通过判断对应的值是否为1来判断目前处于哪一个机器周期(需要注意这四个触发器实际上已经被集成在了CPU中)
3.得让CU知道当前处在该机器周期的哪一个节拍:因此需要给CU输入一个节拍信号,节拍信号是通过节拍发生器给出的,时钟部件会有规律的发出脉冲信号,每个脉冲信号就是一个时钟周期。节拍发生器在接受到时钟部件发出的信号后,就会让其中的某个输出线导通、节拍信号是循环发出的,当Tm结束后,就会回到T0,此时表示进入了新的机器周期。
4.最后需要给CU提供机器状态条件:状态条件统称为标志,它们来自于执行单元的返回信息。比如前面说过的来自于运算器的PSW(溢出判断就在这里)、来自于ACC的符号位等,也有可能来自于I/O设备、主存等
硬布线控制器的特点
- 指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)
- 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令困难
- 由于使用纯硬件实现控制,因比执行速度很快(微操作控制信号由组合逻辑电路即时产生)
5.4.2 微程序控制器基本原理
设计思路
微程序控制器的设计思路:把每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令。
- 一条指令对应于一个微程序
- 指令是对程序执行步骤的描述
- 微指令是对指令执行步骤的描述
- 微命令与微操作一一对应
- 微指令可能包含多个微命令(微操作)
存放微指令的控制存储器的单元地址称为微地址,一条微指令通常包含:
操作控制字段:又称操作码字段,用于产生某一步操作所需要的各种操作控制信号
顺序控制字段:又称微地址码字段,用于控制产生下一条要执行的微指令地址
微程序控制器基本组成
- 控制存储器CM:它是微程序控制器的核心部件,用于存放各指令对应的微程序,在CPU内部,使用只读存储器ROM构成。每一条机器指令对应的微指令序列,由CPU厂商负责设计,并且在CPU出厂之前就已经把ROM里面的微程序数据全部写好。
- 微地址形成部件:由于不同指令对应的微程序是不同的,因此需要根据该指令的操作码来确定它所对应的微程序的起始地址,以保证微指令的连续进行
- 微地址寄存器CMAR:有MAR就有CMAR,和MAR一样,它用于接收微地址形成部件送来的微地址;同时CMAR还有一个别名,叫做uPC,其实就是把PC和MAR整合到了一起
- 地址译码器:有了地址就需要地址译码器,地址译码器会把地址码转换为存储单元控制信号
- 微指令寄存器CMDR:有MDR就有CMDR,它是微指令寄存器,别名叫做uIR,用于存放从CM中取出的微指令,它的位数同微指令的字长
微程序控制器工作原理
当CPU取到一条指令之后,流程如下:
1.把指令的操作码送给微地址形成部件,以确定微指令序列的起始地址
2.根据顺序逻辑及其他标志信息等来确定接下来要执行的微指令的地址
3.将微指令地址放入到CMAR中
4.经过地址译码器译码后就可以选中CMAR所指向的微指令
5.取出该微指令,存放到CMDR中
6.(执行完该微指令后需要把微指令“下地址”信息送给顺序逻辑,结合其他信息用于判断下一个微指令)
7.硬件电路需要根据该微指令的控制码部分,向CPU内部其他部件或系统总线发出控制信号
所有指令的取指周期、间址周期和中断周期几乎是一样的,所以这几个周期所对应的微指令序列也是可以共享的,因此在CM中只会存储一份
取指周期的微程序段通常是公用的,所以如果某指令系统中有n条机器指令,则CM中微程序段的个数至少是n+1个,而对于一些早期的CPU,物联网设备的CPU由于其CPU可以不包含间址周期和中断周期,所以不包含进去。
微指令的编码方式
微指令的编码方式:又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目的是在保证速度的情况下,尽量缩短微指令字长.
直接编码:直接编码无需译码,在微指令的操作控制字段中,每一位代表一个微命令。设计微指令时,选用或不选用某个微命令,只要将表示该微命令的对应位设置为1或0即可,每个微命令对应并控制数据通路中的一个微操作。
优点:简单、直观、执行速度快、操作并行性好
缺点:微指令字长过长,n个微指令就要求微指令的操作字段有n位,造成控制存储器容量变得很大
字段直接编码:将微指令的微命令字段分成若干小字段,然后把互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中
互斥性微命令:不能并发执行(比如PC->MAR和PC+1->PC)
相容性微命令:可以并发执行(比如PC->MAR和1->R)
每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关
微命令字段分段的原则为:
- 互斥性微命令分在同一段内,相容性微命令分在不同段内
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和移码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常000表示不操作
字段直接编码优缺点如下:
优点:可以缩短微指令字长
缺点:由于要通过译码电路后再发出微命令,因此比直接编码要慢
字段间接编码:一个字段的某些微命令需要用另一个字段中的某些微命令解释,由于不是靠字段直接译码发出的微命令,因此称为字段间接编码,又称隐编码
优点:可以进一步缩短微指令字长
缺点:削弱了微指令的并行控制能力,所以通常作为字段直接编码的一种辅助手段
微指令地址的形成方式
(1)下地址给出
下地址给出:下一个微指令的地址直接由当前微指令的下地址字段指出
(2)操作码形成
操作码形成:当机器指令取至指令寄存器(CM)之后,微指令的地址由操作码经微地址形成部件形成
(3)增量计数法
增量计数法:类似于(PC+)->PC,有(CMAR+1)->CMAR
(4)分支转移
有些微指令是转移指令,类似于JMP
(5)通过测试网络形成
(6)由硬件产生微程序入口地址
第一条微指令地址:由专门硬件产生(用专门的硬件记录取指周期微程序首地址),也可由外部直接向CMAR输入微指令的地址,这个地址即为取指周期微程序的入口地址。
中断周期:由硬件产生中断周期微程序首地址(用专门的硬件记录)
微指令的格式
水平型微指令:是指一条微指令可以定义多个可并行执行的微命令
优点:微程序短,执行速度快
缺点:微指令长,编写微程序较为麻烦
垂直型微指令:是指一条微指令只能定义一个微命令,由微操作码字段规定具体功能
优点:微指令短、简单、规整、便于编写微程序
缺点:微程序长,执行速度慢,工作效率低
混合型微指令:在垂直型的基础上增加一些不复杂的并行操作。微指令较短,仍便于编写,形成的微程序也不长,执行速度加快。
水平型微指令和垂直型微指令的比较如下:
①水平型微指令并行操作能力强、效率高、灵活性强:垂直型微指令则较差。
②水平型微指令执行一条指令的时间短;垂直型微指令执行的时间长。
③由水平型微指令解释指令的微程序,具有微指令字较长但微程序短的特点;垂直型微
指令则与之相反,其微指令字较短而微程序长。
④水平型微指令用户难以掌握,而垂直型微指令与指令比较相似,相对容易掌握。
根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数。
由微指令数确定微指令的顺序控制字段的位数。最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
微程序设计分类
(1)静态微程序设计和动态微程序设计
静态:微程序无需改变,采用ROM
动态:通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM
(2)毫微程序设计
微程序设计:使用微程序解释机器指令
毫微程序设计:使用毫微程序解释微程序
5.4.3 硬布线控制器和微程序控制器比较
5.5 中断和异常
5.5.1 中断的类型
中断:也称为外中断,指中断信号来自于CPU外部,也即与当前执行的指令无关,例如时钟部件会每隔一个时间片给CPU发送一个时钟中断信号,防止某些程序长时间抢占CPU。
输入输出处理完成后,相关设备也会发送一个中断信号,希望处理机能的够向设备发下一个输入输出请求,同时让完成输入/输出后的程序继续运行。
内中断:也称为异常(trap),指中断信号来自于CPU内部,也即与当前执行的指令有关,例如
试图在用户态下执行特权指令
执行除法指令时发现除数为0
应用程序想要请求操作系统内核为其提供服务,比时会执行一条特殊的指令一陷入指令(trap),该指令会引发一个内中断信号(比如C语言中的printf)
对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现异常应立即处理
5.5.2 中断的处理过程
- 关中断:在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕后能接着正确地执行
- 保存断点:为保证在中断服务程序执行那个完毕后能正确地返回原来的程序,必须将原来程序的断点(即PC的内容)保存起来。
- 引出中断服务程序:其实质是取出中断服务程序的入口地址并传送给程序计数器PC
- 保护现场:保存通用寄存器和状态寄存器的内容(即保存ACC寄存器的值),以便返回原程序后可以恢复CPU环境,可以使用堆栈,也可以使用特定存储单元
- 中断服务:主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲寄存器(中断服务的过程中有可能会修改ACC寄存器的值)
- 恢复现场:通过出栈指令或取数指令把之前保存的信息送回寄存器中(把原程序算到一般的ACC值恢复原样)
- 中断返回:通过中断返回指令回到原程序断点处
5.6 指令流水线
5.6.1 流水线的定义和表示方法
一条指令的执行过程可以分成多个阶段,不同的计算机有不同的分法,其中比较通用的划分方法就是划分为取指,分析和执行三个阶段
- 取指:根据PC内容访问主存储器,取出一条指令送到IR中
- 分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并存有效地址EA中取出操作数
- 执行:根据操作码字段完成指令规定的功能,即把运算结果写入到通用寄存器或主存中
当多条指令在处理器中执行时,会有如下三种执行方式,称之为指令流水
(1)顺序执行方式:指令会按顺序执行,前一条指令执行完之后,才启动下一条指令。传统的冯诺依曼机便采用此种方式,又称其为串行执行方式
优点:控制简单,硬件代价小
缺点:执行指令的速度较慢,任何时刻,处理机中只有一条指令在执行,各功能部件利用率很低
设取指、分析、执行3个阶段的时间都相等,用t表示,那么顺序执行n条指令所用时间为T =3nt
(2)一次重叠方式:同时进行第k条指令的“执行阶段”和第k+1条指令的“取指阶段”
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高
缺点:需要付出较大的硬件代价,控制过程也比顺序执行复杂
采用此种方式时,执行条指令所用时间为:T=3t+(n-1)×2t=(1+2n)t
(3)二次重叠方式:为了进一步提高指令的执行速度,可以把“取k+1条指令”提前到“分析第k条指令”的期间完成,使“分析第k+1条指令”与“执行第k条指令”同时进行
优点:使指令的执行时间缩短了近2/3
采用此种方式,执行条指令所用时间为T=3t+(n-1)×t=(2+n)t
指令执行过程图:在时空图中,横坐标表示时间(输入流水线中的各个任务在流水线中所经过的时间),纵坐标表示空间,即流水线的每个流水段(对应各个执行部件)
5.6.2 流水线的性能指标
吞吐率:是指在单位时间内流水线所完成的任务数量,或是输出结果的数量
假设任务数为n,处理完这几个任务所用时间为Tk,则计算流水线吞吐率(TP)的最基本公式为
设△t为时钟周期,在输入流水线中的任务连续的理想情况下,一条k段流水线能在k+n-1个时钟周期内完成n个任务。得出流水线的吞吐率为:
当输入的任务数n趋向于无穷时就有
加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
设T0表示不使用流水线时的执行时间,即顺序执行所有指令花费的时长;Tk,表示使用流水线的执行时间,则计算流水线加速比S的基本公式为:
单独完成一个任务耗时为k△,则顺序完成n个任务耗时为T=nk△,且T=(k+n-1)△,故实际加速比为
当输入任务数n趋向于无穷时就有
5.6.3 流水线的冒险和处理
结构相关
结构相关(资源冲突):由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关
结构相关(资源冲突)解决方法
1)后一相关指令暂停一周期
2)进行资源重复配置,专门设立数据存储器和指令存储器,使访问数据和访问指令专属于不同的存储块,互不干扰
数据相关
数据相关(数据冲突):在一个程序中,如果存在必须等前一条指令执行完才能执行后一条指令的情形,则这两条指令为数据相关
数据相关(数据冲突)解决方法
1)把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直至数据相关问题消失后再继续进行,可以分为硬件阻塞(stall)和软件插入"NOP"两种方法
2)设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,而直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程,使本来需要暂停的操作变得可以继续执行,这称为数据旁路技术。
3)通过编译器对数据相关的指令编译优化的方法,调整指令顺序来解决数据相关。
控制相关
控制相关(控制冲突):当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关
控制相关(控制冲突)解决方法
1)转移指令分支预测:简单预测(永久true或者false)、动态预测(根据历史情况)动态调整
2)预期转移成功和不成功两个控制流方向上的目标指令
3)加快和提前形成条件码
4)提高转移方向的猜准率
5.6.4 流水线多发技术
超标量流水线技术:每个时钟周期内可以并发执行多条独立指令,即以并行操作方式将两条或多条指令编译并执行,为此需要配置多个功能部件。超标量计算机不能调整指令的执行顺序,因此通过编译优化技术,把可并行执行的指令搭配起来,挖掘更多的指令并行性,CPI<1
超流水技术:在一个时钟周期内再分段,在一个时钟周期内一个功能部件使用多次。不能调整指令的执行顺序,靠编译程序解决优化问题,CPI=1
超长指令字技术: 也称静态多发射技术,由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位),为此需要采用多个处理部件。
5.7 多处理器的基本概念
计算机体系结构分类:基于指令流的数量和数据流的数量,可以将计算机体系结构分为如下4类:
单指令单数据流SISD
单指令多数据流SIMD
多指令单数据流MISD
多指令多数据流MMD
单指令单数据流SISD:常规的单处理器便是SISD,其特性和硬件组成如下
特性:①各指令序列只能并发而不能并行;②每条指令处理一两个数据;③不是数据级并行技术
硬件组成:①一个处理器+一个主存储器;②若采用指令流水线,则需要设置多个功能部件,采用多模块交叉存储器
单指令多数据流SIMD:其特性和硬件组成如下
特性:①各指令序列只能并发而不能并行;②每条指令可以同时处理多个具有相同特征的数据;③是数据级并行技术
硬件组成:①一个指令控制部件+多个处理单元执行单元+一个主存储器;②每个执行单元有各自的寄存器组、局部存储器、地址寄存器;③不同执行单元执行同一条指令、处理不同的数据
多指令单数据流MISD:多条指令并行执行,处理同一个数据。现实中并不存在这种计算机
多指令多数据流MIMD: 常规的多处理器便是MIMD,其特性如下
各指令序列并行执行,分别处理多个不同的数据
是一种线程级并行技术(甚至是线程级以上)
多处理器系统:是共享内存多处理器(SMP)的简称。其特性和硬件组成如下
特性:各处理器之间,可以通过LOAD/STORE指令访问同一个主存储器,可以通过主存相互传送数据
硬件组成:①一台计算机内,有多个处理器+一个主存储器;②多个处理器共享单一的物理地址空间
硬件多线程:线程粒度较进程来讲更细,而且线程切换包含很多开销,频繁切换线程必然会影响系统性能,所以为了减少开销便诞生了硬件多线程。在支持硬件多线程的CPU中,必须为每个线程提供单独的通用寄存器组、单独的程序计数器等,线程的切换只需激活选中的寄存器,从而省略了与存储器数据交换的环节,大大减少了线程切换的开销。共有如下3种实现方式
细粒度多线程
粗粒度多线程
同时多线程(SMT)
对于不支持硬件多线程的CPU: 同一时刻只能有一个线程运行,线程切换时需要保护现场,产生额外开销
对于支持硬件多线程的CPU: 不同线程运行在不同环境中
细粒度多线程:
- 指令发射:轮流发射各线程的指令(每个时钟周期发射一个线程)
- 线程切换频率:每个时钟周期切换一次线程
- 线程切换代价:低
- 并行性:指令级并行、线程间不并行
粗粒度多线程:
- 指令发射:连续几个时钟周期,都发射同一线程的指令序列。流水线阻塞时,才切换另一个线程
- 线程切换频率:只有流水线阻塞时才切换另一个线程
- 线程切换代价:高(需要重载流水线)
- 并行性:指令级并行、线程间不并行
同时多线程(SMT):
- 指令发射:一个时钟周期内同时发射多个线程的指令
- 并行性:指令级并行、线程级并行
Comments NOTHING