您的当前位置:首页现代微处理器体系结构课堂笔记

现代微处理器体系结构课堂笔记

2024-07-16 来源:乌哈旅游



系统结构笔记

第一章绪论

1、背景介绍,市场变化及原因及趋势

2、计算机体系结构基本概念

计算机体系结构的定义

ComputerArchitecture = Instruction Set Architecture +

MachineOrganization +Hardware

指令级结构(InstructionSet Architecture)

研究软、硬件功能分配以及机器级界面的确定,既由机器语言程序设计者或编译程序

设计者所看到的机器物理系统的抽象或定义。但它不包括机器内部的数据流和控制流、

逻辑设计和器件设计等。

计算机组织(ComputerOrganization)

ISA的逻辑实现,包括机器级内的数据流和控制流的组成以及逻辑设计等。它着眼于

机器内各事件的排序方式与控制机构、各部件的功能以及各部件间的联系。

计算机实现(ComputerImplementation

是指计算机组成的物理实现,包括处理机、主存等部件的物理结构,器件的集成度和

速度,器件、模块、插件、底板的划分与连接,专用器件的设计,微组装技术,信号传

输,电源、冷却及整机装配技术等。它着眼于器件技术和微组装技术,其中,器件技术

在实现技术中起着主导作用。

计算机体系结构=ISA+ Organization + Hardware



3、定量分析技术基础

1、计算机系统评价

当客户拿到一组机器时,他们肯定想知道哪个性能最好,哪个价格最低,哪个性价比最高?

而我们设计者则需要最大限度的提高性能,使性价比达到最高,因此我们必须要就基本的

评价标准和方法。

常用性能评价指标:执行时间(CPUTime)、峰值速度(PeakPerformance)、负载

load

开销(overhead)、利用率(utilizationratio)、饱和性能(saturateperformance)、

带宽(bandwidth)、延迟(latency)、吞吐率(throughout)、加速比(speedup)、

Amdahi定律(amdahilaw)、效率(efficiency)、基准测试(benchmark)、

响应时间(responsetime)等等

2、性能度量

性能定义为每秒完成的任务数-biggeris better

如果我们更关心响应时间(responsetime

performanc e ( x )

1

_

time ( x )


execution

X 性能是Y n 倍是指

x

)


n

Performanc e

(



Performanc e

(

y

)

3、性能设计与评测的基本原则

并行性

大概率事件优先原则



所有指令都需要取指令操作,只有部分指令访问数据

优化指令访问操作比优化数据访问操作优先

程序局部性原理:时间局部性、空间局部性

4Amdahl’s定律

Speedup(withE) = 1/((1-F)+F/S)) F fraction(小部分)S指小部分的加速比

CPUtime = CPI * IC * T

CPUtime = Seconds = Instructions x Cycles x Seconds

Program Program Instruction Cycle

执行时间是计算机系统度量的最实际,最可靠的方式

第二章指令集结构设计

对于一种指令集结构,我们必须要知道指令格式或编码方式,操作数和操作结果存放的位

置,数据类型和大小,寻址方式,支持哪些操作,下一条指令的地址(jumpsconditions

branches

1、指令集结构分类

累加器型、堆栈型、通用寄存器型、存储器-存储器型

通用寄存器型占主导地位,因为寄存器比存储器快,对编译器而言,寄存器更容易使

通用寄存器的分类:

优点

缺点

Register-Register

指令格式简单,并且长度固定,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。

指令条数相对较多,目标代码大。




Register-Memory

直接对存储器操作数进行访问,容易对指令进行编码,且其目标代码较小。

指令中的操作数类型不同。指令的操作数可以存储在不同类型的存储器单元,所以每条指令的执行时钟周期数也不尽相同。

Memory-Memory

编码方式紧密,不用为保存临时变量而浪费寄存器空间。

指令字长多种多样。每条指令的执行时钟周期数也大不一样,对存储器的频繁访问将导致存储器访问瓶颈问题。

2、寻址方式

如何解释存储器地址?如何说明寻址方式?

目前几乎所有的机器的存储器都是按字节编址的,当读取一个32位字时,如果每次

一个字节,四次完成,每次一个字,一次就可以了,问题来了:

如何将字节地址映射到字地址(尾端问题)

一个字是否可以存放在任何字节边界上(对齐问题)

对齐问题:对一个s字节的对象访问,地址为A,如果Amod s =0 那么它就是边界对齐的。

边界对齐的原因是存储器本身读写的要求,存储器本身读写通常就是边界对齐的,对

于不是边界对齐的对象的访问可能要导致存储器的两次访问,然后再拼接出所需要的数。

(或发生异常)

重要的寻址方式:

偏移寻址方式,立即数寻址方式,寄存器间址方式

SPEC测试表明,使用频度达到75%--99%

还有其他很多寻址方式,这里就不解释了

3、操作数的类型、表示和大小

操作数类型是面向应用,面向软件系统所处理的各种数据结构

整型、浮点型、字符、字符串、向量类型等



类型由操作码确定或数据附加硬件解释的标记,一般采用由操作码确定

操作数的表示:硬件结构能够识别,指令系统可以直接调用的结构

整型:原码、反码、补码

浮点:IEEE754 标准

十进制:BCD码,二进制十进制表示

单字、双字的数据访问具有较高的频率

4、指令集功能设计

需考虑的因素:速度、价格和灵活性。基本要求:指令系统的完整性、规整性、高效率和

兼容性

完整性设计:具备基本指令种类

兼容性:系列机

高效率:指令执行速度快、使用频度高

规整性:让所有运算部件都能对称、均匀的在所有数据存储单元之间进行操作。对所有数

据存储单元都能同等对待,无论是操作数或运算结果都可以无约束地存放到任意数据存

储单元中

正交性:数据类型独立于寻址方式,寻址方式独立于所要完成的操作

1

2CISC计算机指令集结构的功能设计

目标:增强指令功能,减少指令的指令条数,以提高系统性能

面向目标程序的优化,面向高级语言和编译器的优化

对大量的目标程序机器执行情况进行统计分析,找出使用频度高,执行时间长的指令

或指令串

对于那些使用频度高的指令,用硬件加快其执行,对于那些使用频度高的指令串,用

一条新的指令来代替它

3

4RISC计算机指令结构的功能设计



通过简化指令系统,用最高效的方法实现最常用的指令

充分发挥流水线的效率,减少CPI

硬件方面:硬布线控制逻辑,减少指令和寻址方式的种类,使用固定格式,采用

Load/Store,指令执行过程中设置多级流水线。

软件方面:十分强调优化编译的作用

5、指令格式

指令格式选择策略

如果代码长度最重要,那么使用变长指令格式

如果性能至关重要,使用固定长度指令

有些嵌入式CPU附加可选模式,由每一应用自己选择性能还是代码量

有些机器使用边执行边解压的方式

如果每条指令存在多个存储器操作数,或有多种寻址方式,每一操作数都要说明其寻址

方式

6、编译技术与计算机体系结构

编译优化-4个层次

高层优化:一般在源码上进行,同时把输出传递给以后的优化扫描步骤

局部优化:仅在一系列代码片断之内(基本块)将代码优化

全局优化:将局部优化扩展为跨越分支,并且引入一组针对优化循环的转换

与机器相关的优化:充分利用特定的系统结构



第三章流水线技术

1、流水线技术

流水线技术要点

流水线技术并不能提高单个任务的执行效率,它可以提高整个系统的吞吐率

流水线中的瓶颈——最慢的那一段

多个任务同时执行,但使用不同的资源

其潜在的加速比=流水线的级数

流水段所需时间不均衡将降低加速比

流水线存在装入时间和排空时间,使得加速比降低

由于存在相关问题,会导致流水线停顿

流水线正常工作的基本条件

增加寄存器文件保存当前段传送到下一段的数据和控制信息

存储器带宽是非流水的5

指令流水线通过指令重叠减小CPI

罿充分利用数据通路

当前指令执行时,启动下一条指令

其性能受限于花费时间最长的段:解决办法:

串联:将最慢段进一步划分

并联:增加部件

检测和消除相关



如何有利于流水线技术的应用

所有的指令都等长

只有很少的指令格式

只用Load/Store来进行存储器访问


TP max

1

i

}




max{t



TP

m

i1

t i


n

1 )

t

j


(

n



S

m

i1

n

m

i1

t

i

t

j


t

i

(

n

1 )



E

m

[

m

i1

n

m

i1

t

j

1 )

t


t

i

(

n

j

]

E

TP

m

i1

t

i

m



TP:吞吐率 S加速比 E效率-设备利用效率

2、流水线的相关

采用流水线技术必然会带来流水线相关问题,虽然我们使用等待策略总是可以解决相关,

但是,流水线控制必须能检测相关,否则由软件设计来避免

结构相关同一时间两种方式使用同一资源 (停顿等待)

数据相关在数据未准备好之前,就需要使用数据当前指令的执行需要上一条指令的结果

RAW,WAW,WAR硬件方法:采用定向技术,软件方法:指改变指令顺序,插入缓冲槽,指



令集调度)

RAW(写后读)由于实际的数据交换需求而引起的

WAR(读后写)由于重复使用寄存器名“r1”引起的

DLX5 段基本流水线不会有此类相关因为,所有的指令都是5,并且读操作总是在

2段,而写操作在第5

WAW(写后写)也是由于重复使用寄存器“r1”引起的

DLX5 段基本流水线中,也不会发生。因为所有指令都是5段,并且写操作都在第

5段,在后面的复杂的流水线中我们将会看到WARWAW相关。

控制相关由于控制类指令引起的,试图在条件未评估之前,就做决定

分支需要解决两个问题:分支目标地址(转移成功意谓着PC值不是PC+4),转移条件

是否有效,这两点在DLX中都在流水线的靠后段中确定

译码在ID段后,转移地址必须在ID段后才知道,此时取进来的指令可能是错误的指

解决控制相关的静态方法:

1Stall:直到分支方向确定

2、预测分支失败:直接执行后继指令,如果分支实际情况为分支成功,则撤销流水线

中的指令对流水线状态的更新

DLX分支指令平均47%为分支失败

由于PC+4已经计算出来,因此可以用它来取下一条指令

3、预测分支成功:平均53%DLX 分支为分支成功,但分支目标地址在ID段才能计算

出目标地址

4、延迟转移:选择指令来填充延迟槽

3、异常精确中断非精确中断

异常发生在指令中,并且要求恢复执行,要求==>流水线必须安全地shutdown



PC必须保存,如果重新开始的是一条分支指令,它需要重新执行

引起异常的指令前面的指令都已执行完,故障后的指令可以重新从故障点后执行

理想情况,引起故障的指令没有改变机器的状态

要正确的处理这类异常请求,必须保证故障指令不产生副作用

精确中断对整数流水线而言,不是太难实现

第四章指令级并行

本章研究的是减少停顿(stalls)数的方法和技术

流水线提高的是指令带宽(吞吐率),而不是单条指令的执行速度

相关限制了流水线性能的发挥

结构相关:需要更多的硬件资源

数据相关:需要定向,编译器调度

控制相关:尽早检测条件,计算目标地址,延迟转移,预测

增加流水线的级数会增加相关产生的可能性

异常,浮点运算使得流水线控制更加复杂

编译器可降低数据相关和控制相关的开销

Load延迟槽

Branch延迟槽

Branch预测

1、指令级并行的概念

计算机系统的并行性,从执行程序的角度,分为:



指令内部并行:指令内部的微操作

指令级并行:并行执行两条或多条指令

任务级或过程级并行:并行执行两个或多个过程或任务

作业或程序级并行:在多个作业或程序间并行

从处理数据的角度,并行性等级分为:

字串位串

字串位并

字并位串

全并行

提高并行的三种途径

时间重叠

资源重复

资源共享

ILP:无关的指令重叠执行

流水线的平均CPI

Pipeline CPI = Ideal Pipeline CPI + Struct Stalls + RAW Stalls + WAR

Stalls+ WAW Stalls + Control Stalls

2、硬件方案:指令级并行

为什么要使用硬件调度方案?

在编译时无法确定的相关,可以通过硬件调度来优化

编译器简单

代码在不同组织结构的机器上,同样可以有效的运行



基本思想:允许stall后的指令继续向前流动

DIVD F0,F2,F4

ADDD F10,F0,F8

SUBD F12,F8,F14

允许乱序执行(out-of-orderexecution=>out-of-order completion

硬件方案之一:记分牌

记分牌控制的四阶段

1Issue—指令译码,检测结构相关

如果当前指令所使用的功能部件空闲,并且没有其他活动的指令使用相同的目的寄存器

WAW),记分牌发射该指令到功能部件,并更新记分牌内部数据,如果有结构相关或WAW

关,则该指令的发射暂停,并且也不发射后继指令,直到相关解除.

2Readoperands—没有数据相关时,读操作数

如果先前已发射的正在运行的指令不对当前指令的源操作数寄存器进行写操作,或者

一个正在工作的功能部件已经完成了对该寄存器的写操作,则该操作数有效.操作数有效

时,记分牌控制功能部件读操作数,准备执行。

记分牌在这一步动态地解决了RAW相关,指令可能会乱序执行。

3Execution—取到操作数后执行(EX)

接收到操作数后,功能部件开始执行.当计算出结果后,它通知记分牌,可以结束该条

指令的执行.

4Writeresult—finish execution (WB)

一旦记分牌得到功能部件执行完毕的信息后,记分牌检测WAR相关,如果没有WAR相关,

就写结果,如果有WAR相关,则暂停该条指令。

Example:

F0,F2,F4

DIVD

ADDD

F10,F0,F8




SUBD

F8,F8,F14

CDC6600 scoreboard 将暂停SUBD直到ADDD读取操作数后,才进入WR段处理。

记分牌的主要思想是:允许stall后的指令继续进行处理

可以out-of-orderexecution => out-of-order completion

ID段检测结构相关和WAW相关

6600scoreboard 的缺陷:

没有定向数据通路

指令窗口较小,仅局限于基本块内的调度

功能部件数较少,容易产生结构相关,特别是其Loadstore 操作也是用IU部件完成

结构冲突时不能发射

WAR相关是通过等待解决的

WAW相关时,不会进入IS阶段

动态调度方案之二:TomasuloAlgorithm

Tomasulo算法的三阶段:性能受限于CommonData Bus

1Issue—FP操作队列中取指令

如果RS空闲(nostructural hazard), 则控制发射指令和操作数(renames

registers).消除WARWAW相关

2Execution—operateon operands (EX)

当两操作数就绪后,就可以执行

如果没有准备好,则监测CommonData Bus 以获取结果。通过推迟指令执行避免RAW相关

3Writeresult—finish execution (WB)

将结果通过CommonData Bus 传给所有等待该结果的部件;

表示RS可用






Tomasulo

Scoreboard

流水化的功能部件

多个功能部件

(6 load, 3 store, 3 +, 2 x/÷)

(1 load/store, 1 + , 2 x, 1 ÷)

指令窗口大小: ~ 14 instructions

~ 5 instructions

有结构冲突时不发射

相同

WAR: 用寄存器重命名避免

stall 来避免

WAW:用寄存器重命名避免

停止发射

FU 广播结果

写寄存器方式

罿Control: RS

集中式scoreboard

关于异常处理?

乱序完成加大了实现精确中断的难度

在前面指令还没有完成时,寄存器文件中可能会有后面指令的运行结果.如果这些前面的

指令执行时有中断产生,怎么办?

例如:

DIVDF10, F0, F2

SUBDF4, F6, F8

ADDDF12, F14, F16

需要“rollback”寄存器文件到原来的状态:

精确中断含义是其返回地址为:该地址之前的所有指令都已完成,其后的指令还都没有完

实现精确中断的技术:顺序完成(或提交)

即提交指令完成的顺序必须与指令发射的顺序相同

ReorderBuffer:



提供了撤销指令运行的机制

指令以发射序存放在ROB

指令顺序提交

有效的支持精确中断,推测执行

分支预测对提高性能是非常重要的

推断执行是利用了ROB撤销指令执行的机制

控制相关的动态解决技术

控制相关:由条件转移或程序中断引起的相关,也称全局相关。控制相关对流水线的吞吐

率和效率影响相对于数据相关要大得多

条件指令在一般程序中所占的比例相当大

中断虽然在程序中所占的比例不大,但中断发生在程序中的哪一条指令,发生在一条指令

执行过程中的哪一个功能段都是不确定的

处理好条件转移和中断引起的控制相关是很重要的。

当分支方向预测错误时,不仅流水线中有多个功能段要浪费,更严重的是可能造成程序执

行结果发生错误,因此当程序沿着错误方向运行后,作废这些程序时,一定不能破坏通用寄

存器和主存储器的内容。

动态分支预测方法

基于BPB(BranchPrediction Buffer)

1

2一位预测1-bitBHT

问题:在一个循环中,1-bit BHT 将导致2次分支预测错误

最后一次循环,前面都是预测成功,而这次需要退出循环

第一次循环,由于前面预测为失败,而这次实际上为成功

3

4两位预测2-bitBHT

解决办法:2 位记录分支历史

5



6两级预测

记录转移历史信息

根据所记录的转移历史信息,预测转移的方向

3、多指令流出技术

如何使CPI< 1 两种基本方法

Superscalar:

每个时钟周期所发射的指令数不定(18条)

由编译器或硬件完成调度

IBMPowerPC, Sun UltraSparc, DEC Alpha, HP 8000

该方法对目前通用计算是最成功的方法

(Very)Long Instruction Words (V)LIW:

每个时钟周期流出的指令数(操作)固定(4-16)

由编译器调度,实际上由多个单操作指令构成一个超长指令

目前比较成功的应用于DSP,多媒体应用

1999/2000HP Intel达成协议共同研究VLIW

第五章存储系统

计算机(CPU+存储系统+I/O)冯诺依曼结构是五个部分(控制器,运算器,主存,输入,

输出)

Cpu_time=IC*CPI*I

前面第四章主要讲cpu方面的,通过指令级并行来减少平均的指令执行时间,以及各种相

关及其解决方案(减少stall,和超标量(多发射),来减少CPI



存储系统主要讲cache(提高访存速度)和虚存技术(提高主存容量),主要讲下面四个部

分:映射功能,查找策略,替换策略,写策略.

一、存储层次结构
1

2存储系统的设计目标

通过优化存储系统的组织来使得针对典型的应用平均访存时间最短

基本解决方法:多级层次结构CPU-M1-M2-----Mn

存储系统速度接近速度最快M1,容量和价格接近最大最便宜的Mn

3

4存储层次的工作原理和基本概念

TemporalLocality(时间局部性):保持最近访问的数据项最接近微处理器

SpatialLocality(控件局部性):把地址连续的若干个字构成的块从底层复制到上

一层

Block:(块,不同层次的block大小可能不同)

镜像和一致性问题:高层存储器是低层存储器的一个镜像,高层存储器内容修改必须

反映到低层存储器中去,保持数据的一致性。

寻址:访问数据的方式。

若一组程序对存储器的访问,其中N1次在M1中找到所需数据,N2次在M2中找到数据

HitRate(命中率):存储器访问在较高层命中的比例H=N2/(N1+N2)

HitTime(命中时间):访问较高层的时间,TA1

失效率:访问的块不在存储系统较高层次上的概率

MissRate (失效率)=1- (Hit Rate) = 1 – H N2/(N1+N2)

当在M1中没有命中时,一般必须从M2中将所访问的数据所在块搬到M1中,然后CPU

才能在M1中访问

设传送一个块的时间为TB,即不命中时的访问时间为:TA2+TB+TA1= TA1+TM



TM通常称为失效开销

平均访存时间TA= HTA1+(1-H)(TA1+TM)= TA1+(1-H)TM

5

6常见的存储层次的组织

Registers<-> Memory 由编译器完成调度

cache<-> memory 由硬件完成调度

memory<-> disks 由硬件和操作系统(虚拟管理),由程序员完成调度

二、Cache基本知识

CacheCPU和主存之间的一个高速,小容量的存储器

1、映象规则

当要把一个块从主存调入Cache时,如何放置问题

三种方式

全相联方式: 即所调入的块可以放在cache中的任何位置

直接映象方式:主存中每一块只能存放在cache中的唯一位置一般,主存块地址i

cache中块地址j的关系为:jimod M)Mcache中的块数

组相联映象:主存中每一块可以被放置在Cache中唯一的一个组中的任意一个位置,

组由若干块构成,若一组由n块构成,我们称N路组相联

组间直接映象

组内全相联

cache中有G组,则主存中的第i块的组号K

K= i mod (G),

2、查找方法

显然相联度N越大,实现查找的机制就越复杂,代价就越高



无论直接映象还是组相联,查找时,只需比较tagindex无需参加比较

主存地址格式

Cache结构中主存地址格式:CacheTag 放在高位段,CacheIndex 放中间,字节选择

位放在低位段

Cache Tag

Cache Index

Block offset

Cache标记 块地址 块内地址

Cache地址格式

块地址

Block offset

3、替换算法

主存中块数一般比cache中的块多,可能出现该块所对应的一组或一个Cache块已全

部被占用的情况,这时需强制腾出其中的某一块,以接纳新调入的块,替换哪一块,这

是替换算法要解决的问题:

直接映象,因为只有一块,别无选择

组相联和全相联有多种选择

替换方法

随机法(Random),随机选择一块替换

优点:简单,易于实现

缺点:没有考虑Cache块的使用历史,反映程序的局部性较差,失效率较高

FIFO-选择最早调入的块

优点:简单

虽然利用了同一组中各块进入Cache的顺序,但还是反映程序局部性不够,因为最先

进入的块,很可能是经常使用的块



最近最少使用法(LRU)(Least Recently Used)

优点:较好地利用了程序的局部性,失效率较低

缺点:比较复杂,硬件实现较困难

观察结果(失效率)

相联度高,失效率较低。

Cache容量较大,失效率较低。

LRUCache容量较小时,失效率较低

随着Cache容量的加大,Random的失效率在降低

4、写策略

程序对存储器读操作占26%,写操作占9

写所占的存储器访问比例 9/(100+26+9)大约为7

占访问数据Cache的比例:9/(26+9)大约为25%

大概率事件优先原则-优化Cache的读操作

Amdahl定律:不可忽视“写”的速度

“写”的问题

读出标识,确认命中后,对Cache写 (串行操作)

Cache与主存内容的一致性问题

写策略就是要解决:何时更新主存问题

两种写策略

写直达法(Writethrough)

优点:易于实现,容易保持不同层次间的一致性

缺点:速度较慢



写回法(Writeback)

优点:速度快,减少访存次数

缺点:一致性问题

当发生写失效时的两种策略

按写分配法(Writeallocate):写失效时,先把所写单元所在块调入Cache,然后再进

行写入,也称写时取(Fetchon Write)方法

不按写分配法(no-writeallocate):写失效时,直接写入下一级存储器,而不将相应

块调入Cache,也称绕写法(Writearound)

原则上以上两种方法都可以应用于写直达法和写回法,一般情况下

WriteBack Writeallocate

Writethrough no-writeallocate

三、改进Cache性能的方法

CPU time = (CPU execution clock cycles + clock cycle time

Memorystall clock cycles) x

Memory stall clock cycles = (Reads x Read miss rate x Read miss penalty + Writes

x Write miss rate x Write miss penalty)

Memory stall clock cycles = Memory accesses x Miss rate x Miss penalty

Different measure: AMAT(平均访存时间)

Average Memory Access time (AMAT) = Hit Time + (Miss Rate x Miss Penalty)

Note: memory hit time is included in execution cycles

平均访存时间=命中时间+失效率×失效开销

从上式可知,基本途径

降低失效率



减少失效开销

降低命中时间

1、降低Cache失效率的方法

引起Cache失效的原因可分为三类 3C

强制性失效(Compulsory)

第一次访问某一块,只能从下一级Load,也称为冷启动或首次访问失效

容量失效(Capacity)

如果程序执行时,所需块由于容量不足,不能全部调入Cache,则当某些块被替换后,

若又重新被访问,就会发生失效。

可能会发生“抖动”现象

冲突失效(Conflict(collision))

组相联和直接相联的副作用

若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的

组或块有空闲位置),然后又被重新访问的情况,这就属于冲突失效

从统计规律可知

相联度越高,冲突失效就越小

强制性失效和容量失效不受相联度的影响

强制性失效不受Cache容量的影响

容量失效随着容量的增加而减少

符合2:1Cache经验规则

即大小为N的直接映象Cache的失效率约等于大小为N/2的两路组相联的Cache失效

率。

降低失效率的基本方法

增大块大小:减缓强制性失效(控件局部性原理),



可能会增加冲突失效(因为在容量不变的情况下,块的数目减少了)

失效开销增大(上下层间移动,数据传输时间变大)

设计块大小的原则,不能仅看失效率

原因:平均访存时间= 命中时间+失效率×失效开销

增大Cache容量:对冲突和容量失效的减少有利

提高相联度8路组相联在降低失效率方面的作用已经和全相联一样有效

会增加命中时间

伪相联技术:也称为ColumnAssociate(列相联)。该方法能获得多路组相联Cache

低失效率,又能保持直接映象的Cache命中速度。先以直接映象方式查找块

如果失效,查找另一块

另一块入口地址,即将索引字段最高位取反

如果还是失效,只好再访问下一级存储器

问题

具有一快一慢的命中时间,对应于正常命中和伪命中

如果直接映象Cache里的许多快速命中在伪相联中变成慢速命中,那

么这种优化措施反而会降低整体性能

解决问题的简单方法:交换两块的内容

编译优化技术:无需对硬件做任何改动,通过软件优化降低失效率。

减少指令失效,重新组织程序(指令调度)而不影响程序的

正确性

减少数据失效,主要通过优化来改善数据的空间局部性和时间局部

性,基本方法为:

数据合并(page212数组合并)



内外循环交换循环融合

分块

通过预取可帮助减少强制性失效,必须小心不要把你需要的东西换出去,需要预测比较

准确(对数据较困难,对指令相对容易)

2、减少Cache失效开销

减少CPU与存储器间性能差异的重要手段

平均访存时间=命中时间+失效率×失效开销

基本手段:

多级Cache技术(MultilevelCaches):采用两级Cache

CPU无关,重点是CacheMemory之间的接口

问题:为了使Memory-CPU性能匹配,到底应该把Cache做的更快,还

是应该把Cache做的更大

答案:两者兼顾。二级Cache–降低失效开销(减少访问存储器的次数。

带来的复杂性:性能分析问题

性能参数

平均访存时间=命中时间L1+失效率L1×失效开销L1

罿失效开销L1= 命中时间L2+失效率L2×失效开销L2

AMAT

=

HitTimeL1+MissrateL1×(HitTimeL2+Miss

rateL2×Miss

penaltyL2)

对第二级Cache,系统所采用的术语

局部失效率:该级Cache的失效次数/到达该级Cache的访存次数

全局失效率:该级Cache的失效次数/CPU 发出的访存总次数

子块放置技术(Sub-blockPlacement)

在减少Tag数量的同时,减少CacheMemory之间的数据传送量



增加块大小是减少Tag数量的有效手段,但增加了CacheMemory之间

的数据传送量,从而加大了失效开销

解决方法:将大块分成若干小块,其中每一小块共享Tag域,并增加Va表示该子

块是否有效。

CacheMemory之间的最小数据传送单位为子块,从而降低了Cache

Memory间的数据传送量,以减少失效开销

请求字处理技术(CriticalWord First and Early Restart)

尽早重启动:只要所请求的字到达,立即发送给CPU,让等待的CPU尽早重启

动继续执行,让其余字的传送与CPU的执行并行。

请求字优先:调块时,首先向存储器请求CPU所需要的字,请求字一到达就发

CPU,让CPU继续执行,同时从存储器中调入其他字。

让读优先于写(GivingPriority to Read Misses over Writes)

WriteBuffer (写缓冲),特别对写直达法更有效

CPU不必等待写操作完成,即将要写的数据和地址送到WriteBuffer 后,CPU

继续作其他操作。

写缓冲导致对存储器访问的复杂化

原因:在读失效时,写缓冲中可能保存有所读单元的最新值,还没有写回。

解决问题的简单方法1:推迟对读失效的处理,直到写缓冲器清空,导致新的

问题——读失效开销增大。

另一办法2:在读失效时,检查写缓冲的内容,如果没有冲突,而且存储器可

访问,就可以继续处理读失效

由于读操作为大概率事件,需要读失效优先,以提高性能

合并写(MergingWrite Buffer)

非阻塞Cache技术

罿预取技术

3、通过并行操作减少失效开销或失效率



非阻塞Cache技术(NonblockingCaches to Reduce stalls on Cache Misses)

对有些允许乱序执行的机器(采用动态调度方法),CPU无需在Cache失效时等待。

即在等待数据Cache失效时,可以继续取指令。

采用非阻塞Cache或非锁定Cache技术,在某一Cache失效时,仍然允许CPU进行

其他的命中访问,可以有效地提高CPU性能。

硬件预取技术(HardwarePrefetching of Instructions and Data)

VictimCache, Pseudo Associative Cache 可以在不影响处理器时钟的频率下,降低

失效率,预取技术也能实现这一点

CPU在执行这块代码时,硬件预取下一块代码,因为CPU可能马上就要执行这块代

码,这样可以降低或消除Cache的访问失效

当块中有控制指令时,预取失效

预取的指令可以放在Icache中,也可以放在其他地方(存取速度比Memory块的地

方)

注意:预取是利用存储器的空闲带宽,而不是与正常的存储器操作竞争。

编译器控制的预取技术(Compiler-ControlledPrefetching)

ISA中增加预取指令,让编译器控制预取

预取的种类

寄存器预取:把数据取到R

Cache预取:只将数据取到Cache中,不放入寄存器

故障问题

两种类型的预取可以是故障性预取,也可以是非故障性预取

所谓故障性预取指在预取时若出现虚地址故障,或违反保护权限,就会有异常发生

非故障性预取,如导致异常就转化为空操作。

只有在预取时,CPU可以继续执行的情况下,预取才有意义

Cache在等待预取数据返回的同时,可以正常提供指令和数据,称为非阻塞Cache



或非锁定Cache

循环是预取优化的主要目标

失效开销较小时,Compiler简单的展开一两次,调度好预取与执行的重叠

失效开销较大时,编译器将循环体展开多次,以便为较远的循环预取数据

由于发出预取指令需要花费一条指令的开销,因此要避免不必要的预取

4、减少命中时间

容量小,结构简单的Cache

容量小,一般命中时间短,有可能做在片内

罿另一方案,保持Tag在片内,块数据在片外,如DECAlpha

第一级Cache应选择容量小且结构简单的设计方案

虚拟Cache

物理地址CacheVA通过TLB产生物理地址,然后存取Cache

缺点:需要中间的转换过程,导致命中时间拉长

基本思路:对于支持VMCPU,采用虚拟Cache

即直接能以VA来判定是否命中

流水线化Cache访问

将地址转换和访问Cache分开,分别安排在流水线的不同段中

四、主存

存储器的访问源:取指令、取操作数、写操作数和I/O

种类:DRAMSRAM

存储器性能指标



容量、速度和每位价格

访问时间(AccessTime)

存储周期(CycleTime)

解决存储器频带问题的三种途径:多个存储器并行工作,设置各种缓冲器,Cache存储系

提高主存性能的方法

增大存储器的宽度(并行访问存储器):最简单直接的方法

优点:简单、直接,可有效增加带宽

缺点:增加了CPU与存储器之间的连接通路的宽度,实现代价提高主存容量扩充时,

增量应该是存储器的宽度,写操作问题(部分写操作)

冲突问题

取指令冲突,遇到程序转移时,一个存储周期中读出的n条指令中,后面的指令将无

读操作数冲突。一次同时读出的几个操作数,不一定都有用

写操作冲突。这种并行访问,必须凑齐n个字之后一起写入。如果只写一个字,必须

先把属于同一个存储字的数据读到数据寄存器中,然后在地址码的控制下修改其中一个

字,最后一起写。

读写冲突。当要读写的字在同一个存储字内时,无法并行操作。

冲突的原因

从存储器本身看,主要是地址寄存器和控制逻辑只有一套。如果有n个独立的地址寄存器

n套读写控制逻辑,那么第34种冲突自然解决,第12种冲突也会有所缓解。

采用简单的多体交叉存储器

一套地址寄存器和控制逻辑

存储器芯片组织为多个体(Bank

存储体的宽度,通常为一个字,不需要改变总线的宽度



目的:在总线宽度不变的情况下,完成多个字的并行读写

缺陷:不能对单个体单独访问,对解决冲突没有帮助,逻辑上是一种宽存储器,对各个存

储体的访问被安排在不同的时间段

独立存储体

目的:可对单个存储体独立操作

多处理机系统,I/OCPUhitunder n misses, 非阻塞Cache)

思路:有多个存储控制器,每个体有独立的地址线,可能有独立的数据线

多体交叉方式中访存操作和数据传送重叠;独立存储体完全重叠

独立存储体方式与多体交叉方式的结合

主存系统由若干独立存储体构成

独立存储体内,按多体交叉方式组织

避免存储体冲突:两个访问请求访问同一个体

五虚拟存储器

允许应用程序的大小,超过主存容量。目的是提高存储系统的容量

帮助OS进行多进程管理

每个进程可以有自己的地址空间

提供多个进程空间的保护

可以将多个逻辑块映射到共享的物理存储器上

静态重定位和动态重定位

应用程序运行在虚地址空间

虚实地址转换对用户是透明的

虚拟存储管理的是主存-辅助存储器这个层面上



失效:页失效或地址失效

块:页或段

CacheVM的区别

目的不同:Cache是为了提高访存速度,VM是为了提高存储容量

替换的控制者不同:Cache失效由硬件处理,VM的页失效通常由OS处理

一般页失效开销很大,因此替换算法非常重要

地址空间:VM空间由CPU的地址尺寸确定,Cache的大小与CPU地址尺寸无关

下一级存储器

Cache下一级是主存

VM下一级是磁盘,大多数磁盘含有文件系统,文件系统寻址与主存不同,它通常在I/O空间中,VM的下一级通常称为SWAP空间

页式管理和段式管理
VM可分为两类:页式和段式
页式:每页大小固定
段式:每段大小不等
映象规则
选择策略:低失效率和复杂的映象算法,还是简单的映射方法,高失效率
由于失效开销很大,一般选择低失效率方法,即全相联映射
查找算法-用附加数据结构
固定页大小-用页表VPN>PPNTag标识该页是否在主存
可变长段-段表:段表中存放所有可能的段信息,段号->段基址再加段内偏移量,可能由许多小尺寸段
页表
页表中所含项数:一般为虚页的数量
功能:VPN>PPN,方便页重新分配,有一位标识该页是否在内存
替换规则
LRU是最好的,但真正的LRU方法,硬件代价较大
用硬件简化,通过OS来完成
为了帮助OS寻找LRU页,每个页面设置一个usebit
当访问主存中一个页面时,其usebit置位
OS定期复位所有使用位,这样每次复位之前,使用位的值就反映了从上次复位到现在 的这段时间中,哪些页曾被访问过。

当有失效冲突时,由OS来决定哪些页将被换出去。



写策略:总是用写回法,因为访问硬盘速度很慢。

页面大小的选择
页面选择较大的优点,减少了页表的大小,如果局部性较好,可以提高命中率
页面选择较大的缺点,内存中的碎片较多,内存利用率低,进程启动时间长,失效开销加大TLBTranslationlook-asideBuffer)
页表一般很大,存放在主存中。,导致每次访存可能要两次访问主存,一次读取页表项,一次读写数据
解决办法:采用TLB
存放近期经常使用的页表项,是整个页表的部分内容的副本。

速度至关重要
TLB过小,意义不大
TLB过大,代价较高
相联度较高(容量小)



以下无正文

仅供个人用于学习、研究;不得用于商业用途。

Forpersonal use only in study and research; not for commercial use.

仅供个人用于学习、研究;不得用于商业用途。

Nurfür den persönlichen für Studien, Forschung, zu kommerziellenZwecken verwendet werden.

Pourl 'étude et la recherche uniquement à des fins personnelles; pas àdes fins commerciales.

仅供个人用于学习、研究;不得用于商业用途。то л ь к о для людей, которые используются дляобучения, исследований и не должны

использоватьсяв коммерческих целях.

显示全文