体系结构是操作系统和硬件中间的一个抽象层,对于一款CPU而言,绝对的硬件技术水平不是最重要的,体系结构对指导硬件实现和对于系统发挥性能来说是更关键的部分。本科的时候学过一门课《计算机组成与体系结构》,当时老师懂得多,讲得也很好,奈何当时太年轻,不知道好好学,,ԾㅂԾ,,……今天重新把这些概念拾一拾。
1. 引言
- 计算机的发展
- 计算机生产技术的发展。进步一直很稳定,但近来逼近物理极限。
- 计算机设计的创新。体系结构方面
- 体系结构的成功
- 人们不再使用汇编编程,降低了对目标代码的兼容性
- 出现了独立于厂商的标准化操作系统Unix以及linux等。降低了引入新体系结构的风险、成本。
- RISC体系结构设计的创新点(或者说关键技术)
- 指令级并行的开发。流水线、多指令发射
- 缓存的使用,更复杂的组织和优化方式。
- 单核处理器性能提升结束。硬件复兴结束。以下两大瓶颈,转而寻求一个芯片上提高集成核心的数目,而不是加快单核处理器的速度。
- 风冷芯片最大功耗问题
- 无法有效地开发更多指令级并行
- 转折:处理器性能的提高从单纯依赖指令级并行(ILP),转向数据级并行(DLP)和线程级并行(TLP)。还有请求级并行(RLP)
2. 并行体系结构分类和实现
应用程序中主要有以下两种并行。
- 数据级并行。同时操作许多数据项
- 任务级并行。创建了一些能够单独处理,但大量采用并行方式执行的工作任务
计算机以如下4种主要方式来开发上述两种应用并行
指令级并行。流水线、推理执行、多指令发射
标量流水(Super Scalar) 将一条指令分成若干个周期处理以达到多条指令重叠处理,从而提高cpu部件利用率的技术叫做标量流水技术。
即对每条指令的执行进行更细的划分来支持流水线操作,需要微操作(micro operation)的支持。
超级标量是指cpu内一般能有多条流水线,这些流水线能够并行处理.在单流水线结构中,指令虽然能够重叠执行,但仍然是顺序的,每个周期只能发射(issue)或退休(retire)一条指令.超级标量结构的cpu支持指令级并行,每个周期可以发射多条指令(2-4条居多).这样,可以使得cpu的IPC(InstructionPer Clock) > 1, 从而提高cpu处理速度. 超级标量机能同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件,在程序运行期间,由硬件(通常是状态记录部件和调度部件)来完成指令调度. 超级标量机主要是借助硬件资源重复(例如有两套译码器和ALU等)来实现空间的并行操作.
即 硬件上支持多条指令的流水线。支持乱序发射,乱序执行。
超级流水技术:主要是指硬件上流水线结构切分的更细了,CPU的主频可以提得更高;缺点就是:流水线级数越多,重叠执行的执行就越多,那么发生竞争冲突得可能性就越大。latency也变得更大了。
超长指令字:是一条指令来实现多个操作的并行执行。每条指令长度达上百位,可以执行多个操作,可以减少内存访问次数。
这个级别得并行,是由编译器来决定并且组织得。通常VLIW机只有一个控制器,每个周期启动一条长指令,长指令被分为几个字段,每个字段控制相应的部件。由于编译器需要考虑数据相关性,避免冲突,并且尽可能利用并行,完成指令调度,所以硬件结构较简单。
向量体系结构和图形处理器(GPU)。将单条指令并行应用于一个数据集,以开发数据级并行。大型机,超级计算机
线程级并行。在紧耦合硬件模型中开发并行。此模型允许在并行线程之间进行交互。
请求级并行。在程序员或操作系统指定的大量去耦合任务之间开发并行。
3. 体系结构定义
- 区分计算机体系结构和微结构
- 体系结构(computer architecture)定义的是硬件和软件的接口,并没有指定实现。RISC-V即定义的体系结构。
- 微结构(processor microarchitecture)则描述的是如何设计一个处理器来符合一个体系结构。体系结构并不定义微结构。
- 现有指令集
- CISC指令集的代表:x86和x86-64。
- RISC指令集的代表:ARM(ARMv7,AArch32,AArch64,thumb, thumb2)
- 其他的指令集:MIPS, PowerPC, SPARC
3.1 指令集体系结构设计的7个维度
ISA的分类。被划归到通用寄存器体系结构中。有以下两种主流版本。
- 寄存器-存储器ISA:80x86.许多指令都可以访问存储器。
- 载入-存储ISA:ARM和MIPS。只能用载入load和存储store指令来访问存储器。
存储器寻址。
- ARM和MIPS要求操作对象在存储器中必须是对齐的。即,若对象大小为s,字节地址为A,必须保证A mod s =0 。访问速度会快一些
- 80x86不需要对齐。
寻址模式。可以再回去看微机原理温习一遍。几种架构的寻址模式大同小异。
- MIPS寻址模式:寄存器寻址、立即数寻址和位移量寻址。
操作数的类型和大小。
32位单精度:4个字节存储。64位双精度:8个字节存储。
操作指令.
数据传输指令、算术逻辑指令、控制指令和浮点指令 、IO指令,特殊指令。
控制流指令。均支持条件转移、无条件跳转、过程调用和返回。
- ARM和MIPS过程调用将返回地址放在一个寄存器中
- 80x86将返回地址放在存储器的一个栈内。
ISA的编码。
- 固定长度。ARM和MIPS固定32位指令,简化了指令译码(后来又扩充了支持16位指令,以便缩小程序规模)。
- 可变长度,80x86编码可变长度,变化范围1-18个字节。可以占用较少的空间。
寄存器数目和寻址模式的数目都对指令的大小有显著影响。
3.2 体系结构与微结构的相互影响
- 处理器微结构
- 流水线
- 多发乱序流水线
- 多线程流水线
- 多核
- 特殊流水线:VLWI, vector, GPU
- 体系结构与微结构的互相影响
- CISC和RISC的特性。 RISC的每条指令功能复杂度基本一致,执行时间基本一致,编码长度基本一致,流水线控制简单,指令调度简单,代码密度相对CISC较小。 CISC的指令功能复杂度不一,执行时间长短不一,编码长度也不一样。直接运行导致流水线控制复杂调度困难,一般动态拆做类似RISC的微指令执行。代码密度相对RISC较高。
- 操作数:单指令寄存器个数。从栈寻址到多寄存器寻址在代码密度,流水线调度,执行时间上的考虑。
- 操作数:内存寻址方式。RISC的内存寻址方式单一,调度简单,可做单独流水线,但指令密度高。CISC调度方式复杂,流水线设计复杂,指令密度高。
- 环境变量: 条件执行对流水线的影响。
- 指令编码:RISC编码和CISC编码,解码难度,取址难度,分支预测难度等等。
- 编译器: 编译器是指令集和高级语言的接口。 语言的抽象等级越高,ISA的使用就更加受限:ABI,systemcall,context switching。 通用逻辑寄存器的功能异化,数量对编译器的影响。
- 操作系统:硬件资源的管理者,特权软件。 操作系统需要ISA的支持:控制寄存器,特权指令,内存模型,IO模型等等,hyervisor模式。