摘要:本文主要介绍近年来出现的解决处理器和存储器之间速度差异的一些新方法,如PIM、面向数据流的高性能计算和地址压缩等。
关键词:处理器;存储器;PIM数据流;高性能计算;地址压缩
引言
存储器在系统中扮演的角色是存储CPU工作所需的和其产生的所有数据。一个理想的存储系统能够将CPU所需要的数据立即提供给它,但这仅仅是一个理想的存储系统而已,要想实现这个目标是不符合实际的。存储器的三要素(容量、速度和代价)之间是相互对立的。所以长期以来,应用最广泛的解决方法就是存储器层次化。它所利用的原理就是局部性原理:时间局部性和空间局部性原理。存储器按照层次由上到下的顺序其容量越来越大,速度越来越慢,单位容量代价越来越小。存储器层次化的目标是提供一个代价像最低层次的存储器一样低而速度像最高层次的存储器一样快的存储系统。当前的存储系统一般都划分为以下几个层次:
(1)寄存器
容量最小、速度最快的存储器,它位于CPU中,其管理是由编译器来完成。编译器决定在程序执行的某一点要将哪些数据存储在寄存器中。
(2)Cache
容量较小、速度较快的靠近处理器的高速存储器,它通常是由SRAM组成,用来存储处理器最常用的数据。一旦发生Cache不命中,处理器就要从下一层次的存储器中读取所需的数据。Cache也可以进行层次化组织。
(3)主存储器
Cache的下一层是主存储器,它一般是由DRAM组成,其容量要比Cache大,但存取速度要比Cache慢。
(4)辅存储器
这是位于存储器层次中最低层次的存储器,整个系统中绝大部分的数据存储在这里。
处理器和存储器性能差距的产生
从半导体工艺的发展趋势来看,处理器性能改善的速度远远超过存储器性能的改善。导致处理器和存储器性能差距]的增长有多种原因,半导体工艺分为处理器工艺和存储器工艺两个阵营,且采用不同技术,这导致了它们之间性能差距不断增大。其中,处理器性能每年可提高60%左右,而存储器存取时间的改善每年不到10%。
评价性能的标准
计算机系统的性能与其执行时间直接相关,下列表达式给出了执行时间的表示方法:
TCPU=IC×CPI×PeriodCLOCK
这里IC为所要执行的指令数,CPI为执行每条指令所需的时钟数,PeriodCLOCK为时钟周期。计算机性能取决于处理器和存储器之间的接口,如果接口不适就会使CPI增大从而使得CPU计算时间增加。另外一个可以衡量上面所说的各项指标就是存储器平均存取时间。
TACCESS=THIT+RMISS×TMISS
这里THIT为存储器访问命中时的存取时间,RMISS为存储器访问不命中的比例,TMISS为发生存储器访问不命中时的存取时间。
改善性能差距的方法
传统的解决方法
半导体工艺的提高使得以前一些传统的解决方法呈现出一些生机,下面介绍一些传统的方法。
(1)使用更多的片上Cache
使用更多的Cache可以减少通过互连网络向位于低层次的存储器进行存取的次数,随着半导体工艺的提高现在芯片上的Cache容量可以做的比较大。但是,尽管现在的Cache的容量已经达到了兆级,可以存储大部分应用的即时数据集,但是总有一些应用的数据不能完全放在Cache中,比如分布数据应用和某些大规模的应用。
(2)通过基址寄存器Cache进行地址压缩
由于现在的存储空间不断扩大而使得地址空间也不断增大,需要越来越多的地址线用来在处理器和存储器之间传输地址信息,这些地址信息流具有很大程度上的暂时性和空间局部性。因此,也就具有一定的可预见性。在一个地址字段中只有很少的内容是有效的,因此可以将地址的高位信息存储到动态分配的基址寄存器中,并形成一个地址索引表。在进行地址信息传输时只传输地址的低位字段和高位字段的索引,而不必传输整个地址信息,从而有效提高处理器的有效带宽。
(3)使用更快和更宽的存储器总线
这也是一种最基本的方法,由于存储器带宽就是每秒钟传输的数据总量,因此可以通过提高系统时钟(减小存取时间)和增加存储器总线的宽度来增加存储器带宽。然而对于目前的DRAM来说,这些方法已经达到了它的实际界限。更高频率的时钟就要求系统的时序要求更加严格,从而就需要更加精确的部件,这也给PCB的成型带来许多困难;增加存储器总线的宽度就要增加芯片引脚数目和I/O的功耗,同样也会给PCB的布局带来比较大的难度。尽管现在的存储器封装工艺已经可以应对芯片引脚数目的不断增加,但是由于功耗和代价的原因使得芯片引脚数不会随着处理器速度的增加而不断增加。
一些新方法
近年来,业界针对打破冯·诺依曼结构对系统性能的限制而提出了新方法,主要有以下两种。
(1)PIM(Processor-In-Memory)
PIM结构通过将存储器和处理器集成到同一块芯片上从而避免了在传统计算机系统中的冯·诺依曼结构的瓶颈。图1给出了一个PIM结构的MIND芯片的示意图,可以通过多种互连结构将这种芯片连接成较大的系统。
图1 MIND芯片的结构
芯片中有多个节点可以提供一定的冗余从而具有一定的容错性能。多个节点之间的通信是通过片上的通信来完成的,只有在节点所需要的数据不在本芯片内时才通过系统存储总线与其他芯片进行通信。芯片提供了一些接口来与其他一些设备进行互连,比如这里有系统存储器总线接口、流和后备存储器I/O接口等。图2是一个MIND节点的结构示意图。
图2 MIND节点的结构示意图
MIND在运算中将存储器集成于处理逻辑和控制机制中,这一核心功能是由MIND节点提供的。从图中可以看到存储器堆栈直接与算术逻辑运算部件相连,从存储器中读取到的数据经过重新排序后直接送到ALU进行运算,这样存储器的整个带宽都为ALU所用,降低了存储器存取时间。宽多字的ALU可以同时对不同的字段进行多项操作。与ALU连接的置换网络可以把从存储器堆栈中读出的一整行中的字节重新排列,包括像对齐和一对多的分布等常用的置换操作都可以在一个周期内完成。而这里的宽寄存器堆可以用来存储线程的状态,这样若MIND节点与多线程指令发射部件相结合的话,就可以更好地隐藏系统的延迟,提高系统的性能。
PIM最大优点之一是高带宽,容量为1G的片内DRAM带宽可以达到100~200GB/s。PIM还可降低定制的DRAM与处理器之间的存取延迟。由于PIM大大减少了对外部存储器的访问,而这些操作都需要较大的功耗,因此,PIM可有效地降低芯片功耗。另外,PIM中的存储器可根据不同的应用或者特定的芯片来调整其容量和宽度。由于生产DRAM和逻辑芯片的工艺不同而导致PIM的设计逻辑速度要比纯逻辑芯片上的逻辑速度慢。而且由于PIM芯片中的DRAM部分的温度较高,所以使得存储器单元的速度降低。现在的DRAM可以大量生产,且可以相互替换,这对于PIM芯片来说是一个很大的挑战。此外,对于芯片的可测性设计来说,测试一个PIM芯片的代价要远大于测试一个DRAM芯片的代价。
(2)面向数据流的高性能计算
数据流从存储器(SDRAM)中读到流寄存器中并送到算术运算部件集群中进行计算,计算所得结果被放回流寄存器并最终存取到SDRAM存储器中。数据通过流寄存器可以隐藏存储器延迟,并可以对SDRAM的存取顺序进行重新排序,降低对存储器进行存取的次数以提高系统的性能。图3是一个面向流的计算节点的结构示意图。
图3面向流的计算节点的结构示意图
从图中可以看出增加了流寄存器文件这一层,提高了存储器对ALU中的本地寄存器的供数能力,同时可以将ALU的数量扩展到比较大的规模,提高了系统的计算能力和整体性能。
结束语
本文介绍了近年来出现的几种可以改善处理器和存储器之间性能差距的新方法,每种方法既有它的优点也有它们各自实现方面所面临的挑战。像PIM结构较之传统的结构有更好的带宽和更低的功耗,但是它也面临许多挑战和困难,比如有效的处理不同层次的并行度、地址局部性、负载均衡性、对一些动态和不规则应用的支持以及系统的容错性都是一些需要解决的问题。当然还有许多的方法可以缓解这个问题,如将PIM和面向数据流的计算结合起来也是一种比较好的方法。要对处理器和存储器之间的性能差距问题引起足够的重视,否则它将成为下一代PetaFlops高性能计算机系统的设计不可逾越的障碍。 |