目录

1. 计算机系统结构中的8个伟大思想

1.1 面向摩尔定律设计

1.2 使用抽象简化设计

1.3 加速大概率时间

1.4 通过并行提高性能

1.5 通过流水线提高性能

1.6 通过预测提高性能

1.7 存储器层次

1.8 通过冗余提高可靠性

2. 冯.诺依曼体系结构

2.1 冯.诺依曼体系结构概念

2.2 冯.诺依曼体系结构组成

2.2.1 处理器单元(Processing Unit)

2.2.2 控制器单元(Control Unit)

2.2.3 存储器

2.2.4 输入设备

2.2.5 输出设备

3. 计算机性能

3.1 性能的意义

3.2 性能的定义

3.2.1 响应时间(response time)

3.2.2 吞吐率(throughput)

3.2.3 相互影响

3.2.4 不同应用场景

3.3 性能的度量

3.3.1 墙上时间

3.3.2 CPU执行时间

3.3.3 time命令简介

3.4 CPU性能及影响因素

3.4.1 第一步拆解

3.4.2 第二步拆解

4. 功耗墙

4.1 提高主频遭遇功耗墙

4.2 功耗估算公式

4.3 多核并行优化

4.3.1 从单核向多核转变

4.3.2 并行优化实例:计算向量点积


1. 计算机系统结构中的8个伟大思想

1.1 面向摩尔定律设计

由于计算机设计需要几年时间,因此在项目结束时,单芯片的集成度相对于设计开始时很容易翻一番。所以计算机设计者必须预测其设计完成时的工艺水平,而不是设计开始时

1.2 使用抽象简化设计

提高硬件和软件生产率的主要技术之一是使用抽象(abstraction)来表示不同的设计层次,在高层次看不到低层次的细节,只能看到一个简化的模型

e.g. 指令集体系结构(Instruction Set Architecture)是硬件和底层软件之间的接口,是对硬件层次的抽象

1.3 加速大概率时间

加速大概率事件(common case fast)远比优化小概率事件更能提高性能。大概率事件通常比小概率事件简单,从而易于提高。大概率事件规则要求设计者需要知道什么事件是经常发生的

e.g. 深度学习的计算过程中,99%都是向量和矩阵计算,所以工程师通过使用GPU替代CPU,大幅提升深度学习的模型训练过程

1.4 通过并行提高性能

从计算机的诞生开始,计算机设计者就通过并行执行操作来提高性能

1.5 通过流水线提高性能

流水线(pipepining)是一个特别的并行性场景

1.6 通过预测提高性能

如果从错误预测恢复的代价不高,而预测的准确率相对较高,就可以通过预测(predition)的方式提前开始某些操作,这要比等到确切知道这些操作应该启动时才开始要快一些

1.7 存储器层次

  1. 存储器的速度通常影响性能,存储器的容量限制解题的规模
  2. 程序员希望存储器速度更快、容量更大、价格更便宜,设计师通过存储器层次(hierarchy of memory)来解决这些相互矛盾的需求

1.8 通过冗余提高可靠性

由于任何一个物理器件都有可能失效,因此可以通过使用冗余部件的方式提高系统的可靠性(dependable),冗余部件可以替代失效部件并可以帮助检测错误

补充:现代计算机的特征是处理器的并行性和内存的层次性

2. .诺依曼体系结构

2.1 .诺依曼体系结构概念

无论是个人电脑、服务器还是智能手机,都遵循着同一个"计算机"的抽象概念,即冯诺依曼体系结构

冯诺依曼体系结构即存储程序计算机,其中包含2个概念:"可编程"计算机和"存储"计算机

  1. 可编程:如果程序在计算机硬件层面被固化,计算机就是不可编程的,典型就是老式计算器,电路板设置好了加减乘除,做不了任何固定计算逻辑之外的事情
  2. 存储:程序本身存储在计算机内存中,可以通过加载不同的程序来解决不同的问题。典型的不可存储计算机就是早年的插线板式计算机,通过在板子上不同的插头或接口位置来实现不同的功能

2.2 .诺依曼体系结构组成

2.2.1 处理器单元(Processing Unit

  1. 包含算数逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)
  2. 用来完成各种算术和逻辑运算

说明:运算器也称为数据通路

2.2.2 控制器单元(Control Unit

  1. 包含指令寄存器(Instruction Register)和程序计数器(Program Counter)
  2. 用来控制程序的流程(e.g. 不同条件下的分支和跳转)

说明:在现代计算机中,CPU = ALU + CU

2.2.3 存储器

  1. 指用来存储程序运行时数据(Data)和指令(Instruction)的内存
  2. 更大容量的外部存储器是输入或输出设备

2.2.4 输入设备

为计算机提供信息的装置,e.g. 键盘

2.2.5 输出设备

将计算机结果输出给用户或其他计算机的装置,e.g. 显示器

说明1:任何一台计算机的任何一个部件都可以归类到处理器、控制器、存储器、输入设备和输出设备中

说明2:组成计算机的5个经典部件的关系

① 处理器从存储器中得到指令和数据

② 输入设备将数据写入存储器

③ 输出设备从存储器中读出数据

④ 控制器向处理器、存储器、输入和输出设备发出命令信号

3. 计算机性能

3.1 性能的意义

学习和研究计算机组成原理,就是理解计算机如何运作以及为什么要这么做,而"为什么"所要解决的问题,很多时候就是为了提升性能

3.2 性能的定义

3.2.1 响应时间(response time

也称为执行时间(execution time),是计算机完成某任务所需的总时间,包括硬盘访问、内存访问、IO操作、操作系统开销和CPU执行时间等

3.2.2 吞吐率(throughput

也称为带宽(bandwidth),表示单位时间内完成的任务数量

3.2.3 相互影响

  1. 一般情况下,降低响应时间几乎都可以增加吞吐率
  2. 当需要处理更多任务时,系统可能需要令后续请求排队。在这种情况下,吞吐率的提升会缩短排队等待时间,进而改进响应时间

3.2.4 不同应用场景

不同的应用场景会侧重不同的性能指标,比如,

  1. 个人计算机用户对降低响应时间感兴趣
  2. 数据中心对提升吞吐量感兴趣

说明:在多用户共享计算机的场景下,系统可能更侧重于优化吞吐率,而不是最小化一个程序的响应时间

3.3 性能的度量

3.3.1 墙上时间

时间是一个很自然的衡量性能的指标,而且唯一能被完全可靠测量的计算机性能指标就是时间

对时间最直接的定义是墙上时间(wall clock time),也叫响应时间(response time)和消逝时间(elapsed time),这些术语均表示完成任务所需的总时间,包括了硬盘访问、内存访问、IO操作和操作系统开销等一切时间

3.3.2 CPU执行时间

考虑到上述总耗时以及CPU在多个程序之间切换,我们往往把运行我们自己的任务的时间与一般的响应时间区别开来,使用CPU执行时间来标识

CPU执行时间(CPU execution time):简称CPU时间,执行某一任务在CPU上所花费的时间

用户CPU时间(user CPU time):在程序本身所花费的CPU时间

系统CPU时间(system CPU time):为执行程序而花费在操作系统上的时间

CPU执行时间 = 用户CPU时间 + 系统CPU时间

说明:系统性能和CPU性能

为了标识基于响应时间和基于CPU时间的性能差异,引入如下2个术语,

系统性能(system performance):空载系统的响应时间

CPU性能(CPU performance):用户CPU时间

3.3.3 time命令简介

使用time命令可以统计程序的不同耗时,示例如下,

time命令会返回3个时间值,

  1. real time:Wall Clock Time,即运行程序整个过程中流逝掉的时间
  2. user time:CPU在运行程序过程中,在用户态执行指令的时间
  3. sys time:CPU在运行程序过程中,在内核态执行指令的时间

说明1:程序实际花费的CPU执行时间(CPU Time) = user time + sys time

说明2:3个时间值的关系

根据上述2个示例,可以发现在执行seq程序时,user + sys > real;而在执行ps程序时,user + sys < real

从常理上说,user + sys应该小于real,如果出现示例1的情况,说明该程序被多进程 / 线程或多核运行,一般规则如下,

参考资料:

Why real time can be lower than user time

3.4 CPU性能及影响因素

有了程序的CPU执行时间并不能给优化性能提供指导,所以需要对其进行拆解

3.4.1 第一步拆解

将程序的CPU执行时间变成CPU时钟周期数(CPU Cycles)和时钟周期时间(Clock Cycle)的乘积,即

程序的CPU执行时间 = CPU时钟周期数 * 时钟周期时间

  1. 时钟周期时间是CPU主频的倒数,所以主频越高性能越好(当然散热是个问题)
  2. 时钟周期数是执行程序的所有指令所需的时钟周期

3.4.2 第二步拆解

提升主频可以缩短时钟周期时间,但是这是硬件方案,不在软件控制范围内。因此我们对CPU时钟周期数进行拆分为指令数和每条指令平均时钟周期数(Cycles Per Instruction,CPI)的乘积,即

程序的CPU执行时间 = (指令数 * CPI) * 时钟周期时间

说明1:不同指令的时钟周期数是不同的,比如乘法指令就比加法指令需要更多的时钟周期数,所以才有CPI这个参数;而CPI是会随着指令组合变化的

说明2:优化性能的三个方向

① 时钟周期时间

提高CPU主频

② 每条指令平均时钟周期数(CPI)

流水线技术(Pipeline)可以让一条指令需要的CPU cycle尽可能地少

③ 指令数

依靠编译器对代码的优化,同样的代码,编译成计算机指令时有各种不同的表示方式

4. 功耗墙

4.1 提高主频遭遇功耗墙

根据上文,我们将CPU执行时间分解如下,

程序的CPU执行时间 = (指令数 * CPI) * 时钟周期时间

CPU硬件工程师首先选择提高CPU主频,降低时钟周期时间,具体如下,

  1. 增加CPU上的晶体管数量(更多人干活)

在相同面积下增加晶体管数量,就是平时所说的制程问题,从28nm到7nm,相当于晶体管本身变成原来的1/4大小

2. 提升CPU的时钟频率(干活的速度更快)

由此带来了CPU的功耗墙问题,一个3.8GHz的奔腾4处理器,满载功率为130W(作为参考,飞机上允许携带的充电宝功率为100W),而iPhone X使用的ARM架构CPU功率只有4.5W左右

而功率的增大就带来了耗电和散热问题

补充:CMOS晶体管的功耗来源

① 动态功耗

晶体管在开关过程中产生的功耗,即晶体管的状态从0翻转到1或从1翻转到0时消耗的能量

② 漏电功耗

晶体管在关闭的情况下,还是有泄漏电流存在。在服务器中,典型的电流泄漏占40%的能耗

4.2 功耗估算公式

功耗 ≈ 1/2 * 负载电容 * 电压的平方 * 开关频率 * 晶体管数量

说明1:增加晶体管数量与提高开关频率,在提高CPU主频的同时也增加了功耗

说明2:由于功耗与电压的平方呈正比,所以降低电压可以显著降低功耗(e.g. 电压降低到原来的1/5,功耗会变成原来的1/25)

e.g. 从5MHz主频的8086到5GHz主频的Intel i9,CPU电压已经从5V降低到1V左右。但是电压的持续下降会使晶体管的泄漏电流增大

4.3 多核并行优化

4.3.1 从单核向多核转变

从奔腾4开始,Intel意识到很难再通过提高主频去提升性能,所以开始引入多核CPU,通过提升吞吐率而不是响应时间来提升性能,而不再继续追求降低单个程序运行在单个处理器上的响应时间

4.3.2 并行优化实例:计算向量点积

计算向量W = [W0, W1, ... W15]和向量X = [X0, X1, ... X15]的点积,W · X = W0 * X0 + W1 * X1 + ... + W15 * X15

上述计算需要16次乘法和15次加法组成,可以将上述计算分配给4个CPU允许,每个CPU进行4个乘加,然后再由一个CPU进行汇总,图示如下,

说明1:并不是所有问题都可以通过并行计算来提升性能,需要满足如下条件,

① 需要进行的计算本身可以被分解为几个并行的任务

② 需要能够分解好问题,并确保每个部分的结果可以汇总

并行编程时要处理好调度、负载平衡、通信以及同步的开销

说明2:阿姆达尔(Amdahl)定律

从计算点积的实例可见,最终的汇总阶段是无法并行进行的,需要顺序执行,这就引出了阿姆达尔定律,即

优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间

在计算点积的实例中,每个CPU计算一小段点积就是受优化影响的计算,而最终的汇总则是不受优化影响的计算,图示如下,

深入浅出计算机组成原理01:计算机概要与技术相关推荐

  1. 408计算机组成原理有汇编吗,2021考研408计算机组成原理习题:计算机系统概述

    10月是2021考研学子们备考的突破提升阶段,我们在复习专业课时,需要结合一定量的练习题来查漏补缺.接下来,小编为计算机考研考生们,带来了408统考计算机组成原理习题:计算机系统概述,供考生参考. 2 ...

  2. 【计算机组成原理】计算机系统结构笔记:合集

    200803本篇是郑纬民<计算机系统结构>的读书笔记,欢迎各位路过指正!今天把九章全部更新完毕啦. 0. 分章节目录 [计算机组成原理]计算机系统结构笔记(1):基本概念 [计算机组成原理 ...

  3. 【计算机组成原理】计算机组成原理纠错本

    [计算机组成原理]计算机组成原理纠错本 标签(空格分隔):[考研纠错本] 考研计算机组成原理纠错本 文章目录 考研计算机组成原理纠错本 第一轮 1. 计算机发展历程 2. 计算机系统的层级结构 3. ...

  4. 高校计算机组成原理实验室,计算机组成原理虚拟实验室研究与实现.PDF

    计 算 机 系 统 应 用 2008年 第 2 期 计算机组成原理虚拟实验室的研究及实现 Thestudyand implementofcomputerorganization princile'Sv ...

  5. 电子科大计算机组成原理ppt,电子科技大学,计算机组成原理3计算机组成原理-3-5-组合逻辑控制方式.ppt...

    文档介绍: 3.5组合逻辑控制虽谆煤疟胜尉张型佳腐瞪咕涝递咱砒融外尉绕粥宰墒剥俐拉摆斯绵峪掉海电子科技大学,计算机组成原理3计算机组成原理-3-5-组合逻辑控制方式电子科技大学,计算机组成原理3计算机 ...

  6. 微机原理和计算机组成原理一样吗_计算机组成原理:计算机的层次与编程语言...

    计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...

  7. 计算机组成原理txt,计算机组成原理.TXT.doc

    计算机组成原理.TXT 捍士疫澈揣岔飞所戳佳紧郑襟簇溃瞄填庄肺触懂搬橡勇轩摄蓄誓馆作莆咬羌茨乱蛙腹敬液瓜扮贤侩煮蒂栽漠绵基次托约贰谜猛柠课猪膛穗蕉桂瘸掸梧曾惰蜗盐慌黄苦锄盯多瞩嚎敌沪塔胰响浦熊掏侄醇鸣 ...

  8. 计算机组成原理在线测试,计算机组成原理第01章在线测试

    计算机的运算方法,第 六 章,1. 最少用几位二进制数即可表示任一五位长的十进制正整数? 解:五位长的十进制正整数中,最大的数99999满足条件:216(=65536)99999217(=131072 ...

  9. 计算机体系结构的主要原理,《计算机组成原理》计算机体系结构.pdf

    张 代 远 编 著 计算机组成原理 ● JISUANJI ZUCHENG YUANLI 北 京 邮 电 大 学 出 版 社 ·北 京· 内 容 提 要 本书系统而深入浅出地介绍了计算机组成的基本概念. ...

最新文章

  1. 刚开始Windows Mobile的开发,请大家多多关照
  2. 人类染色质开放状态数据库,ATACdb使用介绍
  3. ITK:按标量乘以图像
  4. HihoCoder - 1558
  5. Windows7休眠状态下载技巧攻略
  6. 地区的json数据_数据密集型系统基础:数据模型与查询语言
  7. R 梯度提升算法①
  8. mysql不记录binlog_MySQL不同的binlog_format会导致哪些SQL不会被记录
  9. Python简单的小实验输出对应车站的中文简写(主要是为了解决汉字编码问题)
  10. 龙果学院mysql分布式集群代码_MySQL分布式集群搭建
  11. windows端口配置
  12. 进击的Libra:路在何方?中国应如何应对?
  13. mac automator 自动操作 使用初探
  14. 2021年茶艺师(初级)考试及茶艺师(初级)考试总结
  15. 超赞!60种数据可视化图表使用场景及制作工具整理大全 !
  16. 一、logo载入界面
  17. 用python画星座_Python 画简易中文星座
  18. 离散选择模型中的分散系数theta到底该放在哪里呢?
  19. HTML、CSS、JavaScript、jQuery
  20. 微信小程序+java后台实现支付(java操作)

热门文章

  1. java bio例子_传统的BIO
  2. Balancing Act(树的重心入门)
  3. mysql被跑死_MySQL 8.0.23中复制架构从节点自动故障转移
  4. JavaScript中的点击事件
  5. java连接mysql url_java连接数据库URL
  6. wireshark找不到接口_wireshark网络小故障分析定位
  7. java集合的存储特征_Java集合常用类特点整理
  8. new ext.toolbar控制按钮间距_新闻速递 | APT携新品金属按钮亮相宝博会,圈粉无数!...
  9. intel 指令集_苹果首款ARM Mac来了,浅谈ARM和Intel处理器
  10. php 上传 excel xlsx_在PHP中创建和编辑Excel电子表格