【ISSCC】论文详解-34.6 28nm 72.12TFLOPS/W混合存内计算架构

2024-09-04 23:04

本文主要是介绍【ISSCC】论文详解-34.6 28nm 72.12TFLOPS/W混合存内计算架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文介绍ISSCC34.6文章,题目是《A 28nm 72.12TFLOPS/W Hybrid-Domain Outer-Product Based Floating-Point SRAM Computing-in-Memory Macro with Logarithm Bit-Width Residual ADC》(一种28nm 72.12TFLOPS/W混合域外积浮点SRAM存内计算宏单元,具有对数位宽残差ADC)。该研究结合数字存内计算电路结构和模拟存内计算电路结构的特点,提出了一种新型数模混合存内计算计算架构,并立足于高精确计算,展开了一系列研究。下面是对文章基本信息及创新点的详细介绍。

一、基本信息介绍

本文第一作者为中国科学院微电子研究所的2021级直博生袁易扬,共同作者来自中国科学院大学、北京理工大学、澳门大学等研究单位。

本研究立足于当前存内计算技术面临的计算精度不足以满足新型AI应用需求的问题,分析当前数字和模拟两种存内计算范式所面临的挑战:(1)模拟存内计算技术虽然因为使用晶体管计算而具备较低的阵列输入消耗,但ADC和阵列输出消耗高;数字存内计算技术中的加法树器件虽然具备较低的阵列输出和移位累加消耗,但计算阵列由于使用逻辑门而具备较高的阵列输入消耗。如何结合两种计算范式的优势,以实现最佳能效是当前存内计算技术所面临的挑战(2)ADC器件的精度、吞吐量和面积难以取得平衡,是模拟存内计算技术的重要挑战(3)数字存内计算核内部需要多个多级加法树,以实现高比特精度部分积和内积的计算。并基于上述挑战提出了三个创新点。

图1 文章背景及面临的挑战

二、创新点解析

  1. 数字和模拟计算范式的融合

本文提出了一种混合域8b CIM宏,分别使用模拟CIM进行高效阵列内比特乘法、使用数字CIM进行高效阵列外多比特移位累加,综合利用了模拟和数字CIM的优势。其中,模拟CIM比数字CIM的内嵌逻辑门可以用更少的晶体管进行更高效的阵列内比特乘法,而数字CIM加法器在进行阵列外多位移位和累加时比大型高精度模拟CIM ADC的效率要高得多。因此,本文提出一种方法来分离比特乘法和计算过程中的多比特移位和累加,以结合模拟和数字CIM的优势。

以具体的乘累加操作为例,如下图2所示,对于W[7:0]×A[7:0]的乘累加操作,首先通过如下所示的公式转换可以将其分为乘法和累加两种操作,分别用橙色和蓝色标注,橙色部分用模拟CIM执行,蓝色部分用数字CIM执行。

 

图2 数模混合公式转换

如下图3所示,在具体的电路实施上,模拟CIM用一个由传输端口和电流镜组成的阵列来处理乘法操作;数字CIM通过8周期累加对经过ADC转换之后的数据进行移位累加操纵。这种电路结构重复结合了模拟和数字CIM的优点,从而显著地提高了CIM宏性能。

图3 数模混合电路示意图

本文的数模混合方式的原理为将乘累加操作分别拆分为乘法和累加操作,再根据模拟和数字CIM的优势,分别让其进行乘法和累加操作。同年ISSCC 34.3中也提出了一种新颖的数模混合结构——“类闪电式”,这种数模混合方式的原理为拆分乘累加的比特数,分别用数字和模拟CIM进行处理。图4展示了“类闪电式”混合SRAM CIM宏架构,支持累加器长度可扩展。图中蓝色为数字计算部分,黄色为模拟计算部分,通过将高位、低位数字单元(HDU与LDU)与高位、低位模拟单元(HAU、LAU)进行排列组合(两个子阵列与HDU和LDU对组合,四个子阵列与HDU和LAU对组合,其余两个子阵列与HAU和LAU对组合),以此来进行高效的8位整数乘累加操作。这种方案大大减少了所需的ADC转换次数和存储需求,同时支持更大的累加长度,而无需存储大量的部分和,适合于CNN与Transformer。

图4 闪电式混合SRAM CIM宏架构

(2)零消折叠ADC架构(a zerocancelling folded-ADC architecture)

下图展示了对数位宽残差ADC的工作原理和电路结构。由模拟位乘法器得到的最大模拟电流值仅为单位电流的8倍,因此该残差ADC可以通过log₂8=3位有效区分非零状态,以避免直接使用折叠ADC(Folding ADC)而导致判断如下图所示的0~8的数据时出现模糊状态。

图5 零消结构对ADC的影响

即使是INT16或FP32等更高精度的需求,这种对数关系也依然成立,这极大地降低了ADC的位宽需求,从而提高计算能效。此外,减小的位宽允许更大的信号裕度,从而提高了精度。输入电流通过二极管连接的晶体管转换为电压,并被引导至两个串联的反相器,从而激活ADC。当没有电流输入时,残差ADC(Redisual ADC)会关闭以节省功耗,否则将基于残差比较原理工作。

图6 本研究ADC电路结构图

该ADC架构展示了与Flash ADC相当的吞吐量,并具有与SAR ADC相当的能耗。在模拟域中执行8位输入乘8位权重操作时,3位残差ADC的能效比ISSCC2021中J.-W. Su提出的3位SAR+2位斜率ADC提高了70%,比ISSCC2023中S.-E. Hsieh提出的8位SAR ADC提高了2.6倍。

两篇对比文献的全名为ISSCC2021,J.-W. Su,A 28nm 384kb 6T-SRAM Computation-in-Memory Macro with 8b Precision for AI Edge Chips;ISSCC2023,S.-E. Hsieh,A 70.85-86.27TOPS/W PVT-Insensitive 8b Word-Wise ACIM with Post-Processing Relaxation。

图7 本研究创新点二对比其他研究

(3)数模混合架构

论文中的Figure 34.6.5显示了基于外积的FP/INT双模CIM块的详细结构(The structure of the outer-product based FP/INT-CIM block),接下来我们对于这个架构中的每个模块分别进行分析。

图8 Outer Product CIM Architecture

首先,论文先介绍了外积计算(Outer-Product)的原理,与传统的内积计算不同,内积需要对多个部分和的乘积进行累加。而外积架构通过直接将激活矩阵的元素(element)与权重矩阵的向量(vector)相乘来生成结果。与内积计算相比,外积计算可以避免多层复杂的加法计算,可以减少计算复杂度并改善延迟,进一步提升能效(EF)。

图9 Outer Product Math Principle

架构中的稀疏控制电路(Sparsity Control Circuit,绿色部分)旨在优化对于稀疏矩阵的计算效率,进一步提升能效(EF)。论文采用了压缩稀疏行(CSR Format)的数据格式来储存稀疏矩阵中的数据,索引(Indices)记录非零元素所在的列号,索引指针(Index Pointers)来记录矩阵每一行的起始位置,也即每一行第一个非零元素在索引数组中的位置。在这种数据格式的存储下,稀疏控制电路可以利用CSR格式跳过零元素的计算,先通过索引指针找到每一行的起始位置,再通过索引定位非零元素的具体位置。

 

图10 Sparsity Control Circuit

架构包含可实现INT/FP双模计算的乘法器,如下图所示。在INT模式下,可以选择16比特权重存储单元的高位或低位的8比特传输到计算宏中,与1位权重值在宏中进行外积计算,此时无需调用指数&符号数计算模块(Exp&Sign Calc);在FP模式下,BF16的尾数传输至计算宏中,而符号和指数被发送到Exp&Sign Calc组件中分开计算,最终的计算结果还需要进行标准化和化整(Normalize & Round)并打包(Pack)实现BF16格式的输出。

图11 INT/FP双模乘法器

架构包含可实现INT/FP双模计算的累加器,如下图所示。在INT模式下,累加器接收来自乘法器的输出结果,进行移位累加;在BF16模式下,累加器会进行指数位对齐、尾数移位并累加等操作,在累加的过程中,如果尾数位发生溢出,可能还要对指数进行进一步的调整(Exp Adjust)。

三、总结

在本篇论文结尾,作者给出研究成果芯片对比其他文献的数据如下。

芯片图及参数总结表入下图所示。

本文提出的数模混合存内计算架构颇具特色,对比同年34.3的成果在更精细尺度上将数字和模拟存内计算范式的特色进行了结合,感兴趣的读者可以阅读我们之前对34.3文献的解析。

在零消折叠ADC架构中,作者使用了对数压缩的方式使ADC在能效、吞吐量中取得了平衡,为模拟电路设计提供了一种可能的思路和方向。

在基于外积的双模CIM架构中,文章使用了多种方法以提升能效EF,使用CSR格式存储数据以处理稀疏矩阵、执行外积运算以避免使用大扇入的多级加法器树,但是文章在进行双模计算时有着组件空闲的问题,在INT模式下,有关指数、符号数等计算组件处于空闲状态,双模情况下的硬件利用率仍是一个具有挑战性的问题。这一点在ISSCC2024 34.2中提出了一种解决办法,感兴趣的读者可以读我们之前对于34.2的解读。

这篇关于【ISSCC】论文详解-34.6 28nm 72.12TFLOPS/W混合存内计算架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137283

相关文章

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Java中的JSONObject详解

《Java中的JSONObject详解》:本文主要介绍Java中的JSONObject详解,需要的朋友可以参考下... Java中的jsONObject详解一、引言在Java开发中,处理JSON数据是一种常见的需求。JSONObject是处理JSON对象的一个非常有用的类,它提供了一系列的API来操作J