CN113901746A - 一种用于向量代数的硬件加速器的设计方法 - Google Patents
一种用于向量代数的硬件加速器的设计方法 Download PDFInfo
- Publication number
- CN113901746A CN113901746A CN202111175556.0A CN202111175556A CN113901746A CN 113901746 A CN113901746 A CN 113901746A CN 202111175556 A CN202111175556 A CN 202111175556A CN 113901746 A CN113901746 A CN 113901746A
- Authority
- CN
- China
- Prior art keywords
- data
- vector
- space
- data stream
- hardware
- 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
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
- G06F30/3308—Design verification, e.g. functional simulation or model checking using simulation
- G06F30/331—Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation
-
- 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/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7871—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Complex Calculations (AREA)
Abstract
本发明公布了一种用于向量代数的硬件加速器的设计方法,通过对输入到硬件加速器的硬件数据流进行形式化分析,生成硬件加速器在空间上的拓扑结构,以及硬件加速器的片上存储的数据映射和访问序列;并使用预定义的硬件代码模板生成加速器硬件电路代码,为不同的向量运算统一生成硬件加速器,提升硬件加速器设计效率。
Description
技术领域
本发明涉及用于向量代数的硬件加速器设计技术,尤其涉及一种基于数据流分析和硬件代码生成的向量代数硬件加速器设计方法。
背景技术
向量代数通常被用于于机器学习、数据分析等广泛的应用中。在各类智能应用(图像处理、物体检测、决策分析、推荐系统、科学数据分析)领域应用广泛。向量代数具有不同的维度、大小和计算模式,需要特殊的硬件加速工具来进行实现。例如,矩阵乘法被广泛应用于科学计算、循环神经网络等应用中。二维卷积是深度神经网络应用中最流行的向量运算之一。它使用4维的权重向量和3维输入向量,并需要在四个维度中进行部分和累加。MTTKRP(Matricized tensor times Khatri-Rao Product)是推荐系统中广泛用于向量分解的运算,它以一个三维向量和两个矩阵作为输入并生成一个结果矩阵。由于向量代数规则的计算模式,向量代数通常使用专用的硬件加速器(以下简称:向量硬件加速器)实现快速运算。
大多数向量硬件加速器的设计遵循分层架构。向量硬件加速器通常由一组同构的计算单元(Processing Element,PE)、一个将PE连接在一起的片上网络、一个共享的存储器缓冲区和一个系统控制器组成。PE阵列可以提供巨大的并行性,PE之间的连接可以利用不同类型的数据重用。虽然大多数加速器采用相同的分层架构,但每个设计的实际实现可能会有很大差异。
在各种向量硬件加速器的设计参数中,硬件数据流起着最重要的作用,因为它决定了向量计算方式和PE之间的通信方式。硬件加速器的设计存在巨大的硬件数据流设计空间。起初,硬件数据流通过指定在每个PE内临时重用的向量进行分类。文献(Xuechao Weiet al.Automated systolic array architecture synthesis for high throughput CNNinference on fpgas.In DAC,2017)记载了使用输出固定(Output Stationary,OS)脉动阵列数据流,因为输出向量元素在运算期间留在PE内。类似地,文献(Norman P Jouppi etal.In-datacenter performance analysis of a tensor processing unit.In ISCA,2017)记载了TPU加速器使用权重固定(Weight Stationary,WS)数据流,而文献(Yu-HsinChen et al.Eyeriss:A spatial architecture for energy-efficient dataflow forconvolutional neural networks.In ISCA 2016)记载了Eyeriss加速器使用行固定(RowStationary,RS)数据流。
向量加速器硬件结构复杂,设计空间大,导致开发周期长,难以进行完整的设计空间探索。为了提高编程效率,高层次综合(High-Level Synthesis,HLS)工具已用于向量硬件加速器的设计,该工具支持通过软件式编程生成硬件。此外,现有工作还设计了领域专用语言(DSL,Domain-Specific Language)或其他符号来表示向量硬件加速器的数据流和硬件架构。然而,现有技术难以同时实现高性能、高开发效率和高可扩展性的向量硬件加速器。高性能向量硬件加速器往往使用低层次语言Verilog开发,效率较低。文献(Jason Congand Jie Wang.Polysa:polyhedral-based systolic array autocompilation.In ICCAD2018)记载,采用开发效率较高的HLS进行开发通常优化困难,难以实现向量硬件加速器的性能和扩展性。
发明内容
为了克服上述现有技术的不足,本发明提供一种面向向量代数的硬件加速器(向量硬件加速器)的设计方法。通过对用户输入的向量计算的数据流进行形式化分析,并且使用预定义的硬件电路代码模板进行硬件电路代码生成,在保证加速器硬件性能的同时克服向量计算加速器硬件设计优化耗时过长的问题。
为方便起见,本发明采用以下术语定义:
FPGA(Field Programmable Gate Array)现场可编程门阵列
STT(Space-Time Transformation)时间-空间变换
RS(Reuse Space)重用空间
PE(Proecssing Element)计算单元
IO(Input-Output)输入输出
IP核(Intellectual Property Core)知识产权核:在集成电路的可重用设计方法学中,指某一方提供的、形式为逻辑单元、芯片设计的可重用模组
RTL(Register Transistor Level)寄存器转换级电路
本发明使用文献(Bachrach,Jonathan,et al.Chisel:constructing hardwarein a scala embedded language.In DAC 2012.)记载的Chisel高层次语言,该语言用于硬件设计,同时支持寄存器级别的性能优化以及高层次语言的开发效率。本发明使用时空变换(Space-Time Transformation,STT)表示数据流,从而可以使用同一套高层次语言的代码生成应用于不同数据流的加速器硬件代码。在此基础上,开发出包含加速器阵列及存储结构的完整硬件加速器(向量硬件加速器)。
本发明提供的技术方案是:
一种用于向量代数的硬件加速器的设计方法。该方法应用于向量运算的硬件加速器设计技术领域,通过对对输入到硬件加速器的硬件数据流进行形式化分析,生成加速器在空间上的拓扑结构,及加速器片上存储的数据映射和访问序列。并且使用预定义的硬件代码模板生成加速器硬件电路代码,为各种不同的向量运算提供统一的生成方案,减少向量运算加速器硬件的设计周期,从而提升加速器硬件设计的效率。
具体来说,本发明方法包括如下步骤:
1)系统读取用户输入文件。
2)根据用户输入文件中的向量运算的代码来生成每一个操作数的访问矩阵A。
3)计算每个操作数的RS(重用空间)。
4)将重用空间RS拆分为3个子空间:RSD(数据流重用空间),RSM(存储重用空间),RSO(其他重用空间)。
本发明方法通过对输入到硬件加速器的硬件数据流进行形式化分析,生成硬件加速器在空间上的拓扑结构,以及硬件加速器的片上存储的数据映射和访问序列;并使用预定义的硬件代码模板生成加速器硬件电路代码,为不同的向量运算统一生成硬件加速器,提升硬件加速器设计效率;包括如下步骤:
1)获取用户输入文件,定义硬件加速器电路数据流的配置文件;
硬件加速器电路数据流的配置文件包括:向量运算的计算代码和时空转换矩阵;
向量运算的计算代码具体是用户输入文件中与智能应用相应的向量算法的计算代码,其中定义了输入操作数、输出操作数,以及由输入操作数进行计算得到输出操作数的算法;用户输入文件中的时空转换矩阵由计算循环下标到硬件加速器执行过程中时间向量和空间向量的一一映射得到;所述空间向量是表示计算单元PE位置的向量;映射的方式可表示为矩阵向量乘法;
2)根据用户输入文件中的向量运算的代码生成每一个输入操作数的访问矩阵A;
访问矩阵A将计算循环下标向量映射到内存中表示数据存储的多维数组坐标向量;A[i,j]表示第j层循环下标对A的第i维地址下标带来的倍率;可由用户输入文件中的向量运算计算表达式直接得到访问矩阵A,表示为如下的矩阵向量乘法:
AI=D
其中,I是计算循环下标向量,D是内存中表示存储的多维坐标向量;根据向量运算计算表达式,区分每个参与运算的向量是输入向量还是输出向量;
3)计算每个操作数的重用空间RS;
RS是在硬件加速器时空空间中的一个子空间,在子空间中的所有点,硬件加速器在时空坐标访问的存储数组坐标均为零;RS表示为如下矩阵方程的解空间:
AT-1x=0
其中,x为硬件加速器时空空间中的点,可直接通过求解上述矩阵方程得到;
4)将每个操作数的重用空间RS分别拆分为3个子空间:PE阵列数据流重用空间、存储重用空间RSM和其他重用空间RSO;
RS空间的每一个点由时间分量和空间分量组成,将每一个点表示为:[s1,s2,t1,t2,t3,…,tn];其中,RSD定义为:RS空间中的时间分量t2…tn分量均为0的子空间;RSM定义为:RS空间中所有s分量均为0,且t2…tn分量不全为0的子空间;RSO定义为RS空间减去RSD和RSM剩下的子空间;
RSD子空间定义硬件数据流的PE阵列数据流;PE阵列数据流包括在PE阵列中每个PE的电路结构、PE-PE互联方式及PE-存储互联方式;包括如下步骤5)~13):
RSM子空间定义硬件数据流的存储数据流;存储数据流包括存储单元内部的数据映射及存储单元的访问序列;
子空间RSD定义生成PE阵列数据流,包括如下步骤5)~10):
5)确定每个操作数PE阵列数据流的维度,根据RSD空间的维度对数据流进行分类;
6)根据每个操作数的数据流维度,生成该操作数的数据流;
6a)当RSD是0维时,对于每一个PE,均与一个独立的存储单元相连,不同的PE之间没有任何数据交互,对应生成单播数据流Unicast;跳转到步骤9)执行;
6b)当RSD是1维时,根据RSD向量在时间和空间是否为0,分为3种情况:
时间维度为0,空间不为0,跳转到步骤7a);时间维度不为0,空间维度为0,跳转到步骤7b);时间维度和空间维度均不为0,跳转到步骤7c);
6c)当RSD是2维时,根据RSD平面与时间方向的关系,分为3种情况:
与时间方向垂直,跳转执行步骤8a);与时间方向平行,跳转执行步骤8b);与时间方向不平行也不垂直,跳转执行步骤8c);
7)生成1维数据流;根据不同数据流的类型,分别执行步骤7a)~7c):
7a)当RSD时间分量为0,空间分量不为0时:此时数据在不同PE的同一个时间进行重用,对应生成多播数据流;
7b)当RSD时间分量不为0,空间分量为0时:此时数据在同一个PE的不同时间进行重用,对应生成保持数据流;
7c)当RSD时间分量和空间分量均不为0时:此时数据在不同PE的不同时间进行重用,且每经过固定的时间会跳转到固定距离的PE中,对应生成脉动数据流;
8)生成2维数据流;根据不同数据流的类型,分别执行8a)~8c)步骤:
8a)当该数据流形成平面,与时间方向平行时:此时数据流中的数据先通过脉动阵列传输到每个PE中,接下来在每个PE中保持不动;
8b)当该数据流形成平面,与时间方向垂直时:此时数据会直接广播到2维PE阵列的所有PE中;
8c)当该数据流形成平面,与时间方向既不垂直也不平行时:此时数据在2维阵列中,先沿横向按照脉动阵列数据流传播,再沿竖向按照多播数据流传播;
PE阵列由多个完全相同的PE组成2维矩阵,矩阵的不同PE之间存在PE-PE互联;部分PE与存储单元进行互联;PE阵列生成步骤包括:单PE硬件结构生成,PE-PE互联生成,以及PE-存储互联生成;
9)生成单PE硬件结构;
单个PE的生成包括:核心模块生成,以及连接模块生成;具体包括步骤9A)和9B):
9A)核心模块包括PE计算模块Computation Cell以及PE IO模块;核心模块对于不同数据流均相同;
PE计算模块通过调用硬件算法IP核实现;
PE IO模块,对每一个操作数分别设置输入端口、输出端口;输入端口均包含数据位Data和有效位Valid;输入端口读取其他PE或存储器传来的数据,输出端口将数据发送至其他PE或存储器;接下来对每个操作数分别执行步骤9)的操作;
9B)对每个操作数生成连接模块;
如果数据流是1维类型,分别执行9Ba)~9Bc)中的相应步骤,生成PE内部电路结构,生成单PE硬件结构;
9Ba)对于多播数据流,如果操作数是输入操作数,则直接将硬件电路输入端口的数据经过寄存器连接到硬件电路计算模块;如果操作数是输出操作数,则直接将硬件电路计算模块的输出传送至硬件电路输出端口;
9Bb)对于脉动数据流,如果是操作数是输入,硬件电路将输入端口的数据经过寄存器连接到计算模块,并将寄存器的输出数据连接到输出端口;如果操作数是输出,硬件电路将计算模块的输出数据连接到输出端口;
9Bc)对于保持数据流,则采用多个寄存器保存中间数据;
对于输入向量,输入端口的数据首先写入第一寄存器中并传输至输出端口;在第二寄存器需要更新数据时,第一寄存器将数据发送给第二寄存器,第二寄存器的数据发送给计算单元进行计算;对于输出向量,第一寄存器的数据与计算单元进行交互并更新;输入数据、第一寄存器的数据通过多选器发送给第二寄存器;第二寄存器的数据发送给输出端口;
RSD子空间定义硬件数据流的PE阵列数据流中的PE-存储互联模式包括步骤10)~11):
10)定义PE-存储互联模式;对每个操作数分别定义其PE-存储互联模式:
首先,根据RS的维度,为加速器定义不同的存储单元及与PE阵列的互联;如果数据流维度0维,执行11a);如果数据流维度1维,执行11b);如果数据流维度2维,执行11c);
11)生成PE-存储互联电路结构;
11a)数据在不同PE中无重用,此时每个PE均连接到独立的存储单元;
11b)数据形成一维的重用;此时存储也形成对应数据在PE中不重用的一维的维度,并连接到该维度的所有PE中;
11c)数据形成二维的重用;此时只有一个存储单元,通过寄存器缓存发送到所有PE中;
12)生成PE-PE互联电路结构;
12a)对于脉动、保持数据流的输入操作数,存储连接至第一个PE的输入端口;同时每个PE的输出端口连接到下一个PE的输入端口;
12b)对于多播数据流的输入操作数,存储连接至所有PE的输入端口;对于输出操作数,每个PE的输出端口连接到合并计算模块R;通过合并计算模块R进行树状合并,最后一个R模块的输出连接到存储;
12c)对于单播数据流,存储单元直接与PE的输入或输出端口相连;
13)生成RSM子空间硬件数据流的存储数据流及电路结构;
加速器的存储模块用来缓存外部输入的数据,并发送给PE阵列;存储模块包含多个存储单元,每个存储单元称为一个bank,用于建立向量数据与存储单元地址的映射及加速器对存储单元的访问模式;不同的数据流形成不同的存储单元数量,以及存储单元与PE阵列的互联;
每一个存储单元的生成包括以下过程:
通过向量数据与存储单元地址的映射定义存储单元的每个地址所存放的数据;访问模式用于生成存储单元的地址访问序列,通过在电路中使用计数器和状态机实现;
数据映射的定义表示为:
f(bank_id,bank_addr)=tensor_index
访问模式的定义表示为:
f(bank_id,t)=bank_addr
其中t为时间变量;bank_id为加速器中每个存储单元分配的唯一编号;bank_addr表示每一个存储单元内部的地址;tensor_index表示向量中数据的坐标;
给出存储单元的编号,以及在该存储单元内部的地址,数据映射算法生成该存储单元在该地址上存储的向量坐标;访问模式生成加速器在每一个时刻所访问的存储单元地址;
14)建立向量数据与存储单元地址的映射;
当存储单元与与存储单元最近的PE坐标即TOP_PE坐标进行一一映射后,根据TOP_PE坐标构建数据向量到存储单元的数据映射,包括:
根据TOP_PE的坐标s1,s2,…及任意时间分量t1,t2,t3,…,组成一个时空坐标x=[s1,s2,…,t1,t2,t3…]T;根据AT-1x=D,计算任意时刻所访问的数据向量坐标,生成初始的存储单元数据映射;即:对每个时间戳所访问的数据向量坐标,分配唯一的存储单元地址,并根据AT-1x=D计算出该地址对应的向量坐标;该数据映射表示为:
f(s1,s2,…,[t1,t2,…])=AT-1[s1,s2,…,t1,t2,…]T
15)消除冗余优化;
采用生成的RSM空间对映射进行优化,包括:
对于RSM空间的每一组基底V,设V=[r1,r2,…],找到V中不为0的最后一个位置ri;将AT-1矩阵的第i行删除;存储空间的维度也相应减去1;对于除了第i个位置的其他位置,其对应的地址分量受到第i维的影响;优化后的数据映射表示为:
通过上述步骤生成数据流空间,根据数据流类型生成PE阵列和存储单元结构,即设计生成完整的硬件加速器电路结构。
与现有技术相比,本发明的有益效果是:
本发明提供一种面向向量代数的硬件加速器(向量硬件加速器)的设计方法。通过对向量计算的硬件数据流进行形式化分析,并且使用预定义的硬件电路代码模板进行生成,在保证加速器硬件性能的同时克服向量计算加速器硬件设计优化耗时过长的问题。
附图说明
图1是本发明具体实施时保持数据流的PE内部从输入端口到输出端口的连接模块的示意图;
其中,左图是输入操作数在PE内部从输入端口到输出端口的互联模块;右图表示输出操作数在PE内部从输入端口到输出端口的互联模块。
图2是本发明具体实施中存储单元与PE阵列的互联示例;
其中,(a)、(b)、(c)分别是重用空间0维、1维和2维。
图3是本发明具体实施时针对一种用于矩阵乘法的脉动数据流的PE内部结构示例。
图4是本发明提供的面向向量代数的硬件加速器设计方法的流程框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供一种面向向量代数的硬件加速器(向量硬件加速器)的设计方法。通过对用户输入的向量计算的硬件数据流进行形式化分析,并且使用预定义的硬件电路代码模板生成加速器硬件电路代码,在保证加速器硬件性能的同时克服向量计算加速器硬件设计优化耗时过长的问题。
具体实施时,如图4所示,本发明提供的面向向量代数的硬件加速器(向量硬件加速器)的设计方法包括如下步骤:
1)获取用户输入文件,定义硬件加速器电路数据流的配置文件;
向量硬件加速器系统读取用户输入文件。根据用户输入文件定义硬件加速器电路数据流的配置文件。用户输入文件包括两个部分:(a)向量运算的计算代码。用户需要根据各类智能应用的类型,编写对应向量算法的计算代码作为向量运算的计算代码,输入到本发明的向量硬件加速器系统中。例如,针对物体检测应用,需要采用卷积神经网络进行计算,卷积神经网络采用二维卷积计算,所以针对物体检测应用,将二维卷积的计算代码作为向量运算的计算代码。该代码使用多层嵌套循环表示,在最内层循环内部定义每一步循环的计算表达式;向量运算的计算代码中定义了输入操作数、输出操作数,以及由输入操作数进行计算得到输出操作数的算法。以及(b)时空转换(T)矩阵。时空转换矩阵T定义了由计算循环下标到加速器执行过程中时间戳和空间(计算单元PE位置)向量的一一映射,时空转换矩阵对硬件电路的工作映射方式进行了定义。该映射方式可表示为矩阵向量乘法:
TI=S
其中,I是计算循环下标向量;S是表示加速器计算的时间和空间向量;T是用户输入的时空转换矩阵;S由空间和时间分量组成,可被表示为:[s1,s2,t1,t2,t3,…,tn]。其中s1,s2表示空间分量,一般有2维。t1,t2,t3,…,tn表示时间分量,可以有任意维度。S向量的长度与I向量长度相等,均为向量运算的计算表达式的循环层数。
2)根据用户输入文件中的向量运算的计算代码(计算表达式)来生成每一个输入操作数和输出操作数的访问矩阵A。
具体来说,访问矩阵A将计算循环下标向量映射到内存中表示数据存储的多维数组坐标向量。对于每个操作数,其访问矩阵A均可能不同。具体来说,A[i,j]定义为:第j层循环下标对A的第i维地址下标带来的倍率。A矩阵可由用户输入文件中的向量运算计算表达式直接得到。该过程中的向量运算计算表达式可表示为如下的矩阵向量乘法:
AI=D
其中I是计算循环下标向量,D是内存中表示存储的多维坐标向量。另外,系统根据向量运算计算表达式,区分每个参与运算的操作数是输入操作数还是输出操作数。
3)计算每个操作数的RS(重用空间)。
RS定义为:在硬件加速器时空空间中的一个子空间。在这个子空间中的所有点,加速器在这个时空坐标访问的存储数组坐标均为零。RS可视为如下矩阵方程的解空间:
AT-1x=0
其中,x为加速器时空空间中的点。根据1)和2),已经得到访问矩阵A和时空转换矩阵T。因此,x可直接通过求解上述矩阵方程得到。
4)将每个操作数的重用空间RS分别拆分为3个子空间:RSD(PE阵列数据流重用空间),RSM(存储重用空间),RSO(其他重用空间)。
RS空间的每一个点由时间分量和空间分量组成,可被表示为:[s1,s2,t1,t2,t3,…,tn]。其中,RSD定义为:RS空间中的时间分量t2…tn分量均为0的子空间。RSM定义为:RS空间中所有s分量均为0,且t2…tn分量不全为0的子空间。RSO定义为RS空间减去RSD和RSM剩下的子空间。如表1所示。
表1重用空间的分类
RSD和RSM子空间分别对应整个硬件数据流的两个部分。RSD子空间定义了PE阵列数据流。PE阵列数据流包括在PE阵列中每个PE的电路结构,PE-PE互联方式及PE-存储互联方式。RSM子空间定义了存储数据流。存储数据流包括存储单元内部的数据映射,及存储单元的访问序列。
首先,本发明对RSD空间进行分析,并生成PE阵列数据流。
5)确定每个操作数PE阵列数据流的维度。
根据RSD空间的维度(0维、1维或2维)对数据流进行分类。
6)根据每个操作数的数据流维度,生成该操作数的数据流。
RSD是0维时,执行6a)步骤。RSD是1维时,执行6b)步骤。RSD是2维时,执行6c)步骤。
6a)当RSD是0维时,对于该操作数在PE阵列中不存在重复使用。因此,对于每一个PE,均有一个独立的存储单元与之相连。不同的PE之间不存在任何数据交互。对应单播(Unicast)数据流。再跳转到步骤9)。
6b)当RSD是1维时,根据RSD向量在时间和空间是否为0,分为3种情况。时间维度为0,空间不为0,跳转到步骤7a)。时间维度不为0,空间维度为0,跳转到步骤7b)。时间维度和空间维度均不为0,跳转到步骤7c)。
6c)当RSD是2维时,根据RSD平面与时间方向的关系,分为3种情况。与时间方向垂直,跳转执行步骤8a)。与时间方向平行,跳转执行步骤8b)。与时间方向不平行也不垂直,跳转执行步骤8c)。
7)生成1维数据流。根据不同数据流的类型,分别执行7a)~7c)步骤。如表2所示。
表2 1维数据流的分类
类型 | 时间、空间分量 | 示例[s<sub>1</sub>,s<sub>2</sub>,t<sub>1</sub>] |
多播(Multicast) | 时间分量为0,空间分量不为0 | [1,0,0] |
保持(Stationary) | 时间分量不为0,空间分量为0 | [0,0,1] |
脉动(Systolic) | 时间分量和空间分量均不为0 | [1,0,1] |
7a)当RSD时间分量为0,空间分量不为0时:此时数据会在不同PE的同一个时间进行重用,对应生成多播(Multicast)数据流。
7b)当RSD时间分量不为0,空间分量为0时:此时数据会在同一个PE的不同时间进行重用。对应生成保持(Stationary)数据流。
7c)当RSD时间分量和空间分量均不为0时:此时数据会在不同PE的不同时间进行重用。且每经过固定的时间会跳转到固定距离的PE中。对应生成脉动(Systolic)数据流。
8)2维数据流生成。根据不同数据流的类型,分别执行8a)~8c)步骤。
8a)当该数据流形成平面,与时间方向平行时:此时数据流中的数据先通过脉动阵列传输到每个PE中,接下来在每个PE中保持不动。
8b)当该数据流形成平面,与时间方向垂直时:此时数据会直接广播到2维PE阵列的所有PE中。
8c)当该数据流形成平面,与时间方向既不垂直也不平行时:此时数据在2维阵列中,先沿横向按照脉动阵列数据流传播,再沿竖向按照多播数据流传播。。
9)生成单PE硬件结构。
PE阵列由多个完全相同的PE组成2维矩阵,矩阵的不同PE之间存在PE-PE互联。部分PE还与存储单元进行互联。PE阵列生成步骤包括单PE硬件结构生成,PE-PE互联生成,以及PE-存储互联生成三个部分。
首先,本发明定义单个PE的硬件结构生成方案。对于单个PE的生成,本发明将单个PE的生成分为两个步骤:核心模块生成,以及连接模块生成。具体包括步骤9A)和9B):
9A)核心模块包括PE计算模块(Computation Cell),以及PE IO模块。核心模块对于不同数据流均是一样的。PE计算模块Computation Cell通过调用硬件算法IP核实现。PEIO模块,对每一个操作数分别设置输入、输出的端口。输入端口均包含数据位(Data)和有效位(Valid)。输入端口读取其他PE或存储器传来的数据,输出端口将数据发送至其他PE或存储器。接下来,对每个操作数分别执行步骤9)的操作。
9B)对每个操作数生成连接模块;
如果数据流是1维类型,分别执行9Ba)~9Bc)中的相应步骤,生成PE内部电路结构,生成单PE硬件结构。如果数据流是2维,则将2维平面表示的数据流分解为两个线性无关的1维数据流,对两个1维数据流分别执行9Ba)~9Bc)的步骤。
9Ba)多播(Multicast)数据流。对于多播数据流,如果操作数是输入操作数,则直接将硬件电路输入端口的数据经过寄存器连接到硬件电路计算模块。如果操作数是输出操作数,则直接将硬件电路计算模块的输出传送至硬件电路输出端口。
9Bb)脉动(Systolic)数据流。对于脉动数据流,如果是操作数是输入,硬件电路将输入端口的数据经过寄存器连接到计算模块,并将寄存器的输出数据连接到输出端口。如果操作数是输出,硬件电路将计算模块的输出数据连接到输出端口。
9Bc)保持(Systolic)数据流。此时保持数据流连接较为复杂,需要多个寄存器保存中间数据。对于输入向量和输出向量来说,硬件电路具体结构由图1表示。对输入向量而言,输入端口的数据首先写入寄存器1中并传输至输出端口。在寄存器2需要更新数据之时,寄存器1将数据发送给寄存器2,寄存器2的数据发送给计算单元进行计算。对输出向量而言,寄存器1的数据与计算单元进行交互并更新。输入数据、寄存器1的数据通过多选器发送给寄存器2。寄存器2的数据发送给输出端口。
图3展示了用于矩阵乘法的一种脉动阵列的PE内部电路结构的示意图。左图是该PE的核心模块,包括计算单元及每个操作数的输入、输出端口。右图是包括连接模块的完整PE阵列结构。对于A和B操作数,采用脉动数据流,由reg1连接in_A和out_A,reg2连接in_B和out_B。对于C操作数,采用保持数据流,采用图1右图所定义的电路结构。
10)定义PE-存储互联模式。
在本步骤中,进行PE-存储互联模式的定义。对每个操作数分别定义其PE-存储互联模式。首先,根据RS的维度,为加速器定义不同的存储单元及与PE阵列的互联,分别执行步骤11a)~11c)。如果数据流维度0维,执行11a);如果数据流维度1维,执行11b);如果数据流维度2维,执行11c)。
11)生成PE-存储互联电路结构。
11a)数据在不同PE中无重用。此时每个PE均连接到独立的存储单元。
11b)数据形成一维的重用。此时存储也形成一维,对应数据在PE中不重用的维度,并连接到该维度的所有PE中。
11c)数据形成二维的重用。此时只有一个存储单元,通过寄存器缓存发送到所有PE中。
12)生成PE-PE互联电路结构。
对于脉动、保持数据流,执行12a)步骤。对于多播数据流,执行12b)步骤。对于单播数据流,执行12c)步骤。
12a)对于脉动、保持数据流的输入操作数,存储连接至第一个PE的输入端口。同时每个PE的输出端口连接到下一个PE的输入端口。
12b)对于多播数据流的输入操作数,存储连接至所有PE的输入端口。对于输出操作数,每个PE的输出端口连接到合并计算模块(R)。R模块进行树状合并。最后一个R模块的输出连接到存储。
12c)对于单播数据流,存储单元直接与PE的输入或输出端口相连。
13)生成RSM子空间硬件数据流存储数据流及电路结构。
加速器的存储模块用来缓存外部输入的数据,并发送给PE阵列。存储模块包含多个存储单元,每个存储单元称为一个bank。不同的数据流会形成不同的存储单元数量,以及存储单元与PE阵列的互联。每一个存储单元的生成包括以下过程。
存储单元实现的功能主要包括:(a)向量数据与存储单元地址的映射,为每一个操作数向量中的所有数据点,分配一个存储单元的地址;及(b)加速器对存储单元的访问模式,即加速器在运行的每一个时钟周期访问存储单元的地址。向量数据与存储单元地址的映射定义了存储单元的每个地址所存放的数据。访问模式在电路中使用计数器和状态机进行实现,用于生成存储单元的地址访问序列。加速器中存在多个存储单元,为每个存储单元分配一个唯一的bank_id,表示其编号。bank_addr表示每一个存储单元内部的地址。tensor_index表示向量中数据的坐标。数据映射可定义为:
f(bank_id,bank_addr)=tensor_index
访问模式可定义为:
f(bank_id,t)=bank_addr
其中t为时间变量。给出存储单元的编号,以及在该存储单元内部的地址,数据映射算法生成该存储单元在该地址上存储的向量坐标。访问模式生成加速器在每一个时刻所访问的存储单元地址。
根据图2的结构,对每个存储单元和与之相连的PE组进行对应。在同一个PE组内部,不同的PE通过互联与同一个存储单元进行数据交互。PE组可能由单个PE,或者多个PE组成。对于每个PE组,按照数据传输的方向,与存储单元最近的PE称之为TOP_PE。根据互联的拓扑结构,首先对存储单元与TOP_PE的坐标TOP_PE_index进行一一映射。该映射可表示为:
f(bank_id)=TOP_PE_index
14)建立向量数据与存储单元地址的映射。
当存储单元与与存储单元最近的PE(TOP_PE)坐标进行一一映射后,本发明根据TOP_PE坐标构建数据向量到存储单元的数据映射。首先,根据TOP_PE的坐标s1,s2,…及任意时间分量t1,t2,t3,…,可组成一个时空坐标x=[s1,s2,…,t1,t2,t3…]T。根据AT-1x=D,可计算任意时刻所访问的数据向量坐标。由此,可生成初始的存储单元数据映射。即:对每个时间戳所访问的数据向量坐标,分配唯一的存储单元地址,并根据AT-1x=D计算出该地址对应的向量坐标。该数据映射可表示为:
f(s1,s2,…,[t1,t2,…])=AT-1[s1,s2,…,t1,t2,…]T
15)消除冗余优化。
在步骤15)生成的初始的存储单元数据映射中定义了一个可行的存储单元数据映射方案。但是,这种数据映射会为每一个不同的时间分配不同的存储单元地址。由于不同的时间可能访问相同的数据,这种映射方式会带来存储的冗余。为消除这种冗余,本发明采用步骤4)生成的RSM空间对映射进行优化。对于RSM空间的每一组基底V,设V=[r1,r2,…]。找到V中不为0的最后一个位置ri。将AT-1矩阵的第i行删除。此时存储空间的维度也相应减去1。对于除了第i个位置的其他位置,其对应的地址分量会受到第i维的影响。优化后的数据映射可表示为:
16)完整加速器生成。
综合步骤1-4的数据流空间生成,步骤5-8的数据流类型分析,步骤9-12的PE阵列生成,及步骤13-15的存储单元结构,生成完整的加速器电路架构。
本发明可采取高层次语言进行实现。用户输入计算定义及时空变换矩阵,本发明采用以上步骤分别生成PE阵列、PE-PE互联,PE-存储互联,存储单元数据映射,加速器对存储单元的访问控制器的硬件结构,并采取高层次硬件生成工具进行RTL代码生成。
利用本发明设计生成的用于向量代数的硬件加速器,可用于各类智能应用(图像处理、物体检测、决策分析、推荐系统、自然语言处理、科学数据分析)领域。用户对于智能应用类的问题,编写实现核心算法的代码,及表示PE阵列及存储数据流的时空转换矩阵。本发明通过算法代码和时空转换矩阵生成用于对应向量运算的硬件加速器。加速器可实现缩短计算时间,提升计算效率的作用。本发明优化了向量硬件加速器的设计效率,克服向量计算加速器硬件设计优化耗时过长的问题
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (6)
1.一种用于向量代数的硬件加速器的设计方法,其特征是,通过对输入到硬件加速器的硬件数据流进行形式化分析,生成硬件加速器在空间上的拓扑结构,以及硬件加速器的片上存储的数据映射和访问序列;并使用预定义的硬件代码模板生成加速器硬件电路代码,为不同的向量运算统一生成硬件加速器,提升硬件加速器设计效率;包括如下步骤:
1)获取用户输入文件,定义硬件加速器电路数据流的配置文件;
硬件加速器电路数据流的配置文件包括:向量运算的计算代码和时空转换矩阵;
向量运算的计算代码具体是用户输入文件中与智能应用相应的向量算法的计算代码,其中定义输入操作数、输出操作数,以及由输入操作数进行计算得到输出操作数的算法;用户输入文件中的时空转换矩阵由计算循环下标到硬件加速器执行过程中时间向量和空间向量的一一映射得到;所述空间向量是表示计算单元PE位置的向量;映射的方式可表示为矩阵向量乘法;
2)根据用户输入文件中的向量运算的代码生成每一个操作数的访问矩阵A;
访问矩阵A将计算循环下标向量映射到内存中表示数据存储的多维数组坐标向量;A[i,j]表示第j层循环下标对A的第i维地址下标带来的倍率;可由用户输入文件中的向量运算计算表达式直接得到访问矩阵A,表示为如下的矩阵向量乘法:
AI=D
其中,I是计算循环下标向量,D是内存中表示存储的多维坐标向量;根据向量运算计算表达式,区分每个参与运算的向量是输入向量还是输出向量;
3)计算每个操作数的重用空间RS;
RS是在硬件加速器时空空间中的一个子空间,在子空间中的所有点,硬件加速器在时空坐标访问的存储数组坐标均为零;RS表示为如下矩阵方程的解空间:
AT-1x=0
其中,x为硬件加速器时空空间中的点,可直接通过求解上述矩阵方程得到;
4)将每个操作数的重用空间RS分别拆分为3个子空间:PE阵列数据流重用空间、存储重用空间RSM和其他重用空间RSO;
RS空间的每一个点由时间分量和空间分量组成,将每一个点表示为:[s1,s2,t1,t2,t3,…,tn];其中,RSD定义为:RS空间中的时间分量t2…tn分量均为0的子空间;RSM定义为:RS空间中所有s分量均为0,且t2…tn分量不全为0的子空间;RSO定义为RS空间减去RSD和RSM剩下的子空间;
RSD子空间定义硬件数据流的PE阵列数据流;PE阵列数据流包括在PE阵列中每个PE的电路结构、PE-PE互联方式及PE-存储互联方式;包括如下步骤5)~13):
RSM子空间定义硬件数据流的存储数据流;存储数据流包括存储单元内部的数据映射及存储单元的访问序列;
子空间RSD定义生成PE阵列数据流,包括如下步骤5)~10):
5)确定每个操作数PE阵列数据流的维度,根据RSD空间的维度对数据流进行分类;
6)根据每个操作数的数据流维度,生成该操作数的数据流;
6a)当RSD是0维时,对于每一个PE,均与一个独立的存储单元相连,不同的PE之间没有任何数据交互,对应生成单播数据流Unicast;跳转到步骤9)执行;
6b)当RSD是1维时,根据RSD向量在时间和空间是否为0,分为3种情况:
时间维度为0,空间不为0,跳转到步骤7a);时间维度不为0,空间维度为0,跳转到步骤7b);时间维度和空间维度均不为0,跳转到步骤7c);
6c)当RSD是2维时,根据RSD平面与时间方向的关系,分为3种情况:
与时间方向垂直,跳转执行步骤8a);与时间方向平行,跳转执行步骤8b);与时间方向不平行也不垂直,跳转执行步骤8c);
7)生成1维数据流;根据不同数据流的类型,分别执行步骤7a)~7c):
7a)当RSD时间分量为0,空间分量不为0时:此时数据在不同PE的同一个时间进行重用,对应生成多播数据流;
7b)当RSD时间分量不为0,空间分量为0时:此时数据在同一个PE的不同时间进行重用,对应生成保持数据流;
7c)当RSD时间分量和空间分量均不为0时:此时数据在不同PE的不同时间进行重用,且每经过固定的时间会跳转到固定距离的PE中,对应生成脉动数据流;
8)生成2维数据流;根据不同数据流的类型,分别执行8a)~8c)步骤:
8a)当该数据流形成平面,与时间方向平行时:此时数据流中的数据先通过脉动阵列传输到每个PE中,接下来在每个PE中保持不动;
8b)当该数据流形成平面,与时间方向垂直时:此时数据会直接广播到2维PE阵列的所有PE中;
8c)当该数据流形成平面,与时间方向既不垂直也不平行时:此时数据在2维阵列中,先沿横向按照脉动阵列数据流传播,再沿竖向按照多播数据流传播;
PE阵列由多个完全相同的PE组成2维矩阵,矩阵的不同PE之间存在PE-PE互联;部分PE与存储单元进行互联;PE阵列生成步骤包括:单PE硬件结构生成,PE-PE互联生成,以及PE-存储互联生成;
9)生成单PE硬件结构;
单个PE的生成包括:核心模块生成,以及连接模块生成;具体包括步骤9A)和9B):
9A)核心模块包括PE计算模块Computation Cell以及PE IO模块;核心模块对于不同数据流均相同;
PE计算模块通过调用硬件算法IP核实现;
PE IO模块,对每一个操作数分别设置输入端口、输出端口;输入端口均包含数据位Data和有效位Valid;输入端口读取其他PE或存储器传来的数据,输出端口将数据发送至其他PE或存储器;接下来对每个操作数分别执行步骤9)的操作;
9B)对每个操作数生成连接模块;
如果数据流是1维类型,分别执行9Ba)~9Bc)中的相应步骤,生成PE内部电路结构,生成单PE硬件结构;
9Ba)对于多播数据流,如果操作数是输入操作数,则直接将硬件电路输入端口的数据经过寄存器连接到硬件电路计算模块;如果操作数是输出操作数,则直接将硬件电路计算模块的输出传送至硬件电路输出端口;
9Bb)对于脉动数据流,如果是操作数是输入,硬件电路将输入端口的数据经过寄存器连接到计算模块,并将寄存器的输出数据连接到输出端口;如果操作数是输出,硬件电路将计算模块的输出数据连接到输出端口;
9Bc)对于保持数据流,则采用多个寄存器保存中间数据;
对于输入向量,输入端口的数据首先写入第一寄存器中并传输至输出端口;在第二寄存器需要更新数据时,第一寄存器将数据发送给第二寄存器,第二寄存器的数据发送给计算单元进行计算;对于输出向量,第一寄存器的数据与计算单元进行交互并更新;输入数据、第一寄存器的数据通过多选器发送给第二寄存器;第二寄存器的数据发送给输出端口;
RSD子空间定义硬件数据流的PE阵列数据流中的PE-存储互联模式包括步骤10)~11):
10)定义PE-存储互联模式;对每个操作数分别定义其PE-存储互联模式:
首先,根据RS的维度,为加速器定义不同的存储单元及与PE阵列的互联;如果数据流维度0维,执行11a);如果数据流维度1维,执行11b);如果数据流维度2维,执行11c);
11)生成PE-存储互联电路结构;
11a)数据在不同PE中无重用,此时每个PE均连接到独立的存储单元;
11b)数据形成一维的重用;此时存储也形成对应数据在PE中不重用的一维的维度,并连接到该维度的所有PE中;
11c)数据形成二维的重用;此时只有一个存储单元,通过寄存器缓存发送到所有PE中;
12)生成PE-PE互联电路结构;
12a)对于脉动、保持数据流的输入操作数,存储连接至第一个PE的输入端口;同时每个PE的输出端口连接到下一个PE的输入端口;
12b)对于多播数据流的输入操作数,存储连接至所有PE的输入端口;对于输出操作数,每个PE的输出端口连接到合并计算模块R;通过合并计算模块R进行树状合并,最后一个R模块的输出连接到存储;
12c)对于单播数据流,存储单元直接与PE的输入或输出端口相连;
13)生成RSM子空间硬件数据流的存储数据流及电路结构;
加速器的存储模块用来缓存外部输入的数据,并发送给PE阵列;存储模块包含多个存储单元,每个存储单元称为一个bank,用于建立向量数据与存储单元地址的映射及加速器对存储单元的访问模式;不同的数据流形成不同的存储单元数量,以及存储单元与PE阵列的互联;
每一个存储单元的生成包括以下过程:
通过向量数据与存储单元地址的映射定义存储单元的每个地址所存放的数据;访问模式用于生成存储单元的地址访问序列,通过在电路中使用计数器和状态机实现;
数据映射的定义表示为:
f(bank_id,bank_addr)=tensor_index
访问模式的定义表示为:
f(bank_id,t)=bank_addr
其中t为时间变量;bank_id为加速器中每个存储单元分配的唯一编号;bank_addr表示每一个存储单元内部的地址;tensor_index表示向量中数据的坐标;
给出存储单元的编号,以及在该存储单元内部的地址,数据映射算法生成该存储单元在该地址上存储的向量坐标;访问模式生成加速器在每一个时刻所访问的存储单元地址;
14)建立向量数据与存储单元地址的映射;
当存储单元与与存储单元最近的PE坐标即TOP_PE坐标进行一一映射后,根据TOP_PE坐标构建数据向量到存储单元的数据映射,包括:
根据TOP_PE的坐标s1,s2,…及任意时间分量t1,t2,t3,…,组成一个时空坐标x=[s1,s2,…,t1,t2,t3…]T;根据AT-1x=D,计算任意时刻所访问的数据向量坐标,生成初始的存储单元数据映射;即:对每个时间戳所访问的数据向量坐标,分配唯一的存储单元地址,并根据AT-1x=D计算出该地址对应的向量坐标;该数据映射表示为:
f(s1,s2,…,[t1,t2,…])=AT-1[s1,s2,…,t1,t2,…]T
15)消除冗余优化;
采用生成的RSM空间对映射进行优化,包括:
对于RSM空间的每一组基底V,设V=[r1,r2,…],找到V中不为0的最后一个位置ri;将AT-1矩阵的第i行删除;存储空间的维度也相应减去1;对于除了第i个位置的其他位置,其对应的地址分量受到第i维的影响;优化后的数据映射表示为:
通过上述步骤生成数据流空间,根据数据流类型生成PE阵列和存储单元结构,即设计生成完整的硬件加速器电路结构。
2.如权利要求1所述用于向量代数的硬件加速器的设计方法,其特征是,所述智能应用包括物体检测应用。
3.如权利要求2所述用于向量代数的硬件加速器的设计方法,其特征是,智能应用相应的向量算法的计算代码为对物体检测应用采用卷积神经网络进行的计算代码;所述计算代码使用多层嵌套循环表示,在最内层循环内部定义每一步循环的计算表达式。
4.如权利要求1所述用于向量代数的硬件加速器的设计方法,其特征是,步骤1)中,映射方式表示为矩阵向量乘法具体是:
TI=S
其中,I是计算循环下标向量;S是表示加速器计算的时间和空间向量;T是用户输入的时空转换矩阵;S由空间和时间分量组成,可表示为:[s1,s2,t1,t2,t3,…,tn];其中s1,s2表示空间分量;t1,t2,t3,…,tn表示时间分量;S向量的长度与I向量长度相等,均为向量运算的计算表达式的循环层数。
5.如权利要求1所述用于向量代数的硬件加速器的设计方法,其特征是,RSD空间的维度为0维、1维或2维。
6.如权利要求1所述用于向量代数的硬件加速器的设计方法,其特征是,步骤13)中,对每个存储单元和与之相连的PE组进行对应;在同一个PE组内部,不同的PE通过互联与同一个存储单元进行数据交互;PE组为单个PE或由多个PE组成;对存储单元与TOP_PE的坐标进行一一映射;表示为:
f(bank_id)=TOP_PE_index
其中,TOP_PE_index为TOP_PE的坐标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111175556.0A CN113901746A (zh) | 2021-10-09 | 2021-10-09 | 一种用于向量代数的硬件加速器的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111175556.0A CN113901746A (zh) | 2021-10-09 | 2021-10-09 | 一种用于向量代数的硬件加速器的设计方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113901746A true CN113901746A (zh) | 2022-01-07 |
Family
ID=79190719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111175556.0A Pending CN113901746A (zh) | 2021-10-09 | 2021-10-09 | 一种用于向量代数的硬件加速器的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113901746A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114462340A (zh) * | 2022-04-12 | 2022-05-10 | 北京大学 | 用于硬件加速器的存储—计算模块互联电路自动设计方法 |
WO2024000464A1 (zh) * | 2022-06-30 | 2024-01-04 | 华为技术有限公司 | 一种张量计算的分块策略生成方法及装置 |
-
2021
- 2021-10-09 CN CN202111175556.0A patent/CN113901746A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114462340A (zh) * | 2022-04-12 | 2022-05-10 | 北京大学 | 用于硬件加速器的存储—计算模块互联电路自动设计方法 |
WO2023197438A1 (zh) * | 2022-04-12 | 2023-10-19 | 北京大学 | 用于硬件加速器的存储—计算模块互联电路自动设计方法 |
WO2024000464A1 (zh) * | 2022-06-30 | 2024-01-04 | 华为技术有限公司 | 一种张量计算的分块策略生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11681650B2 (en) | Execution engine for executing single assignment programs with affine dependencies | |
Zhou et al. | Hitgraph: High-throughput graph processing framework on fpga | |
JáJá | Parallel algorithms | |
Wang et al. | FPDeep: Scalable acceleration of CNN training on deeply-pipelined FPGA clusters | |
Johnsson et al. | Alternating direction methods on multiprocessors | |
CN113901746A (zh) | 一种用于向量代数的硬件加速器的设计方法 | |
Gu et al. | DLUX: A LUT-based near-bank accelerator for data center deep learning training workloads | |
Jia et al. | Tensorlib: A spatial accelerator generation framework for tensor algebra | |
Yin et al. | Conflict-free loop mapping for coarse-grained reconfigurable architecture with multi-bank memory | |
Rajopadhye et al. | Systolic array synthesis by static analysis of program dependencies | |
Moon et al. | Evaluating spatial accelerator architectures with tiled matrix-matrix multiplication | |
CN114356840A (zh) | 具有存内/近存计算模块的SoC系统 | |
Oliveira et al. | An algebraic-combinatorial model for the identification and mapping of biochemical pathways | |
Yang et al. | Aero: Design space exploration framework for resource-constrained cnn mapping on tile-based accelerators | |
EP3108358B1 (en) | Execution engine for executing single assignment programs with affine dependencies | |
CN114462340B (zh) | 用于硬件加速器的存储—计算模块互联电路自动设计方法 | |
Colleman et al. | COAC: Cross-Layer Optimization of Accelerator Configurability for Efficient CNN Processing | |
Koike et al. | A novel computational model for GPUs with applications to efficient algorithms | |
Korneev | Parallel Programming | |
Kepner et al. | Software technologies for high-performance parallel signal processing | |
Park et al. | Toward optimal FPGA implementation of deep convolutional neural networks for handwritten Hangul character recognition | |
Li et al. | Memory-Computing Decoupling: A DNN Multitasking Accelerator with Adaptive Data Arrangement | |
Jarrah et al. | Optimized parallel architecture of evolutionary neural network for mass spectrometry data processing | |
Bank Tavakoli | Reconfigurable High-Performance Computing of Sparse Linear Algebra | |
Ayyagari et al. | Efficient Implementation of Pooling Operation for AI 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 |