作者:饿狼传说,文章来源: FPGA的现今未微信公众号
在上一篇关于HBM的介绍中,详细介绍了HBM的架构和配置,这里再记录下HBM另一个重要的特性——性能。一说到性能,读者第一感觉可能觉得这又是一个复杂的话题,这里不讨论各种各样的理论场景,就说明2种在工程上常用场景下的性能情况。(本文说到的HBM换成DDR同样适用)。
为什么要用HBM?常用的原因一般就两个:
(1)、做大数据缓存,比如在视频处理、通信、业务加速中经常用到;
(2)、第二就是缓存各种表项,比如hash表、流表、bloomfilter等等。
这两种场景在使用HBM上又各有特点,作为大数据的缓存,一次读取的数据不定长,且比较大,一般都是Kbyte级别,有的场景甚至达到Mbyte级别。它又可以分成2个常用的场景:
(1)、把HBM当成一个大的FIFO使用(高速进来,低速出去),同时数据满足先进先去,这种场景最简单,直接把写入的数据,一个一个读出来即可。它的特点是对HBM的访问地址是连续的。
(2)、还是把HBM当成一个大的缓存,但是数据不是先进先出,会有乱序。即先进来的数据,可能后出去,后进来的数据,可能先出去。这种场景的特点就是访问HBM的地址是乱序的,不连续,且没有任何规律(随机)。
在缓存各种表项的场景中,读写数据的长度一般是固定的,且长度不会太长,一般有64byte、128byte、256byte、512byte等。每次读写的地址也是不固定的,且没有任何规律(随机)。
在说明HBM测试性能前,我们计算下HBM的理论带宽。根据xilinx提供的文档pg276,HBM单个stack的理论最大性能为:(256 bits per AXI port) x (2 ports per memory controller) x (8 channels) x 450 MHz = 230400MB/s,整体性能为460800MB/s。
基于前面的分析总结下,在性能上,我们主要关注的场景就是不同数据长度在顺序读写和随机读写下的性能。测试方案采用HBM 非global模式下一个MC的一个伪通道为测试对象的方案,理论的最大性能为14400MB/s,其基本框图如下:
读写控制主要是配置不同的包长和地址模式等,发包模块主要写数据,读包模块主要是读数据。上述模块的工作频率为250M,这种频率下的理论性能为 250M*256bit = 64Gbps.测试的实际结果如下:
1、本测试中,读写地址随机的方式不一定很科学,随机性能可能比实际测试的要相对低点。
2、以上性能是同时读写的性能。