当前位置:网站首页>超标量处理器设计 姚永斌 第2章 Cache --2.3 小节摘录
超标量处理器设计 姚永斌 第2章 Cache --2.3 小节摘录
2022-06-11 21:42:00 【岐岇】
2.3 多端口Cache
在超标量处理器中,为了提高性能,处理器需要能够在每周期同时执行多条load/store指令,这需要一个多端口的D-Cache,以便支持多条load/stroe指令的同时访问。
其实在超标量处理器中,有很多重要部件都是多端口结构的,比如寄存器堆register file、发射队列issue queue和重排序缓存ROB等。由于这些部件本身容量不是很大,所以即使采用多端口结构,也不会对芯片的面积和速度产生太大的影响,但是D-Cache不同,它的容量本身就很大,如果采用多端口设计,会有很大负面影响,因此需要采用一些办法来解决这个问题,本节重点介绍True Multi-port、Multi Cache Copies和Multi-banking。
2.3.1 True Multi-port
虽然在现实中,不可能对Cache直接采用多端口设计,但是本节还是看一下这种最原始的方法究竟有何缺点,这种方法使用一个多端口的SRAM来实现多端口的Cache,以一个双端口的Cache为例,所有在Cache中的控制通路和数据通路都需要进行复制,这表示它有两套地址解码器address decoder,使两个端口可以同时寻址Tag SRAM和Data SRAM;有两个多路选择器way mux,用来读取两个端口的数据;比较器的数量也需要增加一倍,用来判断两个端口的命中情况:同时还需要有两个对其器aligner等。Tag SRAM和Data SRAM本身并不需要复制一份,但是它们当中的每个Cell都需要都是支持两个并行的读取操作,但是不需要两个写端口,因为无法对一个SRAM Cell同时写两次。
此种方法需要将很多电路进行复制,因此增大了面积,且SRAM Cell需要驱动多个读端口,因此需要更长的访问时间,功耗也随之增大,所以一般不会直接采用这种方式来设计多端口Cache。
2.3.2 Multiple Cache Copies

将Tag SRAM和Data SRAM进行了复制,与2.3.1节类似,不过是将Cache进行复制,SRAM将不再需要使用多端口的结构,这样可以基本上消除对处理器周期时间的影响。但是,这种方法浪费了很多面积,而且需要保持两个Cache间的同步。例如store指令需要同时写到两个Cache中,当一个Cache line被替换,也需要对另一个Cache进行同样的操作,此设计显然非常麻烦,不是一个很优化的方法,在现代处理器中很少被使用。
2.3.3 Multi-banking
此结构是在现实当中的处理器被广泛使用的方法,它将Cache分为很多小个bank,每个bank都只有一个端口,如果在一个周期之内,Cache的多个端口上的访问地址位于不同的bank之中,那样就不会引起任何问题,只有当两个或多个端口的地址位于同一个bank之中时,才会引起bank conflict。

使用这种方法,一个双端口的Cache仍旧需要两个地址解码器、两个多路选择器、两套比较器和两个对齐器,而Data SRAM此时不需要多端口结构了,这样就提高了速度,并在一定程度上减少了面积。但是由于需要判断Cache的每个端口是否命中,所以对于Tag SRAM来说,仍旧需要提供多个端口同时读取的功能,也就是采用多端口SRAM来实现。
影响这种多端口Cache性能的一个关键因素就是bank冲突,可以采用更多的bank来缓解这个问题,使bank冲突发生的概率尽可能降低,并且还可以提高bank的利用效率,避免有用的数据都集中在一个bank的情况发生,同时,由于每个端口都会访问所有bank,这需要更多的布线资源,有可能对版图设计造成一定的影响。
2.3.4 真实的例子AMD Opteron的多端口Cache
AMD的Opteron系列处理器是64位处理器,但是考虑到现实的需求,处理器的地址并没有使用64位,它的虚拟地址virtual address是48位,物理地址physical address是40位,采用简化地址从而减少硅片面积。
Opteron处理器的D-Cache是双端口的,每个端口都是64位的位宽,双端口以为这这个Cache能够在一个周期内支持=两条load/store指令同时进行访问,它使用了multi-banking的机制来实现这个多端口的功能。
在AMD Opteron处理器的这个Cache中,data block的大小是64字节,需要6位地址进行寻址,每个data block被封为8个独立的bank,每个bank都是64位的单端口SRAM。
整个Cache的大小是64KB,采用2-way组相连,因此每一路的大小是32KB;使用Virtually-index,physically-tag的实现方式,直接使用VA虚拟地址来寻址Cache。因为每一路是32KB大小,因此需要15位地址寻址,又因为每个data block大小是64字节,因此寻址其中的每个字节需要使用VA[5:0],剩下的VA[14:6]用来寻找每个Cache set。
![]()
由于每个Cache line中的data block被划分为8个bank,每个bank是8字节宽的SRAM,所以很自然地使用VA[5:3]来找到某个bank,剩下的VA[2:0]用来从8字节中数据中找到某个字节,这种方式将两个连续的8字节数据放到两个相邻的不同的bank中,利用空间局部性原理,使得对这两个8字节数据访问落在不同的bank中。
由于Cache的每个端口在访问时候,都会同时访问两个way中的数据,然后根据Tag的比较结果来从两个way中选择命中的那个,所以Cache的一个端口在访问的时候,会同时访问到两个bank,每个way各一个。
在支持虚拟存储器的处理器中,最常见的页面大小page为4KB,这需要VA[11:0]来寻找页面内部,因此对于48位的虚拟地址来说,剩下的VA[47:12]就作为VPN(Virtual Page Number)来寻址TLB,得到物理地址中PFN(Physical Frame Number)[39:12],它用来和Tag部分进行比较,判断是否命中。
对于一个2-way组相连的Cache来说,相比于单端口的实现方式,两个端口的实现方式所需要的控制逻辑电路基本上扩大了一倍,需要两个TLB、两个Tag比较器,还需要两倍Tag存储器,Opteron处理器采用将Tag SRAM复制一份来实现双端口的SRAM,当然也可以采用真实的双端口SRAM来实现这个功能,面积也不会减少多少,速度还会变慢。
除了Cache中存储数据的Data SRAM没有被复制之外,其他的电路基本上被复制一份,因此采用multi-banking方式来实现双端口的Cache,面积会增大很度,但是它的好处是速度比较快,对处理器的周期时间有比较小的负面影响。
边栏推荐
- Leetcode-129- sum of numbers from root node to leaf node
- 带有 ceph-csi 的静态 PVC
- 领先企业推进智慧财务的同款效率工具,赶快了解一下?
- 多态的所有特征
- Leetcode-104- maximum depth of binary tree
- Take off efficiently! Can it be developed like this?
- Customer information management software
- B. Phoenix and Beauty
- Uncover the secret of the popular app. Why is it so black
- How to realize double speed playback and fast forward for restricted ckplayer players
猜你喜欢

Leetcode-155-minimum stack

R语言相关文章、文献整理合集(持续更新)

In the future, cloud expansion technology is expected to be selected as a specialized, special and new enterprise in Shanghai

All inherited features

C语言实现八种排序(2)

Add anti debugging function to game or code (application level)

Classes and objects (1)

类与对象(3)

All features of polymorphism

Release of version 5.6 of rainbow, add multiple installation methods, and optimize the topology operation experience
随机推荐
Bipartite King
类和对象(2)
「大模型」之所短,「知识图谱」之所长
69. x的平方根
In the future, cloud expansion technology is expected to be selected as a specialized, special and new enterprise in Shanghai
[niuke.com] DP30 [template] 01 Backpack
类和对象(4)
Nmap进行主机探测出现网段IP全部存活情况分析
Rexroth overflow valve zdb6vp2-42/315v
Add anti debugging function to game or code (application level)
LaTex实战笔记 3-宏包与控制命令
Builder pattern
Leetcode-104- maximum depth of binary tree
Classes and objects (4)
Codeworks round 739 (Div. 3) problem solving Report
Redis data type (string)
Redis basic data type (set)
zypper命令使用示例
All inherited features
Popular science | what are the types of NFT (Part 1)