旧闻新看:一文看懂算力核心HBM的技术特点
DDR就是双倍速率。
以1600MHz的内存条为例,X64的位宽,带宽就是:
1600MHz*2倍速率*64bit/8/1000=3.2*8=25.6GB/s;
以8Channel的Intel ICX处理器为例,带宽可以达到8*25.6GB/s=204.8GB/s;
以8Channel的AMD ROME处理器为例,带宽可以达到8*25.6GB/s=204.8GB/s。
以1333MHz的内存条为例,X64的位宽,带宽就是:
1333*2倍速率*64bit/8/1000=2.666*8=21.328GB/s;
以6Channel的Intel SKL处理器为例,带宽可以达到6*21.328GB/s=127.968GB/s。
GDDR可以做到四倍速率。
以1750MHz的内存为例,单个颗粒X64的位宽,带宽就是:1750MHz*4倍速率*64bit/8/1000=7*8=56GB/s;
以Nvidia Geforce GTX 1080 Ti为例,使用了11GB的GDDR5X,内存时钟是2750MHz,4倍频,内存频率是11GHz,内存位宽是X352bit,那么内存带宽为:2750MHz*4倍速率*352bit/8/1000=484GB/s;
以Nvidia Geforce RTX 2080 Ti为例,使用了11GB的GDDR6,内存时钟是3500MHz,4倍频,内存频率是14GHz,内存位宽是X352bit,那么内存带宽为:3500MHz*4倍速率*352bit/8/1000=616GB/s;
优点是带宽比较高,功耗比较低。
缺点是,适合并发,不适合随机访问;时序复杂,工艺要求高;不适合配合CPU的Cache line的读取。
HBM双倍速率,但是堆叠提高位宽。
2013年是HBM,2016年是HBM2,优势在堆叠,通过TSV和基底通信,每个die有2个128bit位宽的Channel,4层堆叠叫做4-Hi,带宽可以达到4*2*128=1024bit。
HBM以500MHz的内存为例,单个颗粒的带宽可达到:500Mhz*2倍频*2Channel*128bit*4Die/8/1000=1GHz*1024bit/8=128GB/s;
HBM2时钟加倍,以500MHz的内存为例,单个颗粒的带宽可以达到2*128GB/s=256GB/s。
以Nvidia Tesla V100S为例(GPU和HBM之间使用硅中介进行2.5D的封装)。
应当是使用了4颗,带宽为:1107MHz*2倍频*4096bit/8/100=1113.568GB/s,HBM的优势封装比较小,堆叠设计。缺点是TSV工艺造成成本比较高。
HBM(High Bandwidth Memory)和DDR一样都是一种硬件存储介质。DDR被广泛应用于CPU与各种硬件处理单元的外挂存储设备,那么既然DDR4已经作为成熟存储介质,为什么要推出HBM存储设备?主要原因在于DDR4现有吞吐能力不能满足当今计算需求,尤其是在AI计算、区块链和数字货币挖矿等对大数据处理访存需求极高等领域,DDR4的吞吐能力更显薄弱。
所以,HBM以其高吞吐高带宽的优势,活跃在工业界和学术界。比如在学术领域,尤其在DSA(Domain Specific Acceleration)场景,如果能将embedding数据合理分配到32路HBM当中,同时做到系统级pipeline数据访存和计算,那么都会有比较优秀的加速效果。
HBM带宽
我们一直在讲HBM带宽比DDR有优势,那么具体是什么优势?
DDR4带宽——ddr4数据位宽是64bit,以时钟频率2400MHz为例,那么带宽为:2400M*64 =153.6Gbps。
HBM带宽——HBM应用axi3协议,数据位宽为256bit,时钟频率可达450MHz,数据通道为32路,那么对于一块FPGA外挂一个HBM的硬件设备,其数据带宽为:450M*256*32=460.8Gbps。
所以,在不考虑CPU和FPGA区别的前提下,一块带HBM的FPGA要比普通CPU服务器性能高上3倍左右,当再考虑CPU cache miss和DDR使用效率的时候,带有HBM的FPGA所带来的带宽增益将会更大。
但是单块HBM的内存大小一般最大为16GB,而单个DDR4普遍能做到64GB。所以当业务所需数据量较大时,将不再适合只将访存数据存储在HBM中。
HBM细节
HBM分为2个stack,每个stack有8channel,每个channel可以分为2个伪通道(pseudo channel),那么就一共有32个pseudo channel。HBM存储大小分为64Gb和128Gb,所以最大为16GB。
我个人对于HBM的理解,如果在应用层面,可以认为HBM是32个堆叠的DDR,每个DDR应用AXI3总线协议,使用起来和控制DDR也非常相似。
HBM的地址空间
HBM的32个pseudo channel都是使用axi3协议,所以指令和数据的传输方式也和DDR相同,本文主要讲解一下不同点,也就是HBM的地址空间。
以4H(内存大小64Gb)的HBM为例:
Bit[32]用于区分左右stack;
Bit[31:28]用于选择每个stack里面16个pseudo channel的哪一个axi总线;
Bit[27:5]为有效地址部分;
Bit[4:0]为无用比特位,原因是数据位宽为256bit,每次都要最少传输256bit,那么就需要32Byte对齐,所以其低5bit永远为0。
具体使用方法
使用过程中用axi3总线协议,其实可以不完全按照IP手册中所要求的地址空间进行设置,上文所述的地址空间更像是只给了整个HBM一个AXI接口,但是Xilinx自己的IP核连接过程中也是用了32个AXI接口(假如用了1个HBM的32个通道)。所以我们在使用过程中,可以直接例化32个AXI总线接口,与32个AXI接口的通道连接,地址空间完全可以只有28比特,也就是6+22,这样就不需要高5比特的通道选择比特位了。
HBM其他特点
不支持fixed addressing mode(AXI3协议不支持)。
fixed的burst模式代表,对同一个地址进行burst读写,本人也没有用过这个场景,并且在axi3中也是不支持的,暂时猜测这种场景可能是,地址用于片选,后面跟着几个FIFO,然后burst传输给对应片选的FIFO数据。
burstlength位宽为4比特,最大为16。
HBM每一个原始的channel时钟频率是900MHz,但是却把每一个channel拆分成两个pseudo channel,时钟降频为450MHz。这样做对于HBM端口的吞吐量没有变化,但是接口时钟降低了一半,这样做更有利于后续FPGA处理和计算,防止timing问题导致不能应用900MHz的时钟频率。那么后续我们在使用过程中,也可以将256bit数据合为512bit,这样可以将数据频率再降低一半, 也是一种适配计算频率不高场景的方法。