基于静态随机存储器(SRAM)的存算电路设计 | 主讲回顾( 三 )


目前主流的解决的方式分为两大类 , 目前业界使用比较多的是High-BandwidthMemory的开发 。 尤其是近一两年 , 更多的是一些不同于或者是超越冯诺依曼架构的新型架构的研究 。
基于静态随机存储器(SRAM)的存算电路设计 | 主讲回顾
文章图片
前面有提到过电池容量跟AI任务之间的发展Gap , 而对于实际的硬件核心 , 也存在Processor性能跟Memory性能之间的Gap 。 原因是Memory在电路设计过程中 , 通常要考虑到它的良率、margin以及各种不同OCV情况下的仿真设计等 , 所以它的性能提升不会像基于CMOS逻辑的Processor演进速度那么快 , 而且这部分的Gap随着摩尔定律的发展 , 也在逐渐增大 , 这会导致什么问题呢?
在整个系统当中 , 我们会发现绝大部分的性能瓶颈是被卡在Memory的缓存开销中 。 进一部分细化到各种不同工艺节点下 , 会发现访存的能量开销已经超过了计算能量的开销 。
基于静态随机存储器(SRAM)的存算电路设计 | 主讲回顾
文章图片
上图列举了两个目前在产业界已经得到大规模应用的High-BandwidthMemory设计方式 , 比如AMD或SKHynix , 采用的TSV3D堆叠方式 , 可以提供更大的空间效率、更高的互连密度以及更高的传输的带宽 。 还有一类是从整个Memory的读写框架布局上缩短读写路径 , 从而节省整个访存上的功耗开销 。
基于静态随机存储器(SRAM)的存算电路设计 | 主讲回顾
文章图片
另外一类是存内计算设计 , 即存算一体架构 , 这部分的核心优势是扩展了Memory的功能 。 Memory原本是不具备任何数据处理能力的 , 导致做任何的事情 , 都需要先送给另外的处理器 , 处理完之后再进行处理 , 这之间的交互成本是非常大的 。 那如果自己能够做一些任务 , 就可以节省其他处理器的负担 , 整个系统也会更加和谐 。 所以对CIM来说 , 它需要执行并行的数据运算 , 从而节省访存开销 。 所以对于AI或大数据任务 , 它在能耗和算力密度上有更好的提升效果 。
对于典型的CIM宏单元 , 它的核心操作就是计算 , 即Memory为什么能做计算 , 如何做计算?以我们早期的一些工作为例 , 主要是将数据映射到不同的行或WLs , 亦或是定制的Memorycellsinput端口上 , 来进行多值的input输入 。 输入进来的这部分数据 , 可以跟cell里面的数据进行乘法 , 或者是布尔逻辑的运算 , 运算完之后通过每一列之间的bitwise的操作得到中间的一些partialsum的结果 。 如果是以analog形式来展现 , 在周边还需要相应的模数转换电路 。 另外还有一些可以采用数字的方式直接做相应的一些累加 , 有各种不同的实现路径 。
上图列举了典型CIM宏单元的设计模块和整个框架 。 它核心的问题主要体现在三个部分:
第一点是要支持两种模式 , 即存储功能 , 要支持常规的单行数据刷新或者是读写保持 , 另外就是需要额外扩充它的CIM功能;
第二点主要体现在如何高效使用它的层面 , 如何将一些实际网络数据 , 像input、weight或logicvalues数据Mapping到阵列数据当中 , 这部分也涉及到各种不同的CIM结构设计;
最后一部分也是大家关注比较多的 , 即在实际电路实现过程当中 , 如何去高效的进行电路设计 , 这里会涉及到Analogue或者是一些混合信号的电路 , 还有一些高效的、定制数字单元的设计 。 因为Memory , 尤其是存算 , 需要结合整个I/O , 包括工艺部分的局限性 , 需要有非常严格的要求 , 尤其是在energy和areaoverhead上 。
接下来是我们课题组早期的工作研究 , 梳理出来的一些挑战 。 早期主要体现在单bit或者是比较lowprecision部分的存储单元设计 , 它主要存在以下三个大的挑战: