Bonky
Neither believe nor reject anything, because any other person has rejected or believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

计算机组成 – 概述

发展

四代变化

划分

  • 电子计算机可分为电子模拟计算机和电子数字计算机。
  • 数字计算机又可按用途分为专用计算机和通用计算机。
  • 通用计算机又分为巨型机、大型机、中型机、小型机、微型机和单片机 6 类。

此外,计算机按指令和数据流还可分为:

  • 单指令流和单数据流系统( SISD ),也即传统冯 · 诺依曼体系结构。
  • 单指令流和多数据流系统( SIMD ),包括阵列处理器和向量处理器系统,[GPU](#附:GPU 的简介)也属于SIMD 。
  • 多指令流和单数据流系统( MISD ),这种计算机实际上不存在 。
  • 多指令流和多数据流系统( MIMD ),包括多处理器和多计算机系统。

计算机系统简介

八个伟大思想

  • 面向摩尔定律的设计:由于 摩尔定律(Moore’s Law)的影响,再加上计算机设计需要几年的时间,因此在项目完成时候,单芯片集成度相对于设计开始时候,很容易翻一番甚至两番,计算机设计者必须预测其设计完成时候的工艺水平。
  • 使用抽象简化设计:使用抽象技术来表示不同的设计层次,在高层次中看不到低层次的细节,只能看到一个简化的模型。(高内聚低耦合)
  • 加速大概率事件:加速大概率事件远比优化小概率事件更能够提高性能。大概率事件通常比小概率事件简单,从而易于提高。最典型的就是深度学习,整个计算过程中99%都是向量和矩阵计算,于是,工程师通过GPU,大幅度提升了深度学习的模型能训练过程,CPU需要跑几个小时甚至几天的程序,GPU只需要几分钟就好了,更是不满足于GPU的性能,进一步延伸出了TPU。
  • 通过并行提高性能:并行性能也是计算机的一个重要评价指标。
  • 通过流水线提高性能:流水线实际上就是一种并行,只不过一般的并行指的是线程的并行,而流水线是指令之间的并行。现代 CPU 虽然主频没什么变化,但是通过流水线依然可以提升性能。
  • 通过预测提高性能:通过预测提高性能,通过预先猜测一下该干什么,而不是等上一步运行的结果。典型的例子就是在一个循环访问数组的时候,凭经验,猜到下一步我们会访问数组的下一项。
  • 存储器层次:人们希望存储器的速度更快,容量更大,价格更便宜,我们可以通过存储器层次来解决这些相互矛盾的需求。通常,存储器层次中顶层存取速度快,容量小,底层速度慢,容量大,价格低。
  • 通过冗余提高可靠性:计算机不但需要速度快,而且需要工作可靠。冗余部件可以替代失效部件并可以帮助检测错误。

计算机系统的概念

系统软件

  • 系统软件:提供常用服务的软件,包括操作系统、编译程序、加载程序、汇编程序等等。
  • 操作系统:为了使程序更好地在计算机上运行而管理计算机资源的监控程序,处理基本的输入输出,为多个应用程序提供共享计算资源的服务,分配内存和外存。
  • 编译程序:将高级语言翻译为计算机所能识别的机器语言的程序。(我看到一种很好的比方区分解释器和编译器:解释器一个口译,外国人说一句,ロ译人员翻译一句给你听,但是最后讲完,就没有一张中文演讲稿,可供你重复阅读。第二种方法就是请一个笔译,等日本人讲完将其演讲稿直接全文翻译成中文给你看,这样就可以保留一张中文演讲稿,供你重复使用)
  • 加载程序:又称加载器,是操作系统的一部分,负责程序的加载。

高级语言从编译到执行

image-20191202111959716

程序的编译过程

“屏幕快照 2019-12-02 上午11.22.06”的副本

程序的数据流动过程

一开始,用户从键盘输入命令,然后从磁盘中载入可执行文件,最后执行完后显示到显示器上。

屏幕快照 2019-12-02 上午11.29.47

指令集体系结构 ISA

image-20191202113822735

ISA指Instruction Set Architecture,即指令集体系结构。ISA是对硬件的抽象,或者说计算机组成的抽象,所有软件功能都建立在ISA之上。

ISA规定了如何使用硬件,具体可能的归约如下:

  • 可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相应规定;
  • 指令可以接受的操作数的类型
  • 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、 编号、长度和用途
  • 操作数所能存放的存储空间的大小和编址方式(比如是按照字编制还是按照字节编制,或者I/O是独立编址还是统一编址)
  • 操作数在存储空间存放时按照大端还是小端方式存放
  • 指令获取操作数的方式,即寻址方式
  • 指令执行过程(函数)的控制方式,包括程序计数器、条件码定义(如符号标志,进位标志,零标志等等)等。

应用程序二进制接口 ABI

ABI是操作系统(如Linux)和体系结构(如x86-64)共同提供的功能。目标代码生成及优化主要是根据 ISA 和 ABI 来设计实现。

  • API定义了源码接口,而ABI定义了两个软件模块在特定体系结构上的二进制接口。它定义了应用内部如何交互,应用如何与内核交互,以及如何和库交互。
  • API保证了源码兼容,而ABI保证了二进制兼容,确保对于同一个ABI,目标代码可以在任何系统上正常工作,而不需要重新编译。
  • ABI主要关注调用约定、字节序、寄存器使用、系统调用、链接、库的行为以及二进制目标格式。例如,调用约定定义了函数如何调用,参数如何传递,分别保留和使用哪些寄存器,调用方如何获取返回值。

系统编程需要有ABI意识,但通常没有必要记住它。ABI并没有提供显式接口,而是通过编译器、链接器等来实现。尽管如此,了解ABI可以帮助你写出更优化的代码,而如果你的工作就是编写汇编代码或开发工具链(也属于系统编程范畴),了解ABI就是必需的。

计算机体系结构,计算机组成和计算机实现

简单的来说,计算机体系结构指的是程序员所见到的计算机系统的属性,是概念性的结构与功能特性。如,有无乘法指令,int 的长度是多少。计算机组成指的是实现计算机体系结构所体现的属性。如,乘法指令怎么实现。计算机实现是指计算机组成的物理实现。它着眼于器件技术与组装技术。如,主板使用什么材料,机箱内部怎么布局,以及怎么散热。

所以我们可以这么理解计算机体系结构,计算机组成和计算机实现:

  • 计算机系统结构是指计算机系统的软件与硬件之间的接口
  • 计算机组成是指计算机系统结构的逻辑实现
  • 计算机实现是指计算机组成的物理实现。

计算机的基本组成和工作原理

冯·诺依曼计算机

主要有以下六个特点:

  1. 计算机由五大部件组成:运算器,存储器,控制器,输入和输出设备

  2. 指令和数据以同等地位存于存储器,可按地址寻访(于此不同的有哈佛架构,指令和数据是分开的)

  3. 指令和数据用二进制表示

  4. 指令由操作码和地址码组成

  5. 存储程序(而不是纸带)

  6. 以运算器为中心(也有种说法就是现在的计算机是存储器为中心,因为现在数据都很少经过CPU,大部分数据传输是以内存作为中转中心)

计算机硬件框图

image-20191203084134280

计算机的工作过程

基本概念

存储器

分为主存储器和辅存储器,CPU 只能直接访问主存储器,辅存储器的数据要先到主存储器才能进行访问。

image-20191202162338196

  • 存储单元:存放一串二进制代码,每个存储单元赋予一个地址号
  • 存储字:存储单元中二进制代码的组合
  • 存储字长:存储单元中二进制代码的位数
  • 存储器地址寄存器 MAR:存放访存地址,经过地址译码器译码后可以找到所选的存储单元,2^长度 等于可以寻到址存储单元的个数。(注意寻址范围的单位是比特,即 寻址范围=存储单元个数*存储字长
  • 存储器数据寄存器 MDR:暂存从主存中读或写的信息,长度等于存储字长。

运算器

image-20191202162916795

  • 算数逻辑单元 ALU,Arithmetic Logic Unit:运算器中完成算术逻辑运算的逻辑部件。
  • 累加器 ACC,Accumulator:运算器中运算前存放操作数、运算后存放运算结果的寄存器。(在8086汇编中对应的是 AX)
  • 乘商寄存器 MQ,Multiplier-Quotient Register:乘法运算时存放乘数、除法时存放商的寄存器。(在8086汇编中对应的是 DX)
  • X:此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放操作数。

下面是具体的使用(可以在汇编代码找到对应):

image-20191202163810476

控制器

image-20191202164041000

  • 控制单元 CU,Control Unit,控制器中产生微操作命令序列的部件,为控制器的核心部件。
  • 程序计数器 PC,Program Counter:存放当前欲执行指令(还没执行)的地址,具有计数功能。
  • 指令寄存器 IR,Instruction Register:存放当前欲执行的指令。

取指执行

通常完成一条指令可分为取指阶段和执行阶段。

在取指阶段,通过访问存储可将指令取出;在执行阶段,通过访问存储器可以将操作数取出。这样,虽然指令和数据都是以二进制代码形式存放在存储器中,但 CPU 可以判断在取指阶段访问存储器取出的是指令,而执行阶段取出的是操作数。(虽然都是二进制代码)

取数指令过程

20190822234152677_JYIQPZ

步骤:

取指令(① ~ ④)
① 指令的地址存放在PC中,将地址由PC传给MAR。
② 再将地址由MAR传给存储体。
③ 在控制单元CU的控制下,将指令取出并放入到MDR中。
④ 在控制单元CU的控制下,将指令由MDR传给IR。

分析指令(⑤)
⑤ 将指令的操作码部分由IR传给CU控制单元(由CU对操作码分析并发出相应的控制信号来完成对应操作)。

执行指令(⑥ ~ ⑨)
⑥ 在控制单元CU的控制下,将IR中的地址码部分传给MAR。
⑦ 再将操作数的地址由MAR传给存储体。
⑧ 由存储体将操作数传入MDR中。
⑨ 由MDR将操作数传入ACC当中,至此取数指令执行结束。

存数指令过程

20190822234153160_FYRYCY

和上面的类似,只不过一个是从内存到寄存器,一个是从寄存器到内存。

性能指标

  • 机器字长:CPU 一次能处理数据的位数。
  • 吞吐量:吞吐量指信息流入、处理和流出系统的速率。它取决于 CPU 能够多快地取指令,数据能够多快地从内存取出或存入,以及所得结果能够多快地从内存送到输出设备。这些决定因素中的任一步骤都与主存紧密相关,因此吞吐量主要取决于主存的存取周期。
  • 响应时间:响应时间指从提交作业到该作业得到 CPU 响应所经历的时间。响应时间越短,吞吐量越大。
  • 运算速度:
    • 主频:即CPU的时钟频率。 CPU实际的运算速度不仅要看主频,还要看CPU 的流水线、总线等各方面的性能指标。
    • 吉普森法:\mathrm{T}_{\mathrm{m}}=\mathrm{\Sigma f}_{\mathrm{i}}^{*} \mathrm{t}_{\mathrm{i}} , T 为机器运行速度, m 为指令占全部操作的百分数,t 为指令的执行时间
    • MIPS:Million Instruction Per Second, 每秒百万条指令
    • CPI:Cycle Per Instruction,执行一条指令所需的时钟周期数
    • IPC:Instruction Per Cycle,每个时钟周期平均执行的指令数。
    • FLOPS:Floating Point Operation Per Second ,每秒执行浮点运算次数
  • 加速比:image-20191202170837318
  • 存储容量,主存容量=存储单元个数 × 存储字长,辅存容量

附:GPU 的简介

GPU全称为Graphics Processing Unit,中文为图形处理器,就如它的名字一样,GPU最初是用在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。

为什么GPU特别擅长处理图像数据呢?这是因为图像上的每一个像素点都有被处理的需要,而且每个像素点处理的过程和方式都十分相似,也就成了GPU的天然温床。

GPU简单架构如下图所示:

11351V544-2

从架构图我们就能很明显的看出,GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。

但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。

注:GPU中有很多的运算器ALU和很少的缓存cache,缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为线程thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram。

再把CPU和GPU两者放在一张图上看下对比,就非常一目了然了。

11351SM9-3

GPU的工作大部分都计算量大,但没什么技术含量,而且要重复很多很多次。

借用知乎上某大神的说法,就像你有个工作需要计算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已;而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?

GPU就是用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。

有一点需要强调,虽然GPU是为了图像处理而生的,但是我们通过前面的介绍可以发现,它在结构上并没有专门为图像服务的部件,只是对CPU的结构进行了优化与调整,所以现在GPU不仅可以在图像处理领域大显身手,它还被用来科学计算、密码破解、数值分析,海量数据处理(排序,Map-Reduce等),金融分析等需要大规模并行计算的领域。

所以GPU也可以认为是一种较通用的芯片。

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注