计算机组成与设计
理解程序性能
算法:决定源代码的数量和执行I/O操作的数量
程序语言,编译器和体系结构:决定每行源代码对应机器指令的数量
处理器和存储器系统:决定指令执行的速度快慢
I/0系统(硬件和操作系统):n决定I/O操作执行的速度快慢
处理器(CPU)内部构成
数据通路:负责完成算术运算
控制器:负责指导数据通路、存储器和I/O设备按照程序的指令正确执行
高速缓冲存储器Cache:快速访问数据的小而快的SRAM存储器
抽象
抽象便于构建复杂系统,掩盖底层计算机系统细节
指令集体系结构(ISA):硬件和底层软件之间的接口
应用二进制接口(ABI):n基本指令集和操作系统接口
实现:相关的细节和接口,遵循体系结构抽象的硬件
数据安全
易失性主存储器:断电时会丢掉所有数据
非易失性二级存储器:
磁盘
闪存
光盘
存储体系
性能的定义
- 响应时间:完成某任务需要的总时间,包括硬盘访问、内存访问、I/O活动、操作系统开销和CPU执行时间等。
 - 吞吐率:也叫带宽,单位时间内完成的任务数量
 
性能的测量
消逝时间:总的响应时间,包括处理时间, I/O操作, OS开销, 空闲时间等
决定了系统的性能
CPU时间:在程序本身花费的时间,不包括等待I/O或者运行其他程序的时间;
包括运行用户程序的时间和操作系统为用户服务花去的CPU时间
CPU时钟
主时钟不断产生固定频率的时钟
时钟周期:一个时钟持续的时间
始终频率:每秒包含的时钟周期数
计算机性能改进:
减少程序的时钟周期数量
增加时钟频率
硬件设计者需要权衡时钟频率和时钟周期数量
指令数和每条指令的平均时钟周期数(CPI)
Amdahl’s Law
在改进计算机的某个方面时期望总性能的提高与改进大小成正比
数据的表示和运算
根据IEEE754标准,浮点数的阶码用移码表示。
对于单精度浮点数的阶码,有8位,则其偏置常数是127,如果阶码的值是2的话,阶码就应该表示为128+2=130的无符号8位二进制的形式(或者将补码的最高一位加1,溢出的不管,也可以得到同样的结果)
计算机的语言
指令集
一台计算机的全部指令
MIPS指令集
寄存器和主存储器
寄存器的访问速度比主存快得多
对主存储器数据的操作要用取数指令lw和存数指令sw。
编译器必须尽量使用寄存器访问变量:
仅仅把不经常使用的变量放到内存(spilling register,寄存器溢出);
寄存器的高效利用对系统优化非常重要
处理器
CPU overview
这张图是为了MIPS指令集而设计的CPU概览,受MIPS指令集的设计影响很大,总体来说,CPU会为每种可能都走一遍,但是由控制器来决定最终选择谁的结果。PC的更新由多选器决定是PC+4还是指令中指定的新的PC;ALU的源操作数可以是两个寄存器或者一个寄存器和立即数;保存到寄存器中的数据可以来自ALU的计算结果或者存储器中取出来的结果。
MIPS流水线
5段,每段一步
IF: 从存储器读取指令
ID: 指令解码并读取寄存器
EX: 执行操作或计算地址
MEM: 访问存储器操作数
WB: 将结果写回寄存器
冒险
结构冒险:需要的资源被占用
数据冒险:需要等待前面指令完成其数据读写操作
控制冒险:根据前面正在执行的指令决策控制操作
结构冒险:在单存储器中的MIPS流水线,Load/Store对存储读/写数据时,取下一条指令的操作只能阻塞到数据访问周期结束,将导致流水线冒泡。因此流水的数据通路需要将指令和数据分别存储。
数据冒险:存在这样的指令,必须依赖于之前访问数据的指令完成
转发(旁路)
分支预测
延长流水线并不能提前确定分支结果
预测分支结果:仅在预测错误时,才发生阻塞
在 MIPS 流水线中:
可以预测分支不发生
预测正确时,分支后的取指操作将不会有任何延迟,流水线全速执行。
静态分值预测和动态分支预测
怎样阻塞流水线
- 将ID/EX 寄存器中的控制变量的值置为0
 - 阻止更新 PC 和 IF/ID 寄存器中的值