计算机系统

使用流水线技术的MIC-3

MIC-3的数据通路前面讨论了比MIC-1更快的MIC-2,但由于使用了IFU,MIC-2的成本比MIC-1更高。接下来继续讨论如何把MIC-2改进成速度更快的MIC-3,改进基于如下2个方面: 1) 缩短时钟周期:通过改进电路缩短周期,虽然集成电路技术对这方面作用更大,前面提过这点; 2) 提高并行度: MIC-2虽然比MIC-1有更大的并行度(IFU并行取指),但其并行度仍可继续提升; 集成电路水平给定时,MIC-2允许的最短时钟周期很大程度由3部分延迟的和决定: 1) 寄存器数据通过A、B总线的延迟; 2) 数据通过ALU、移位器的延迟; 3) 数据通过他总线(写寄存器)的延迟; 上图为了MIC-3的数据通路,相比MIC-2仅多了3条总线上的3个锁存器。这可以让数据分3个时钟周期通过数据通路,第1个周期寄存器把数据送入A、B锁存器,第2个周期把计算结果送入C锁存器,第3个周期让C锁存器写入寄存器。表面上看,数据通过数据通路的时间扩大到3个时钟周期,但由于这3个步骤的总延迟与之前1个步骤的延迟差不多,所以可认为MIC-3能使用快3倍的时钟(理想状态)。… 阅读全文

七段流水线的MIC-4

MIC-4的流水线MIC-4是对MIC-3的改进,其具有更深的流水线。其使用和MIC-3相似的数据通路和IFU,并引入新功能单元。上图是MIC-4的结构,图中没太多细节,简单了解各功能单元即可: 1) 译码单元:用于划分出包括操作数和操作码的整条指令。其组成包括一个内部ROM,其索引为操作码,数据为指令长度与队列单元的微操作ROM的索引。记录指令长度可能是为了避免误把操作数当操作码。有了译码单元处理WIDE指令就会更方便,可以直接把WIDE ILOAD作为整体映射到微操作ROM; 2) 队列单元:其组成包括1个ROM表和1个RAM队列,前者存储微程序,后者暂存微操作; 2.1) 微程序: MIC-4的微程序结构不同,每个ISA指令对应ROM表的一些顺序的行,这些行称为微操作,其类似于微指令,但微操作大都不含“下个微操作的索引”,所以对于ILOAD和WIDE… 阅读全文

高速缓存技术

高速缓存在计算机发展的过程中,一直存在一个有挑战性的问题:如何设计与CPU速度匹配的内存系统。尤其是过去十几年来,内存系统和CPU的“相对速度”是越来越慢的。现代CPU对内存的延迟和带宽有高的要求,但是内存系统在这两方面通常是矛盾的,如果增大带宽会导致延迟的升高。比如说可以通过流水线技术来让多个内存访问“重叠”,从而增大总的带宽,但这会让每个单次内存访问的延迟更大。 解决内存慢的主流方案是在内存系统中使用高速缓存技术(cache),其中分离式高速缓存是种能有效解决带宽和延迟的矛盾的方案,其分别为数据和指令提供缓存,并允许在这2种缓存并行的进行访问。并行能让带宽翻倍,而这种带宽翻倍并不增加延迟。比如MIC-1就提供了用于指令和数据的两种内存访问端口,如果让这两个端口各有自己的缓存模块,那这两个缓存模块可独立的访问内存。… 阅读全文

时序逻辑单元

时序逻辑电路组合逻辑电路中没有“时间”,其当前时刻输出仅取决于当前时刻输入。而时序逻辑电路的当前时刻输出不仅仅取决于当前时刻输入,还与电路之前的状态(输入输出)有关,其可继续分为这两大类: 1) 同步时序逻辑:其特点是电路存在一个公共时钟信号,用于统一的控制协调各个单元的工作。时钟通常由晶振控制的,其会按固定时间间隔(计为\(t_1\))提供固定时间长度的脉冲(计为\(t_2\))。通常把\(t_1=t_2\)的时钟信号称为对称时钟,否则称为非对称时钟。有时为划分出更细粒度的时钟,会把时钟信号(\(C_1\))经过提供固定延迟的设备得到副时钟信号(\(C_2\))。这样在1个时间段里能区分出4个时间点,其分别为\(C_1\)上升、\(C_2\)上升、\(C_1\)下降、\(C_2\)下降。如果4个时间点不够,可继续增设更多得延迟时钟信号;… 阅读全文

流水线中的三种冒险

流水线中的三种冒险ISA指令的实现会包含阻碍流水线的因素,使程序不能完全流水式执行。上图给出了在5段流水线的机器中,指令“完全”流水执行和流水线被阻碍时的对比。这种为保证正确执行,而在流水线中插入的停顿称为气泡。可以发现如果在一个指令中插入了1个气泡,那么这个指令之后的步骤都会被推迟1个时钟周期,更糟糕的是这些步骤被推迟1个周期会导致相应硬件的占用被推迟1个周期,导致后面的指令也要相继推迟才能占用这些硬件。也就是1个气泡可能导致该指令后的所有指令晚1个周期结束。 阻碍流水线的因素被称为冒险(Hazard,和电路的冒险不是同个概念)。冒险可分如下几类: 1) 结构冒险:同时抢占同一硬件资源导致的。比如在一个周期里同时fetch内存; 2) 数据冒险:又称为相关,数据的前后依赖关系导致的。比如前面MIC-3讨论过微指令间的写后读相关,因为是在同一条指令内的相关,所以也比较容易直接解决。进入流水线的ISA指令间也有相关,比如在流水线中的2条指令,上条指令的数据在周期i尚未产生,但下条指令在周期i依赖该数据;… 阅读全文

内存电路与内存芯片

内存电路前面讨论过如何用多个D触发器构造8位或更多位的寄存器,而内存也是通过锁存器/除法器构造的,不过通常内存容量远远大于寄存器容量,需用用其他方式编排锁存器/除法器。上图给出了基于D触发器的12位内存电路,该电路虽然只有12位,但其方案本身是支持更大容量的。 该电路相对于之前讨论过的寄存器电路,其并未把每个D触发器的输入输出端作为管脚暴露,因为其对触发器进行了编址,该电路是按每3个位为1个字编址的,共包含4个字,其数据读写是以字为单位的。其中\(A_0,A_1\)是地址信号,其可接受4种0-1组合用于“定位”内存中待操作的字。\(I_0,I_1,I_2\)为需要写入内存某个字的输入数据信号。\(O_0,O_1,O_2\)为当前内存某个字的存储内容的输出数据信号。\(CS\)是片选信号、\(RD\)表示进行读或写、\(OE\)是输出的使能,这3者构成了这个内存的控制信号。… 阅读全文

CPU管脚信号与总线操作

CPU管脚信号如果不了解CPU的部分特性就很难分析总线,这里先了解CPU管脚信号,以及CPU同内存与IO设备的交互方式。CPU管脚信号同样可像内存那样分类为地址信号、数据信号、控制信号。 从内存取指令时可能是这样的流程:“CPU先将指令所在内存地址从自己的地址信号管脚发出,然后再从自己的管脚发出控制信号,用于通知内存自己想要读某个字,内存在收到通知后会把这个字的数据送到CPU的数据信号管脚,然后也发出控制信号,声明自己完成了任务,再然后CPU会收到内存发来的控制信号,接着从自己的数据信号管脚获取这个数据,最终完成从内存取指令的任务”。 CPU性能与数据信号和地址信号的管脚数有关,有\(m\)个地址信号管脚的CPU可以寻址\(2^m\)个地址(通常称为可寻址\(2^m\)的地址空间),现代CPU常见的地址空间大小是16、32、64。类似的有\(n\)个数据信号管脚的CPU可“一次性”读写\(n\)位,现代CPU常见的\(n\)为8、32、64。当CPU数据信号管脚只有8个,那么其在读32位的字时就需要“4次操作”,所以32个数据信号管脚的CPU可能比8个的快很多。… 阅读全文

INTEL酷睿i7管脚信号与DDR3内存总线操作

Intel酷睿i7处理器(第二代)第二代(Sandy Bridge)酷睿i7采用了32nm工艺,主频可达3.5GHz,是8086/8088后裔中比较年轻的一员。Intel为第二代酷睿i7提供了很好的向前兼容性,其具有和前辈80386、8048以及Pentium家族相同的指令系统层,包括相同的寄存器数目、指令集、浮点数标准等等。并且虽然它的性能与晶体管数远远超过了最前辈的8088处理器,但它还是向前兼容了8088,也就是说第二代酷睿i7可以不加修改的运行8088程序。当然第二代酷睿i7也包含了很多新的特性,比如新的加密指令等等。 第二代酷睿根据价位分为2-6核的版本,对于使用这种CPU的计算机,从计算机系统的角度应把它当成是多CPU的。程序员可利用多CPU优势编写多线程程序,通过真正的并行来提升速度。Intel在早期的Xeon服务器CPU中使用了超线程技术,超线程同样用在了第二代酷睿i7中,该技术可在1个物理CPU核心上创建2个硬件级的逻辑线程,简单来说就是在硬件层用1个物理CPU虚拟出多个CPU,所以带有超线程技术的CPU在操作系统的“硬件资源管理器”中会显示更多的CPU数。第二代酷睿i7有优秀的微体系结构层设计,支持同时执行4条指令,使之成为4发射超标量计算机。… 阅读全文

计算机系统的分层

计算机系统的分层计算机系统(computer system)是计算机的硬件系统和软件系统构成的整体,这个概念跟操作系统(operating system)易混淆,因为平时较少使用到前者,后者其实是前者的一部分。在研究结构比较复杂的系统时,通常会先根据一些原则和思想将其划分成多个层(layer),然后通过逐个的研究各个层来研究整个系统。现代计算机系统也是分层研究和实现的,一般认为其最底层位于数字电路(digital circuit)中靠顶层的位置,该位置实际并不太关心电路本身,而是关心如何用电路基本组件来构造可实现具体逻辑的组件,而该位置以下的部分则属于电子工程学(electronic engineering)等其他领域。需要明确这里的计算机指数字式电子计算机,而计算机系统本身并不限制实现方式,比如更早出现的机械计算机、模拟式电子计算机。… 阅读全文

计算机体系结构与计算机组成

计算机体系结构与计算机组成 之前的文章确立了研究对象并将其划为6个层,之后自然应当讨论各个层的设计与实现,这相当于在分层的视角下讨论计算机体系结构(computer architecture)。计算机体系结构研究的是“如何通过组件拆分的形式构造计算机系统”,其中有高观点的“设计方面的问题”,也有低观点的“如何实现给定的设计”,后一类问题被称为计算机组成(computer organization)。 实际上计算机体系结构和计算机组成的概念边界是不太清楚的,在英文维基百科中两者是上述的包含关系,计算机系统学者A.S. Tanenbaum认为这两者通常相同。历史上这两个概念的分裂可追溯至1960s,在这期间图灵奖得主、《人月神话》的作者Fred Brooks创造了计算机体系结构这个术语。当时他作为设计者在描述IBM… 阅读全文
滚动至顶部