4.2 存储器读写指令的发射与执行1
来源:互联网 发布:柏曼灯具怎么样知乎 编辑:程序博客网 时间:2024/06/08 06:53
在CPUCore中,一条存储器指令首先经过取值,译码,Dispatch等一系列操作后,率先到达LSU(Load/Store Unit)部件。LSU部件可以理解为存储器子系统的最高层,在该部件中包含Load Queue与Store Queue。其中Load Queue与Store Queue之间有着强烈的耦合关系,因此许多处理器系统将其合称为LSQ。在多数处理器的存储器子系统中,LSU是最顶层,也是指令流水线与Cache流水线的联系点。
LSU部件是指令流水线的一个执行部件,其上接收来自CPU的存储器指令,其下连接着存储器子系统。其主要功能是将来自CPU的存储器请求发送到存储器子系统,并处理其下存储器子系统的应答数据和消息。在许多微架构中,引入了AGU计算有效地址以加速存储器指令的执行,使用ALU的部分流水处理LSU中的数据。而从逻辑功能上看,AGU和ALU所做的工作依然属于LSU。
在一个现代处理器系统中,LSU部件实现的功能较为类同。LSU部件首先要根据处理器系统要求的Memory Consistency模型确定Ordering,如果前一条尚未执行完毕存储器指令与当前指令间存在Ordering的依赖关系,当前指令不得被Schedule,此时将Stall指令流水线,从来带来较为严重的系统惩罚;LSU需要处理存储器指令间的依赖关系,如对同一个物理地址的多次读写访问,并针对这种Race Condition进行特殊优化;LSU需要准备Cache Hierarchy使用的地址,包括有效地址的计算和虚实地址转换,最终将地址按照L1 Cache的要求将其分别送入到Tag和状态阵列。
L1 Cache层面需要区分是存储器读和存储器写指令。无论是存储器读还是写指令穿越LSU部件的过程均较为复杂。为缩短篇幅,下文重点关注存储器读指令的执行。存储器读操作获得物理地址后将进行Cache Block的状态检查,是Miss还是Hit,如果Cache Hit,则进行数据访问,在获得所需数据后更新在LSU中的状态信息。
如果在L1Cache中Miss,情况略微复杂一些。在现代处理器系统中,Non-Blocking Cache基本上是一个常识般的需求,为此首先需要在MSHR中分配空余Entry,之后通过L1 Cache Controller向其下Memory Hierarchy发送Probe请求。
在L1 CacheController中,大多使用Split Transaction发送这个Probe请求,之后经过一系列复杂的操作,这个操作涉及多核之间的Cache一致性,不同的一致性协议对此的处理不尽相同。在获取最终数据之后,回送Reply消息。LSU在收到这个Reply消息后将数据传递给指令流水线,并释放MSHR中的对应Entry。
以上这些操作可以并行执行,如使用VirtualCache方式可以直接使用虚拟地址,而无需进行虚实地址转换,可以将数据访问与Tag译码部件重叠,更有一系列预测机制进一步缩短数据Cache访问的延时。
存储器写的过程较存储器读复杂一些,在L1Cache Hit时,会因为状态位的迁移而带来一系列的Bus Traffic;如果在L1 Cache Miss,要首先取得对访问数据的Ownership或者Exclusive。获得Ownership的步骤与存储器读发生Miss时类似,但是只有在存储器写Commitment时,才能将数据真正写入到Cache中。
在微架构的设计中,缩短Cache的访问延时与提高带宽是Cache流水设计的一个永恒话题。这些话题可以空对空的讨论,搭建各类模型得出最后的量化分析报告。但是这些报告面对着ccNUMA处理器多级Cache设计的复杂度时,显得如此苍白无力。
下文以AMD的Opteron微架构为主,进一步说明存储器读写的执行过程。我们从Cache Hit时的Load-Use Latency这个重要参数的分析开始,进一步介绍Cache Hierarchy性能的评价标准,最后详细说明Opteron微架构的LSU部件的工作原理。
在多数微架构的数据手册中,Load-UseLatency的计算是从指令进入LSU之后开始计算,以指令从Cache Hierarchy中获得最终数据作为结束。在不同的场景,如其下的Cache Hit或者Miss时,所得到的Load-Use Latency参数并不相同。
在CacheHit时,AMD Opteron微架构凭借着Virtual Cache,使得其L1 Cache的Load-Use Latency仅为3个Cycle[6],这是一个非常快的实现。在Intel近期发布的Sandy Bridge中,L1 Cache的Load-Use Latency也仅为4个Cycle[69]。这个参数不能完全反映在一个处理器系统中Cache Hierarchy的整体Hit Time参数和存储器平均访问时间,远不能仅凭这一个参数得出Opteron的Cache Hierarchy结构优于Sandy Bridge微架构的结论。
从许多Benchmark的指标上看,Sandy Bridge微架构在Cache Hierarchy中的表现远胜于Opteron,Virginia STREAM的测试结果表明Opteron在Copy,Scale,And和Traid测试指标上优于Pentium4,却落后于使用Nehalem Xeon的Apple Mac Pro 2009,如表4-1所示。
表4-1STREAM "standard"results[71]
Data
Machine ID
ncpus
COPY
SCALE
ADD
TRAID
2000.12.23
Generic_Pentium4-1400
1
1437.2
1431.6
1587.7
1575.4
2005.02.04
AMD_Opteron_848
1
4456.0
4503.6
4326.3
4401.4
2009.10.23
Apple_Mac_Pro_2009
1
8427.6
8054.4
8817.4
8953.4
Copy,Scale,And和Traid是Virginia STREAM定义的4个操作。其中Copy操作与a(i) = b(i)等效;Scale与a(i) = q×b(i)等效;Add与a(i) =b(i) + c(i)等效;而Traid与a(i) =b(i) + q×c(i)等效。由以上操作可以发现,STREAM的测试结果不仅和Cache层次结构相关,而且与主存储器带宽和浮点运算能力相关。这一测试指标并不能作为Opteron和Nehalem微架构Cache层次结构孰优孰劣的依据。与存储器测试相关的另一个工具是lmbench,不再细述。
这些Benchmark程序在相当程度上反映了Cache和存储器子系统的性能。但是在一个实际项目的考核中依然只能作为参考。对于这个设计,最好的指标一定从自身的应用程序中得出的。很多人会对这个说法质疑,因为许多应用程序的书写异常糟糕,没有用到很多的优化手段。但是面对着由数千万行组成,积重难返的应用程序,更多的人剩下的只有无奈。
在Intel的Nehalem和Sandy Bridge微架构中,FLC访问延时均为4个Cycle[12][69],一个可能的原因是,Intel x86处理器在Pentium IV后并没有采用VIPT(Virtually Indexed and PhysicallyTagged)方式[12][68]组织L1 Cache,而采用了PIPT(Physically Indexed and PhysicallyTagged)方式[1]。Opteron微架构使用VIPT方式,访问L1 Cache时可以直接使用Virtual Address,从而可以节省一个时钟周期。但是Opteron的总线位数只有为64位。AMD最新的Bulldozer微架构,将总线位数提高为128b后,Load-Use Latency提高为4。
确定存储器平均访问时间除了需要考虑Hit Time参数之外,还需要考虑Miss Penalty参数,Virtual Cache并不能解决所有问题。当L1 Cache Miss时,Opteron微架构访问PIPT结构的L2 Cache时,依然需要使用TLB,TLB译码过程最终不会省略。
采用Virtual Cache还会带来CacheSynonym/Alias问题,需要设置RTB(Reverse TranslationBuffer)解决这一问题。使用这种方法除了要使用额外的硬件资源,而且在多核系统中还引入了TLB Consistency的问题。在一个微架构的设计中,Virtual Cache和Physical Cache间的选择依然是一个Trade-Off。
在抛开VirtualCache的讨论后,我们专注讨论LSU部件。在现代处理器系统中,为了提高存储器读写指令的执行效率,一个微架构通常设置多个LSU部件,这些LSU不是简单的对等关系,而是有相互的依赖关系。
简单对等相当于在一个微架构中设置了多个功能一致,异步执行的LSU部件。为了保证处理器系统Memory Consistency Model的正常运行,这些异步操作需要在运行的某个阶段进行同步处理,从而带来了较大的系统复杂度。这不意味着不采用这种对等设计可以避免这些同步问题,只是相对容易处理。
在多数微架构中,多个LSU部件间通常是各司其职,并非完全对等。Opteron微架构的LSU部件也是采用了非对等的两个LSU部件。在介绍这些内容之前,我们需要了解Opteron微架构的基本组成结构和流水线示意,如图4‑2所示。
在Opteron微架构中,存储器指令通过Fetch,decode,Dispatch阶段,并在所有Operands准备就绪后,经由Scheduler launch到对应的执行部件。上图中的Res部件全称为Reservation Station,这是Scheduler的一个重要组成部件。其中存储器读写指令需要使用Integer Scheduler,在这个Scheduler中包含一个AGU和一个ALU。
Opteron微架构与存储器指令执行相关的部件由Integer Scheduler,Load/Store Queue,L1 Cache和其下的存储器子系统组成。Load/Store Queue即为上文多次提及的LSQ,是Opteron LSU部件的重要组成部分。在LSU部件中除了具有LSQ之外,还有许多异常复杂的控制逻辑和与指令流水线进行数据交换的数据通路,是一个微架构的存储器子系统设计的起始点,是存储器指令的苦难发源地。
[1]尚无可靠详细资料说明SandyBridge的L1 Cache是VIPT还是PIPT。
- 4.2 存储器读写指令的发射与执行1
- 4.2 存储器读写指令的发射与执行2
- 简述 典型处理器(如Cortex A9)中一条存储器读写指令的执行全过程
- 汇编基础笔记1 cpu与存储器的读写
- 存储器、运算器、控制器基本结构以及一条指令的执行
- CPU对存储器的读写
- SWJTU计算机组成实验C-实验七 指令存储器与取指令部件的设计
- 程序数据动态执行与存储器功能
- 程序存储器 指令寄存器 程序计数器(PC,IP) 地址寄存器的区别与联系
- 二、cpu对存储器的读写
- PCI总线的存储器读写总线事务
- 1.7CPU对存储器的读写
- 1.7CPU对存储器的读写
- 随机读写存储器 (SRAM存储器 && DRAM存储器)
- 红外线的接收与发射(IR)
- 基于STC90C54RD+的红外捕获与发射
- 指令周期与存储器层次,系统加速三大方式
- 存储器与CPU的连接
- 第3章 Coherency and Consistency
- 3.1 Cache Coherency
- 第4章 Cache的层次结构
- 站长网播报:电视盒子遭封杀 1000多人卷入微信传销案
- 4.1 Cache层次结构的引入
- 4.2 存储器读写指令的发射与执行1
- 4.2 存储器读写指令的发射与执行2
- 软件开发本质论——自然之路
- 4.3 Cache Controller的基本组成
- 4.4 To be inclusive or not to be…
- 用vector容器写职工管理系统
- 4.4 To be nclusive or not to be…
- 4.5 Beyond MOESIF 1
- 4.5 Beyond MOESIF