chap1 绪论
1. 国产芯片现状
- MIPS阵营:龙芯
- X86阵营(常见于桌面和服务器):兆芯(VIA),海光(AMD)
- ARM阵营(常见于移动嵌入式、手机平板等):飞腾,海思,展讯,松果
- RISC-V阵营:阿里平头哥玄铁910
2. 冯·诺伊曼结构计算机
2.1 组成
- 硬件系统:运行程序的基本组成部分
- 运算器
- 控制器:控制信号的产生方式包括微程序和硬布线
- 存储器
- 输入输出设备
- 软件系统:系统软件和应用软件
2.2 层次结构
3. 指令集
指令集向上承载的是整个软件生态,向下则规范了以处理器芯片为代表的整个硬件生态。根据一份指令集规范,设计一款处理器,其上可以运行同样遵循该指令集规范所编写的软件代码。故而,我们在提到指令集的时候,有时候也指的是其背后的整个软硬件生态系统,包括外围芯片、操作系统、编译器和诸多应用软件(浏览器、游戏软件等)。定义一个新指令集本身并不是一件难事,但更重要的是如何能吸引整个业界乃至全世界一起来共同建设生态,这需要一种开放共享的理念作为基底。
指令集规范(Specification)和处理器实现(Implementation)是两个不同层次的概念:指令集是规范标准,往往用一本书或几张纸来记录描述,而处理器实现是基于指令集规范完成的源代码
指令集和处理器是不同层次的概念,但都各自有3中知识产权模式
3.1 指令集评价标准
-
1.成本:更小的芯片=一个晶圆中有更多可用芯片=每颗芯片的成本更低
-
2.简洁性
- 更简洁的ISA=更小的芯片面积
- 更简洁的ISA=更简单的设计与验证=更小的人力成本
-
3.性能=程序执行时间
p e r f = t i m e p r o g = i n s t p r o g ∗ c y c l e i n s t ∗ t i m e c y c l e perf=\frac{time}{prog}=\frac{inst}{prog}*\frac{cycle}{inst}*\frac{time}{cycle} perf=progtime=proginst∗instcycle∗cycletime
减小①:编译优化,对应于更好的指令集设计
减小②:体系结构优化
减小③:即增加主频,对电路关键路径优化,后端物理设计优化,依赖于开源EDA工具
-
4.架构和具体实现的分离:不要让指令集手册的定义约束微架构的实现
-
5.提升空间:一方面可以添加指令:变长指令集可以一直添加,而定长指令集总有一天会把操作码空间用完;另一方面可以自由地添加指令:目前基本上只有RISC-V可以做到:设计,实现,生产,销售
-
6.代码大小
- 嵌入式处理器:更小的代码=更小的存储器=更低的成本
- 高性能处理器:更小的代码=更高的缓存命中率=更低的功耗&更高的性能
-
7.易于编程/编译/链接
3.2 RISC-V指令集简介
- 简单:和商业ISA相比简单得多
- 干净的设计
- 没有历史包袱
- 与微结构设计解耦:反例MIPS指令集的延迟槽设计
- 模块化:很小的标准基础指令集,很多的标准扩展
- 为扩展性和定制化而设计
- 变长的指令编码
- 为扩展指令集预留了很多操作码空间
- 稳定
- 通过可选扩展,而不是新版本来进行增强
- 属于开放的RISC-V基金会所有,不受一家公司的决定和沉浮所影响
3.计算机系统性能评价
3.1 非时间指标
3.1.1 机器字长
- 机器一次能够处理的二进制位数:
- 一般与内部寄存器、运算器、数据总线的位数相等
- 早期计算机字长一般为16位,目前常见的有32位和64位字长
- 对计算机性能的影响:字长越长,表示数据的范围就越大,精确度越高
3.1.2 主存容量
- 一台计算机主存所包含的存储单元总数:存储单元数x每个存储单元存储的二进制位数
- 对计算机系统性能的影响:增加主存容量可以减少程序运行期间访问辅存的次数,从而提高程序执行速度
3.2 时间指标
3.2.1 主频
是指CPU内核工作的时钟频率,即CPU内数字脉冲信号振荡的速率,与CPU实际的运算能力之间不是唯一的、直接关系
3.2.2 外频
是指系统总线的工作频率,CPU与主板之间同步运行的速度
标准外频:66MHz、100MHz、133MHz、200MHz、400MHz
3.2.3 倍频
是指CPU主频与外频之间的倍数,即主频=外频*倍频
3.2.4 CPI
是指执行一条指令(平均)需要的时钟周期数
C P I = 一段程序中所有指令的时钟周期数之和 / 指令条数 = Σ ( 程序中各类指令的 C P I ∗ 程序中该类指令的比例 ) \begin{aligned} CPI&=一段程序中所有指令的时钟周期数之和/指令条数 \\ &=\Sigma(程序中各类指令的CPI*程序中该类指令的比例) \end{aligned} CPI=一段程序中所有指令的时钟周期数之和/指令条数=Σ(程序中各类指令的CPI∗程序中该类指令的比例)
3.2.5 IPC
是指每个时钟周期内并行执行的指令条数
CPU性能=IPC x 频率f
3.2.6 MIPS
表示每秒钟执行指令的条数(以百万条为单位)
M I P S = 指令条数 执行时间 ∗ 1 0 6 = 指令条数 ( 所有指令 C P U 时钟周期数之和 / f ) ∗ 1 0 6 = f C P I ∗ 1 0 6 \begin{aligned} MIPS&=\frac{指令条数}{执行时间*10^6} \\ &=\frac{指令条数}{(所有指令CPU时钟周期数之和/f)*10^6} \\ &=\frac{f}{CPI*10^6} \end{aligned} MIPS=执行时间∗106指令条数=(所有指令CPU时钟周期数之和/f)∗106指令条数=CPI∗106f
3.2.7 MFLOPS
表示计算机每秒钟执行浮点操作的次数
3.2.8 CPU时间
执行一段程序所需的时间=CPU时间+I/O时间+存储访问时间+各类排队时延
C P U 时间 = 程序中所有指令的时钟周期数之和 ∗ T = 程序中所有指令的时钟周期数之和 / f = C P I ∗ 指令条数 ∗ T = 指令条数 / ( M I P S ∗ 1 0 6 ) \begin{aligned} CPU时间&=程序中所有指令的时钟周期数之和*T \\ &=程序中所有指令的时钟周期数之和/f \\ &=CPI*指令条数*T \\ &=指令条数/(MIPS*10^6) \end{aligned} CPU时间=程序中所有指令的时钟周期数之和∗T=程序中所有指令的时钟周期数之和/f=CPI∗指令条数∗T=指令条数/(MIPS∗106)