漫谈计算机架构

前言

一说到计算机架构(Computer Architecture),大家可能会有疑问:计算机架构到底是个什么东西?引用维基百科对计算机架构的定义:

computer architecture is a set of rules and methods that describe the functionality, organization, and implementation of computer systems.

翻译成中文:计算机架构是描述计算机系统功能,组织和实现的一组规则和方法。而这组规则和方法是通过ISAMicroarchitecture实现的。

我们知道计算机是由硬件和软件组成的,而它们之间的桥梁是ISA(Instruction Set Architecture,指令集架构),换句话说,硬件的功能通过ISA提供出来,而软件通过ISA规定的指令使用硬件。目前常用的ISA有x86和ARM,其中x86采用的是复杂指令集(CISC),被较多的应用于服务器端,而ARM(Advanced RISC Machine)采用的是精简指令集,目前被用于移动端。

微架构(Microarchitecture)是ISA在处理器的实现,描述处理器是怎样实现功能的,其本质就是一系列硬件实现以满足各种指令集。而Microarchitecture是ISA的具体实现,而且对于同一个ISA,可以使用不同技术的微架构 ,比如单周期、多周期以及流水线。比如说x86 ISA有286,386,486,Pretium,Pretium Pro等实现。目前,微架构涉及以下部分:流水线、并行、存储系统分层结构,下面将对这几部分进行详细介绍。

流水线

我们知道指令的执行过程包含以下几个步骤:取指(IF,instruction Fetch)、译码(ID,Instruction Decode)、执行(EXE,Execution)以及写回(WB,Write Back),在早期微架构中我们将这些步骤放在同一个周期内顺序完成,这样设计导致效率很低,当进行取值时,其余部件是空闲的。为了提高各个部件工作效率,流水线技术(Pipeline)就应运而生了。

既然流水线技术可以实现不间断取指、解码、执行、写回,那么我们是不是同时可以让几条流水线一起工作,这就是超标量技术。不过需要注意的是当前后两条指令存在依赖关系时,流水线需要停顿,例如:

x=1+2
y = x*3

并行

除了通过流水线技术来提高计算机运行速度之外, 还有没有其他并行技术?按照费林分类法可以将计算机分为:SISD(Single Instruction Stream Single Data Stream,单指令单数据)、SIMD(Single Instruction Stream Mutiple Data Stream,单指令多数据)、MISD(Mutiple Instruction Stream Single Data Stream,多指令单数据)和MIMD(Mutiple Instruction Stream Mutiple Data Stream,多指令多数据)。

早期的冯·诺依曼结构采用的都是SISD,冯·诺依曼结构也称存储程序计算机,它有两个重要特性:1. 指令和数据被存储在内存中;2. 指令被顺序执行,在一个时刻只有一条指令在执行,通过PC(Program Counter)识别当前指令。

SIMD 就是单指令多数据的缩写,将一个指令广播到多个处理器上,但每个处理器都有自己的数据。也就是说同一份控制指令同时运行不同的数据,如下图所示,这样做的好处就是减轻的控制成本。目前,GPUs(Graphics Processor Units)采用的就是SIMD架构。

对于MISD这种架构,目前没有系统安装这个结构设计的,这里就不过多介绍了。

下面重点介绍下MIMD,它指的是不同时刻不同CPU执行的指令不同,并且数据也不同,如下图所示。目前超级计算机,网络并行计算机集群和“网格”,多处理器SMP计算机,多核PC都属于这一类。而MIMD又可以根据内存结构,可以分为共享内存和消息驱动。共享内存就是处理器之间共享内存,通过内存来进行通信,而消息驱动指的是处理器通过消息驱动来进行通信。目前共享内存有SMP、NUMA两种,消息驱动对应DM

SMP全称Symmetric Multi Processors,对称多处理机,又称UMA(Unifor Memory Access,统一内存访问),所有CPU都共享同一内存。目前Intel和AMD推出的多核CPU应该归为SMP这一类中。

NUMA(NonUniform Memory Access,非一致内存访问),所有CPU共享所有的内存,但不同的CPU访问不同的内存速度是不一样的

DM(Distributed Memory,分布式内存):每个CPU都有自己的内存,CPU通过消息来通信,由于每个处理器都有自己的本地内存,因此,每个处理对本地内存操作都不会影响其他处理器。而且,内存数量可随着处理器的数量进行扩展。不过,它的缺点就是程序员负责许多与处理器之间数据通信相关的细节。

存储器分层结构

无论是冯·诺依曼结构还是其他结构的处理器,最理想的情况下当然是有无限大的存储空间和 0 时延的存储系统了,不过这显然是无法做到的,因此人们就提出了分层式的存储系统结构,从寄存器开始每往下一层容量就更大,但是速度也更慢,如下图所示。寄存器容量最小,但是速度最快。因此,想要设计一个良好的存储系统,需要对容量和速度做一个权衡。

写在最后

更多文章请订阅公众号"木可大大"。

你可能感兴趣的:(计算机)