CN114356840A - 具有存内/近存计算模块的SoC*** - Google Patents
具有存内/近存计算模块的SoC*** Download PDFInfo
- Publication number
- CN114356840A CN114356840A CN202111531035.4A CN202111531035A CN114356840A CN 114356840 A CN114356840 A CN 114356840A CN 202111531035 A CN202111531035 A CN 202111531035A CN 114356840 A CN114356840 A CN 114356840A
- Authority
- CN
- China
- Prior art keywords
- memory
- pim
- module
- bus
- soc system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip memory
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种具有存内/近存计算模块的SoC***,包括:内存通用总线,其被配置为传输内存调用指令;以及存内/近存计算模块,其被配置为存储数据以及对所存储的数据进行运算,其中所述存内/近存计算模块具有第一接口,所述第一接口连接在内存通用总线上,其中存内/近存计算模块和/或第一接口被构造为使得通过在内存通用总线上传输的内存调用命令能够调用存内/近存计算模块,以进行存内/近存计算模块的控制和使用。
Description
技术领域
本发明涉及集成电路技术领域,特别涉及一种具有存内/近存计算模块的SoC***。
背景技术
内存中处理(PIM)技术由于其具有吸引力的特性、例如低计算延迟、大吞吐量和高能效,是AIoT应用中最有前途的候选者之一。然而,如何有效利用片上***(SoC)架构的PIM却鲜有讨论。
现有的存内/近存计算***需要使用一款为存内/近存计算独立设计的软件及硬件***,去调用存内/近存计算的单元来进行加速计算,这样的方式设计成本高,且设计的***通用性低,一般只能为一种特定的算法去设计软件及硬件***。***将很难实现其他算法。
发明内容
本发明的目的在于提供一种具有存内/近存计算模块的SoC***,以解决现有的片上***的存内/近存计算***设计成本太高,且设计的***没有通用性的问题。
为解决上述技术问题,本发明提供一种具有存内/近存计算模块的SoC***,包括:
内存通用总线,其被配置为传输内存调用指令;以及
存内/近存计算模块,其被配置为存储数据以及对所存储的数据进行运算,其中所述存内/近存计算模块具有第一接口,所述第一接口连接在内存通用总线上,其中存内/近存计算模块和/或第一接口被构造为使得通过在内存通用总线上传输的内存调用命令能够调用存内/近存计算模块,以进行存内/近存计算模块的控制和使用。
可选的,在所述的具有存内/近存计算模块的SoC***中,还包括:
嵌入式内存,其被配置为存储数据,所述嵌入式内存具有第二接口,所述第二接口连接在内存通用总线上。
可选的,在所述的具有存内/近存计算模块的SoC***中,存内/近存计算模块包括异构存储器,所述异构存储器被配置为利用基于异构存储器的张量映射方法划分张量,并在存内/近存计算模块上部署通用矩阵乘法运算。
可选的,在所述的具有存内/近存计算模块的SoC***中,所述SoC***的内存通用总线包括AHB总线和/或AXI总线。
可选的,在所述的具有存内/近存计算模块的SoC***中,存内/近存计算模块的工作模式包括内存模式和计算模式;
在内存模式下,通过R/W端口访问存内/近存计算模块的数据,以从存内/近存计算模块的内存阵列中读取和写入数据;
在计算模式下,向量中的输入数据V形成流进入PIM存储器,输入数据V直接与PIM存储器中的存储数据W交互,在锁存端口处输出计算结果I。
可选的,在所述的具有存内/近存计算模块的SoC***中,PIM存储器以模拟处理方式计算通用矩阵乘法,由模数转换器作为计算电路接口:
I=VW,其中V为向量中的输入数据,W为PIM存储器中的存储数据,I是计算结果,计算结果作为输出数据;
将PIM存储器阵列与指令解码器和数据路径控制器平铺在一起形成PIM加速器。
可选的,在所述的具有存内/近存计算模块的SoC***中,异构存储器模拟传统存储器在SoC***中附加的PIM存储器;
PIM输入缓冲器和PIM输出缓冲器由静态随机存取存储器组成片上快速存储器,用于缓存PIM存储器的输入数据和输出数据,PIM存储器通过互连接口安装到***总线;
计算模式输入通过物理金属总线连接,以使PIM存储器直接访问PIM输入缓冲器的数据;
PIM输出缓冲器包括虚拟输出缓冲器,其包括输出数据锁存器、多路复用器/解码器和总线从属模块,以通过***总线的可寻址输出数据块;
PIM输出缓冲器包括额外输出缓冲器,其用于缓存完整GEMM操作的中间部分和。
可选的,在所述的具有存内/近存计算模块的SoC***中,***总线的可寻址包括常用地址分配方式,根据SoC***的形状、SoC***的总地址宽度以及片上存储器和PIM存储器的规模划分常用地址,其包括:
***地址位宽32位,每64MB形成一个block;
Block0和Block7中的地址保留用于CPU配置、指令存储器、内部***电路I/O;
Block1用于桥接到低速总线的片上SRAM和外部***电路I/O;
Block3用于PIM相关缓存和PIM存储器,以及用于GEMM加速;
block4~6为可扩展地址。
可选的,在所述的具有存内/近存计算模块的SoC***中,基于向量/矩阵中的元素大多与线性分布的地址对齐,通过模拟AHB通信验证片上互连网络能够为与PIM相关的双向数据传输提供足够的带宽,以使得常用的AHB能够进行一下操作:从PIM输出缓冲器获取计算结果,将输入向量/矩阵馈送到PIM输入缓冲器。
可选的,在所述的具有存内/近存计算模块的SoC***中,PIM存储器中进行深度神经网络的高维矩阵运算,包括:
两层感知器权重矩阵及存储在内存中的权重数据进行分区并馈入PIM内存,以提高计算效率;
将PIM存储器中的所有矩阵乘法直接编译为通用内存调用命令,PIM计算通过gcc工具链编译,并根据通用内存调用命令在软件中进行优化;
通用内存调用命令包括:LD.I(x,y)为从SRAM中导出输入矩阵、LD.W(x,y)为从SRAM中导出权重矩阵、SD.R(x,y)为将计算结果导入到SRAM中、SD.M为将权重矩阵导入PIM中、SD.V为将输入数据导入inputbuffer、LD.O为从outputbuffer中导出计算结果;
通用内存调用命令中的(x,y)表示传统内存中矩阵左上角元素的地址偏差。
可选的,在所述的具有存内/近存计算模块的SoC***中,
使用多个PIM和HMA结构增强***性能,多个PIM内存并行调度,以在NN计算中,PIM内存中存储的权重数据不频繁更改;
与已存储在PIM矩阵中的某个权重相关的每个输入一起计算,以减少在PIM存储器中重新加载权重数据的频率;
加载到同一行不同SRAM的计算结果对应叠加;当所有的乘法结果都准备好后,再进行加法运算;
将不同列的加法结果进行横向拼接,完成一次GEMM操作。
本发明还提供一种SOC***的使用方法,包括:
在基于SoC***的内存的基础上设计存内/近存计算模块,使得存内/近存计算模块具有第一接口;
使得SoC***的嵌入式内存具有第二接口;
使得嵌入式内存通过第二接口连接在***总线上,其中***总线为SoC***的内存通用总线;
使得存内/近存计算模块通过第一接口连接在SoC***的内存通用总线上;
使得第一接口与第二接口相同,以通过通用内存调用命令调用存内/近存计算模块,进行存内/近存计算模块的控制和使用;
其中通用内存调用命令还用于SoC***调用嵌入式内存,进行嵌入式内存的控制和使用。
在本发明提供的具有存内/近存计算模块的SoC***中,通过将第一接口构造为与第二接口一样能够接收内存调用命令(如使用相同规格的接口)并将存内/近存计算模块构造为能够执行所接收的内存调用命令,由此可通过通用的内存调用命令来调用存内/近存计算模块,以进行存内/近存计算模块的操作、如控制和使用,由此可以实现利用存内计算的内存结构,即设计了一种使用方式,从而使得存内计算单元可以通用地在SoC中被调用以在SoC中执行各种存内运算,由此极大地扩展了SoC的运算能力并降低了其功耗和芯片面积。在结构方面:利用已有的计算机内存总线结构,将PIM***搭载于其上,方面设计及使用,无需为PIM***进行一个定制化的接口设计。在功能方面:使用已经泛使用、统一标准的指令,完成PIM的操作,简化了软硬协同设计的难度,解决编译器不容易找到最优指令执行调度的问题。基于存内计算与近存计算加速器在片上***中使用,本发明提出了一种通用的调取方法,使得该类型加速器可以在传统常规的片上***(SoC)体系架构中使用。
附图说明
图1是本发明一实施例存内计算在SoC***应用方式示意图;
图2是本发明一实施例SoC***中的存内计算模块示意图;
图3是本发明一实施例PIM宏的电路模块和机制示意图;
图4(a)~(b)是本发明一实施例HMA的分层框图和异构存储器由总线下属管理示意图;
图5是本发明一实施例32位地址宽度SoC上HMA中的典型地址空间分配示意图;
图6是本发明一实施例计算模式下片上AHB总线的带宽和PIM宏的吞吐量示意图;
图7是本发明一实施例矩阵乘法的优化过程示意图;
图8是本发明一实施例GEMM操作的内存操作编译序列的可视化示意图。
具体实施方式
下面结合具体实施方式参考附图进一步阐述本发明。
应当指出,各附图中的各组件可能为了图解说明而被夸大地示出,而不一定是比例正确的。在各附图中,给相同或功能相同的组件配备了相同的附图标记。
在本发明中,除非特别指出,“布置在…上”、“布置在…上方”以及“布置在…之上”并未排除二者之间存在中间物的情况。此外,“布置在…上或上方”仅仅表示两个部件之间的相对位置关系,而在一定情况下、如在颠倒产品方向后,也可以转换为“布置在…下或下方”,反之亦然。
在本发明中,各实施例仅仅旨在说明本发明的方案,而不应被理解为限制性的。
在本发明中,除非特别指出,量词“一个”、“一”并未排除多个元素的场景。
在此还应当指出,在本发明的实施例中,为清楚、简单起见,可能示出了仅仅一部分部件或组件,但是本领域的普通技术人员能够理解,在本发明的教导下,可根据具体场景需要添加所需的部件或组件。另外,除非另行说明,本发明的不同实施例中的特征可以相互组合。例如,可以用第二实施例中的某特征替换第一实施例中相对应或功能相同或相似的特征,所得到的实施例同样落入本申请的公开范围或记载范围。
在此还应当指出,在本发明的范围内,“相同”、“相等”、“等于”等措辞并不意味着二者数值绝对相等,而是允许一定的合理误差,也就是说,所述措辞也涵盖了“基本上相同”、“基本上相等”、“基本上等于”。以此类推,在本发明中,表方向的术语“垂直于”、“平行于”等等同样涵盖了“基本上垂直于”、“基本上平行于”的含义。
另外,本发明的各方法的步骤的编号并未限定所述方法步骤的执行顺序。除非特别指出,各方法步骤可以以不同顺序执行。
以下结合附图和具体实施例对本发明提出的具有存内/近存计算模块的SoC***作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
本发明涉及人工智能和物联网领域,人工智能和物联网(AIoT)的结合催生了各种特定领域的加速器,以实现低功耗的设备智能。AIoT设备在传感器附近本地执行数据分析,并且通常使用低于10mW的电池或能量收集电源运行。因此,AIoT技术需要低成本和小尺寸的片上***(SoC),其中包含通用CPU和可编程机器学习(ML)加速器,以利用可编程性和执行效率,如图1所示,展示了具有不同计算接口电路的PIM设计,嵌入式数据存储器用于存被处理的数据,嵌入式指令存储器用于存编译好的指令,存内计算模块可以存可以算,这个是之前有的加速器没有的功能。本发明优化了具有内存处理(PIM)技术的嵌入式SoC来处理具有大量通用矩阵乘法(GEMM)运算的任务,使得PIM实现直接在存储器阵列中进行计算操作。
此外,尽管已经对电路级的PIM设计进行了很好的探索,但将PIM连接到SoC的方法仍然模糊不清。在现有技术最先进的PIM硬件设计中,它已被视为变异的向量处理单元以形成加速器,即与定制指令集架构(ISA)集成的PIM。然而发明人发现,SoC级别的架构效率可能不高,因为额外的定制指令和与主处理器的共享内存分配会导致编译困难。因此,在大多数情况下很少能达到峰值效率。
本发明的目的在于提供一种具有存内/近存计算模块的SoC***,以解决现有的片上***的存内/近存计算***设计成本太高,且设计的***没有通用性的问题。
为实现上述目的,如图1所示,本发明提供了一种具有存内/近存计算模块的SoC***,内存通用总线,其被配置为传输内存调用指令;以及存内/近存计算模块,其被配置为存储数据以及对所存储的数据进行运算,其中所述存内/近存计算模块具有第一接口,所述第一接口连接在内存通用总线上,其中存内/近存计算模块和/或第一接口被构造为使得通过在内存通用总线上传输的内存调用命令能够调用存内/近存计算模块,以进行存内/近存计算模块的控制和使用。
如图2所示,总线接口一般是流行的AMBA总线协议接口,比如AHB,AXI,AXI-lite之类的,总线接口和读写电路之间存储mode下读写数据的交流(作为存储器用),时序控制模块与译码器(选通控制逻辑)对读写电路和计算电路进行时序控制,控制存内计算单元阵列的地址。
在本发明的一个实施例中,具有存内/近存计算模块的SoC***,还包括嵌入式内存,其被配置为存储数据,所述嵌入式内存具有第二接口,所述第二接口连接在内存通用总线上。
本发明提供了一种SoC***的使用方法,包括:在基于SoC***的内存的基础上设计存内/近存计算模块,使得存内/近存计算模块具有第一接口;使得SoC***的嵌入式内存具有第二接口;使得嵌入式内存通过第二接口连接在***总线上,其中***总线为SoC***的内存通用总线;使得存内/近存计算模块通过第一接口连接在SoC***的内存通用总线上;使得第一接口与第二接口相同,以通过通用内存调用命令调用存内/近存计算模块,进行存内/近存计算模块的控制和使用;其中通用内存调用命令还用于SoC***调用嵌入式内存,进行嵌入式内存的控制和使用。本发明提出了从硬件架构到算法的一系列解决方案,以最大限度地发挥PIM设计的优势。
为了解决上述技术问题,本发明提出了一种异构存储器(HMA),它通过高吞吐量的片上总线优化具有PIM的现有SoC。然后,基于给定的HMA结构,本发明还提出了一种HMA张量映射方法来划分张量并在PIM结构上部署通用矩阵乘法运算。
为了解决上述技术问题,本发明的HMA硬件和HMA张量映射方法都利用了成熟的嵌入式CPU解决方案堆栈的可编程性,并最大限度地发挥了PIM技术的高效率。与设计领域44.6%的其他加速器解决方案(如PUMA)进行比较,整个HMA***可省电416倍。本发明的实验还表明,与最先进的基线和未经优化的PIM相比,本发明的设计可以将TinyML应用程序的操作延迟分别减少430倍和11倍。
为了解决上述技术问题,本发明提出了一种异构内存架构(HMA),以适应现成的嵌入式SoC架构上的PIM。特此提出“异构内存”的概念,表示这种架构在一个SoC上同时拥有PIM内存和传统内存(只能存储和读取数据的内存)。在提议的HMA中,PIM存储器与传统存储器一样连接到片上高吞吐量***总线。随着HMA显著简化程序接口,本发明还开发了HMA张量映射方法作为将GEMM部署到建议架构的软件到硬件优化。
本发明的主要贡献包括:
·本发明提出了一种新颖的异构内存概念和架构,以通过PIM内存扩展内存空间。
本发明提议的HMA方案是第一个阐明如何将PIM连接到现成SoC的架构。
·本发明设计了HMA张量映射方法来划分张量并将GEMM任务部署到建议的硬件架构。
本发明不仅为开发PIM硬件提供了一种与硬件无关的方式,而且可以用作预设计规格估计。
·本发明为PIM创建了一个软件到硬件的开发流程,以使用现成的gcc编译器,弥合硬件和软件工具链之间的差距,以在SoC中开发PIM。
本发明重点介绍由嵌入式非易失性存储器技术制成的PIM,以利用其零待机功耗特性。本发明对提议的HMA的评估基于电阻式随机存取存储器(RRAM)。
本发明着重于解决以下技术问题:
首先,SoC中的专用集成电路(ASIC)加速器如图1所示。图1显示了在SoC中连接专用集成电路(ASIC)加速器的现有方案。发明人经研究发现,ASIC加速器专为具有特定应用优化硬件实现的某些任务而设计。ASIC加速器或协处理器经常与主处理器并行工作,并与它们共享总线和内存。完全定制的指令集架构(ISA)或公共标准的扩展ISA,例如RISC-V,用作软件到硬件的程序接口。保存指令的内存(“指令内存”)通常通过连接到***总线加载到加速器之外。在这样的SoC中,片上总线(例如AXI、AHB等)不仅负责数据通信,还负责传输由加速器执行的指令。这种在同一总线上共享内存和混合传输加速器指令的范例使得编译和调度非常复杂,并随后导致设计工作和开销。
其次,PIM技术通过添加计算接口电路来改造存储器电路。如图3所示,PIM有两种工作模式:内存模式和计算模式。在内存模式下,可以通过R/W端口访问数据,以便从内存阵列中读取和写入数据;在计算模式下,向量中的输入数据“V”形成流进入PIM内存。输入直接与PIM存储单元中存储的数据交互,输出可以在输出处锁存端口“I”。PIM存储器以模拟处理方式计算GEMM,由模数转换器(ADC)作为计算电路接口:I=VW,其中V是流入输入,W是存储在PIM存储器中的数据,I是计算结果。将PIM存储器阵列与指令解码器和数据路径控制器平铺在一起形成PIM加速器。最先进的PIM加速器根据PIM的新型编程模型定制指令。然而,将软件程序编译和部署到PIM硬件上是一个非常复杂的问题并且仍在研究和开发中。
另外,对于大多数AIoT应用,ML加速器,尤其是深度神经网络(DNN),任务集中在GEMM操作的加速上,因为它们占整体操作的70%以上。优化GEMM的执行速度是计算机科学中的经典问题。在算法层面,矩阵乘法的时间复杂度可以通过Strassen算法从O(n3)降低到O(nlog 2 7),通过Winograd算法可以降低到O(n2.376)。在微架构层面,优化多见于冯诺依曼计算机,包括提高内存访问局部性和使用向量指令,以减少内存访问次数和提高缓存命中率。相比之下,在本发明中,本发明使用硬件/软件协同设计方法在PIM技术的帮助下加速GEMM。
为了解决上述挑战,本发明提出了异构内存架构(HMA),这是一种极简设计,可使用PIM内存升级现有的SoC设计,以提高性能和效率。
本发明的HMA的核心思想是像传统存储器一样在SoC上附加PIM存储器,如图3所示,而不是用PIM存储器构建独立的加速器。图4说明了整个HMA结构如何在SoC上工作,包括存内计算在***中应用方式,以及数据传输的两个方向,图4(a)为CPU获取存内计算模块出来的计算结果,图4(b)为CPU将输入送入存内计算模块去开始做计算。PIM存储器内的硬件组件如图3所示。PIM输入/输出缓冲器(由静态随机存取存储器SRAM实现的片上快速存储器,用于缓存PIM中的计算输入/输出数据)和PIM存储器都通过互连接口安装到***总线。计算模式输入通过物理金属总线连接,因此PIM内存可以直接访问PIM输入缓冲区中的数据。输出数据锁存器,加上额外的多路复用器/解码器和一个总线从属模块,形成一个“虚拟输出缓冲器”,即通过***总线的可寻址输出数据块。额外的PIM输出缓冲区是必须的,以缓存完整GEMM操作的中间部分和。通过这种硬件结构,CPU指示PIM进行编程以及执行内存中的GEMM计算。
图5说明了HMA内地址分配的典型情况,包括可能的地址分配,这里左边的数字需要按应用的时候设置。整个地址空间可以分为几个块。本发明以AIoT小型SoC为例进行SoC设计。地址的总宽度设置为32位。每个64MByte形成一个块。块0和块7中的地址保留用于CPU配置、指令存储器、内部***设备等。块1包括片上SRAM和桥接到低速总线的外部***设备。PIM相关的缓冲区和PIM存储器拥有仅用于GEMM加速的块3。本实施例中剩余的块4~6可用于将来的扩展。请注意,SoC的不同形状因素可能会导致基于其独特的总地址宽度以及片上存储器和PIM存储器的规模的不同划分方法。
HMA实施的一个关键先决条件是,片上互连网络能够为与PIM相关的双向数据传输提供足够的带宽,即(a)情况A:从PIM输出缓冲区获取PIM计算结果;(b)情况B:将输入向量/矩阵馈送到PIM输入缓冲区。本发明通过模拟AHB通信来验证这一点。寄存器传输级(RTL)代码在28nm技术节点上合成和模拟,片上时钟为1GHz,总线宽度为128位。PIM相关信息汇总在表1中。
表1 PIM存储器阵列规格
容量/内存阵列 | 256kb |
计算延迟@4b精度 | 18.3ns |
最大PIM阵列数/芯片 | 8 |
结果如图6所示。Y轴是数据传输率。上x轴是突发增量模式下AHB总线的事务大小,下x轴是PIM存储器阵列的数量。本发明模拟这种模式是因为向量/矩阵中的元素大多与线性分布的地址对齐。如表1所示,每个PIM内存阵列的大小为256kb。多个PIM存储器阵列并行工作,使输入/输出数据传输速率呈线性。图6(a)和(b)显示了两种情况的结果。它们分别对应于AHB管理器读取(情况A)和写入(情况B)的操作。它表明,同时工作的PIM存储器阵列越多,总线的数据传输速率越高。事务大小应提高到64字节,以覆盖8个PIM内存阵列时高达3000MByte/s的高PIM输出吞吐量。这样,常用的AHB可以处理PIM输入和输出,而无需额外的拥塞或互连缓冲。
另外,基于HMA硬件基础设施,本发明提出了一种软硬件协同设计方法,即HMA张量映射方法,以提高计算效率并最大限度地发挥HMA结构的优势。
深度神经网络需要大量的高维矩阵运算,这些都发生在本发明设计的PIM存储器中。在大多数情况下,操作数矩阵的大小大于提供的单个PIM内存的单元大小。更具体地说,在本发明的一个实施例中,PIM内存在I为1×16、V为1×64和W为64×16的维度中执行I=VW。而经典的简单两层感知器涉及784×100的权重矩阵,远大于64×16。因此,所有相关的高维大规模输入数据以及存储在传统内存中的权重数据都需要进行分区并馈入PIM内存,以提高计算效率。基于本发明的方法,本发明将PIM存储器中的所有矩阵乘法直接编译为一系列普通的存储器操作指令,相比于传统的PIM加速器属性PIM中的GEMM由定制指令控制,这项创新可以使PIM计算通过gcc工具链轻松编译,并根据这些指令在软件中进行优化。PIM内存指令的详细说明见表2,指令中的注(x,y)表示传统内存中矩阵左上角元素的地址偏差。
表2说明清单
操作说明 | 描述 |
LD.I(x,y) | 从传统内存中加载矩阵A |
LD.W(x,y) | 从传统内存加载矩阵B |
SD.R(x,y) | 将PIM结果存储到传统内存 |
SD.M | 将矩阵B存储到PIM存储器中 |
SD.V | 将矩阵A存储到PIM输入缓冲区 |
LD.O | 从PIM输出缓冲区加载计算结果 |
对于大多数设计,可以使用多个PIM和HMA结构来增强***性能。这些PIM内存应该并行调度,以利用这样一个事实,即在NN计算中,PIM内存中存储的权重数据不需要频繁更改。因此,如何分解这些操作取决于有多少HMA架构可供访问。如果PIM内存的数量足够大以覆盖整个矩阵权重,那么权重数据可以简单地保持未分割并部署在每个PIM内存中。将所有对应的子矩阵乘法结果拼接起来就可以得到最终的结果。然而,在大多数现实情况下,PIM和HMA结构不足以直接覆盖NN计算中的矩阵权重。由于这样的硬件限制,这些PIM中的权重数据不能保持不变。本发明不像传统的GEMM那样逐个矩阵运行GEMM矩阵并频繁交换权重数据,而是将操作拆分为乘法和加法组。与已存储在PIM矩阵中的某个权重相关的每个输入都需要一起计算,从而可以减少在PIM存储器中重新加载权重数据的频率。加载到同一行不同SRAM的计算结果对应叠加。当所有的乘法结果都准备好后,再进行加法运算。最后一步,将不同列的加法结果进行横向拼接,完成一次GEMM操作。
图7示出了优化前后GEMM的伪代码,以及HMA张量映射方法的图模型。例如,在PIM结构中计算矩阵乘法C=A×B,其中操作数矩阵A和B的大小分别为100×400和400×80。PIM输入的大小为1×64,每次操作时PIM内存GEMM的大小为64×16。为简单起见,本发明假设只有一种HMA结构。可以使用HMA-PIM(如图8所示)在以下步骤中完成此类操作:
1.“LD W(0,0)”&“SD.M”:从B矩阵的(0,0)位置取出大小为64×16的数据,存入HMA的PIM存储器中;
2.“LD I(0,0)”&“SD.V”:从A矩阵的(0,0)位置取1*16大小的数据存入HMA的输入缓冲区;
3、“LD O”&“SD R(0,0)”:从输出缓冲区中取出结果,存入传统内存;
4.“LD I(1.0);LD I(2.0);…;LD I(99,0)”:重复这个过程,依次从一个矩阵中取出数据,在PIM中计算;
5.“SD R(1.0);SD.R(2.0);…;SD R(99.0)”:写回PIM的计算结果,
6.“LD W(0,16)”:更新PIM内存中的数据,重复1-5的步骤。
频繁的内存访问会导致额外的开销。因此本发明通过PIM减少它内存访问频率。本发明给出了GEMM中内存访问的分析。对于给定的矩阵乘法问题,计算C=A×B,写成逐元素表达式:
其中A、B和C的矩阵大小分别为m×k、k×n和m×n。使用CPU循环的内存访问总数RTclassic为:
RTclassic=(2+1+1)·m·n·k=4·m·n·k (2)
其中m、n、k为累计求和的循环数;2+1+1是C、A、B需要访问的频率之和,涉及到数据传输延迟。基于上式,内存访问次数为4×100×400×80=1.28×107。
如果使用PIM进行计算,则内存访问频率RTPIM可以描述为:
parRowA、parColA、parRowB、parColB分别表示PIM输入缓冲区和PIM存储器中的分区矩阵A和B的数量。Inputcol是输入缓冲区的大小,而PIMrow和PIMcol是PIM内存的大小。
回到上面的例子,内存访问次数减少到6*100*400/64*80/16=2.1*104(PIM内存带来的访问次数减少100倍)。通过使用多核和建议的拼接方法,内存访问频率进一步降低为:
RTopt=par RouB·parColB·(2+4·parRowA) (4)
然后,上述相同示例中的内存访问次数可以进一步减少到400/64*80/16*(2+4*100)=1.407*104(由于提出的拼接方法,又减少了1.5倍)。
该工具包将矩阵乘法编译为PIM兼容指令系列,如图8所示,给定任意大小的矩阵A、B、输入缓冲区和PIM内存的大小以及同时工作的PIM内存数量。
本发明提出了一种异构存储器,以提高传统小规模嵌入式SoC上PIM的效率。在此基础上,本发明进一步提出了一种映射算法,以更好地利用PIM的加速。在几个常见的AIoT应用中充分探索了功耗和操作延迟。该分析可为PIM相关SoC设计的早期设计阶段的顶级软硬件协同设计提供很好的指导。
综上,上述实施例对具有存内/近存计算模块的SoC***的不同构型进行了详细说明,当然,本发明包括但不局限于上述实施中所列举的构型,任何在上述实施例提供的构型基础上进行变换的内容,均属于本发明所保护的范围。本领域技术人员可以根据上述实施例的内容举一反三。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的***而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。
Claims (10)
1.一种具有存内/近存计算模块的SoC***,包括:
内存通用总线,其被配置为传输内存调用指令;以及
存内/近存计算模块,其被配置为存储数据以及对所存储的数据进行运算,其中所述存内/近存计算模块具有第一接口,所述第一接口连接在内存通用总线上,其中存内/近存计算模块和/或第一接口被构造为使得通过在内存通用总线上传输的内存调用命令能够调用存内/近存计算模块,以进行存内/近存计算模块的操作。
2.根据权利要求1所述的具有存内/近存计算模块的SoC***,还包括:
嵌入式内存,其被配置为存储数据,所述嵌入式内存具有第二接口,所述第二接口连接在内存通用总线上。
3.如权利要求2所述的具有存内/近存计算模块的SoC***,其特征在于,存内/近存计算模块包括异构存储器,所述异构存储器被配置为利用基于异构存储器的张量映射方法划分张量,并在存内/近存计算模块上执行通用矩阵乘法运算。
4.如权利要求3所述的具有存内/近存计算模块的SoC***,其特征在于,所述SoC***的内存通用总线包括AHB总线和/或AXI总线。
5.如权利要求4所述的具有存内/近存计算模块的SoC***,其特征在于,存内/近存计算模块的工作模式包括内存模式和计算模式;
在内存模式下,通过R/W端口访问存内/近存计算
在计算模式下,向量中的输入数据V形成流进入PIM存模块的数据,以从存内/近存计算模块的内存阵列中读取和写入数据;储器,输入数据V直接与PIM存储器中的存储数据W交互,在锁存端口处输出计算结果I。
6.如权利要求5所述的具有存内/近存计算模块的SoC***,其特征在于,***总线的可寻址包括常用地址分配方式,根据SoC***的形状、SoC***的总地址宽度以及片上存储器和PIM存储器的规模划分常用地址,其包括:
***地址位宽32位,每64MB形成一个block;
Block0和Block7中的地址保留用于CPU配置、指令存储器、内部***电路I/O;
Block1用于桥接到低速总线的片上SRAM和外部***电路I/O;
Block3用于PIM相关缓存和PIM存储器,以及用于GEMM加速;
block4~6为可扩展地址。
7.如权利要求6所述的具有存内/近存计算模块的SoC***,其特征在于,PIM存储器中进行深度神经网络的高维矩阵运算,包括:
两层感知器权重矩阵及存储在内存中的权重数据进行分区并馈入PIM内存,以提高计算效率;
将PIM存储器中的所有矩阵乘法直接编译为通用内存调用命令,PIM计算通过gcc工具链编译,并根据通用内存调用命令在软件中进行优化。
8.如权利要求7所述的具有存内/近存计算模块的SoC***,其特征在于,通用内存调用命令包括:LD.I(x,y)为从SRAM中导出输入矩阵、LD.W(x,y)为从SRAM中导出权重矩阵、SD.R(x,y)为将计算结果导入到SRAM中、SD.M为将权重矩阵导入PIM中、SD.V为将输入数据导入input buffer、LD.O为从output buffer中导出计算结果;
通用内存调用命令中的(x,y)表示传统内存中矩阵左上角元素的地址偏差。
9.如权利要求8所述的具有存内/近存计算模块的SoC***,其特征在于,
使用多个PIM和HMA结构增强***性能,多个PIM内存并行调度,以在NN计算中,PIM内存中存储的权重数据不频繁更改;
与已存储在PIM矩阵中的某个权重相关的每个输入一起计算,以减少在PIM存储器中重新加载权重数据的频率;
加载到同一行不同SRAM的计算结果对应叠加;当所有的乘法结果都准备好后,再进行加法运算;
将不同列的加法结果进行横向拼接,完成一次GEMM操作。
10.一种SoC***的使用方法,其特征在于,包括:
提供存内/近存计算模块,其具有第一接口;
提供SoC***的嵌入式内存,其具有第二接口;
将存内/近存计算模块通过第一接口连接在***总线上;
将嵌入式内存通过第二接口连接在***总线上,其中***总线为SoC***的内存通用总线;以及
将存内/近存计算模块和/或第一接口构造为使得通用内存调用命令能够调用存内/近存计算模块,以进行存内/近存计算模块的控制和使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111531035.4A CN114356840A (zh) | 2021-12-15 | 2021-12-15 | 具有存内/近存计算模块的SoC*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111531035.4A CN114356840A (zh) | 2021-12-15 | 2021-12-15 | 具有存内/近存计算模块的SoC*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114356840A true CN114356840A (zh) | 2022-04-15 |
Family
ID=81098615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111531035.4A Pending CN114356840A (zh) | 2021-12-15 | 2021-12-15 | 具有存内/近存计算模块的SoC*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356840A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625691A (zh) * | 2022-05-17 | 2022-06-14 | 电子科技大学 | 一种基于乒乓结构的存内计算装置及方法 |
CN115061693A (zh) * | 2022-08-18 | 2022-09-16 | 统信软件技术有限公司 | 存内计算代码与微体系结构优化方法、装置及计算设备 |
CN115981751A (zh) * | 2023-03-10 | 2023-04-18 | 之江实验室 | 一种近存计算***以及近存计算方法、装置、介质及设备 |
CN116089356A (zh) * | 2023-04-11 | 2023-05-09 | 北京红山微电子技术有限公司 | 近存计算装置、近存计算方法、集成电路及存储介质 |
-
2021
- 2021-12-15 CN CN202111531035.4A patent/CN114356840A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625691A (zh) * | 2022-05-17 | 2022-06-14 | 电子科技大学 | 一种基于乒乓结构的存内计算装置及方法 |
CN115061693A (zh) * | 2022-08-18 | 2022-09-16 | 统信软件技术有限公司 | 存内计算代码与微体系结构优化方法、装置及计算设备 |
CN115061693B (zh) * | 2022-08-18 | 2022-11-04 | 统信软件技术有限公司 | 存内计算代码与微体系结构优化方法、装置及计算设备 |
CN115981751A (zh) * | 2023-03-10 | 2023-04-18 | 之江实验室 | 一种近存计算***以及近存计算方法、装置、介质及设备 |
CN116089356A (zh) * | 2023-04-11 | 2023-05-09 | 北京红山微电子技术有限公司 | 近存计算装置、近存计算方法、集成电路及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hajinazar et al. | SIMDRAM: A framework for bit-serial SIMD processing using DRAM | |
Gao et al. | Tetris: Scalable and efficient neural network acceleration with 3d memory | |
CN114356840A (zh) | 具有存内/近存计算模块的SoC*** | |
Mutlu et al. | Enabling practical processing in and near memory for data-intensive computing | |
Pedram et al. | Codesign tradeoffs for high-performance, low-power linear algebra architectures | |
CN111433758A (zh) | 可编程运算与控制芯片、设计方法及其装置 | |
TW202215227A (zh) | 組態檔案之運行時間修補 | |
Torabzadehkashi et al. | Accelerating hpc applications using computational storage devices | |
Paul et al. | MAHA: An energy-efficient malleable hardware accelerator for data-intensive applications | |
Wang et al. | Rerec: In-reram acceleration with access-aware mapping for personalized recommendation | |
CN108805277A (zh) | 基于多fpga的深度信念网络加速平台及其设计方法 | |
Sridharan et al. | X-former: In-memory acceleration of transformers | |
Zhuang et al. | High performance, low power matrix multiply design on acap: from architecture, design challenges and dse perspectives | |
Zhang et al. | Graphagile: An fpga-based overlay accelerator for low-latency gnn inference | |
Ma et al. | Coordinated DMA: improving the DRAM access efficiency for matrix multiplication | |
Wu et al. | PIM-GPT: A Hybrid Process-in-Memory Accelerator for Autoregressive Transformers | |
Diamantopoulos et al. | A system-level transprecision FPGA accelerator for BLSTM using on-chip memory reshaping | |
Zhou et al. | Pim-dl: Boosting dnn inference on digital processing in-memory architectures via data layout optimizations | |
Mahadurkar et al. | Co-exploration of NLA kernels and specification of compute elements in distributed memory cgras | |
US20230289398A1 (en) | Efficient Matrix Multiply and Add with a Group of Warps | |
Qiu et al. | Heterogeneous memory architecture accommodating processing-in-memory on SoC for AIoT applications | |
EP4268088A1 (en) | A network on chip processing system | |
Shahsavani et al. | Efficient compilation and mapping of fixed function combinational logic onto digital signal processors targeting neural network inference and utilizing high-level synthesis | |
Elshimy et al. | A Near-Memory Dynamically Programmable Many-Core Overlay | |
Qu et al. | Cim-mlc: A multi-level compilation stack for computing-in-memory accelerators |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |