CN117687813A - 一种面向异构平台的张量计算数据流映射方法 - Google Patents
一种面向异构平台的张量计算数据流映射方法 Download PDFInfo
- Publication number
- CN117687813A CN117687813A CN202410010418.4A CN202410010418A CN117687813A CN 117687813 A CN117687813 A CN 117687813A CN 202410010418 A CN202410010418 A CN 202410010418A CN 117687813 A CN117687813 A CN 117687813A
- Authority
- CN
- China
- Prior art keywords
- data
- loop
- data stream
- ure
- computation
- 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
- 238000013507 mapping Methods 0.000 title claims abstract description 34
- 238000004364 calculation method Methods 0.000 title claims abstract description 33
- 238000000034 method Methods 0.000 title claims abstract description 23
- 239000013598 vector Substances 0.000 claims abstract description 29
- 230000015654 memory Effects 0.000 claims description 25
- 238000012545 processing Methods 0.000 claims description 16
- 239000011159 matrix material Substances 0.000 claims description 11
- 230000005540 biological transmission Effects 0.000 claims description 10
- 238000011144 upstream manufacturing Methods 0.000 claims description 5
- 125000004122 cyclic group Chemical group 0.000 claims description 4
- 230000009977 dual effect Effects 0.000 claims description 4
- 230000009466 transformation Effects 0.000 claims description 3
- 230000006399 behavior Effects 0.000 claims description 2
- 230000001131 transforming effect Effects 0.000 claims 1
- 238000013461 design Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000002123 temporal effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种面向异构平台的张量计算数据流映射方法,属于计算机领域。本发明首先将计算数据流映射至硬件的计算单元,具体包括分析数据依赖的复用距离与活跃变量个数,以分配最少的寄存器;匹配计算模式并进行改写,在FPGA上生成流水线化的脉动阵列,而在GPU上将计算分配至向量计算单元。随后,将访存数据流映射至硬件的缓存层次结构,具体包括识别复用循环并将其移除。在FPGA上,生成独立的执行内核,内核之间通过先入先出队列(FIFO)进行通信,并生成有限状态自动机以管理双缓存。在GPU上,分配存储空间并生成相应的访存指令与数据搬移指令,以双缓存的方式掩盖访存延时。采用本发明可以大幅提升异构系统的编程效率。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种面向FPGA和GPU异构平台的张量计算数据流映射方法。
背景技术
张量计算是指定义在多维数组上且可以在嵌套循环内表示的计算操作,包括矩阵乘法、卷积等。张量计算被广泛用于机器学习、科学计算与生物信息学等领域,加速此类计算往往对应用整体性能有显著影响。
为了解决应用日益增长的计算需求,GPGPU(通用图形处理器)和FPGA(现场可编程门阵列)被广泛用于构建具有多种处理器单元的异构系统。此类处理器具有海量的整数与浮点计算单元,能够以高吞吐量、高能效加速张量计算。然而,对异构系统进行编程往往十分困难。GPGPU和FPGA采用了不同的架构设计与编程模型:GPGPU采用SIMT(单指令多线程)模型,程序员需要将计算分解并映射至不同的线程上。FPGA通常采用RTL(寄存器传输级)或HLS(高层次综合)语言定制硬件设计。对于张量计算,最常见的设计是脉动阵列架构:多个处理单元按照一定的互联规则组成一维或二维阵列,计算过程中数据在相邻单元之间传递,以实现高吞吐量流水线执行。这种差异使得程序员必须对不同平台分别设计映射方法,特别是对于FPGA实现一个脉动阵列需要足够的硬件开发经验与较长的开发周期。
2023年,北京大学梁云研究员团队提出了一种面向FPGA的敏捷开发框架(FCCM2023):通过URE(Uniform Recurrence Equations)描述张量计算模式,STT(Space-timeTransform)描述计算到硬件的映射,可以快速生成高性能的BLAS(基础线性代数子程序库)算子映射实现。然而,该框架仅适用于FPGA设备,极大制约了异构系统的广泛应用。
发明内容
本发明的目的是提供一种面向FPGA设备和GPU设备的统一计算数据流映射方法,以解决异构系统开发效率低、性能无法移植的技术问题。
本发明的原理是:对于输入的张量计算数据流表示,本方法首先将计算数据流映射至硬件的计算单元,具体包括分析数据依赖的复用距离与活跃变量个数,以分配最少的寄存器;匹配计算模式并进行改写,在FPGA上生成流水线化的脉动阵列,而在GPU上将计算分配至向量计算单元。随后,本方法将访存数据流映射至硬件的缓存层次结构,具体包括识别复用循环并将其移除。在FPGA上,生成独立的执行内核(Kernel),内核之间通过先入先出队列(FIFO)进行通信,并生成有限状态自动机以管理双缓存。在GPU上,分配存储空间并生成相应的访存指令与数据搬移指令,以双缓存的方式掩盖访存延时。
本发明提供的技术方案如下:
一种面向异构平台的张量计算数据流映射方法,包括如下步骤:
A.用户描述张量计算的数据流及其映射方式,执行如下步骤:
A1.使用URE(Uniform Recurrence Equations)描述数据依赖关系,即计算数据流;
A2.使用STT(Space-time Transform)描述计算数据流映射至硬件计算单元的方式;
A3.使用Stensor(Streaming tensor)描述数据在内存间的移动,即访存数据流。
B.将计算数据流映射至硬件计算单元,执行如下步骤:
B1.建立基于循环的中间表示形式,将所有URE合并置于循环体内;
B2.提取对于同一个URE的所有引用,将引用下标减去定义下标得到依赖向量;
B3.识别出依赖向量中的空间维度与时间维度(包括零维度与非零维度),将依赖向量的非零维度进行线性化操作得到一维复用距离;
B4.根据所有URE引用的依赖向量分配寄存器,并改写URE引用为寄存器引用;
B5.识别URE中的数据传播(Propagation),并进行改写以适配目标硬件;
B6.对循环进行变换。在FPGA上进行循环展开,而在GPU上标注线程块/线程循环,并对最内层空间循环向量化。
C.将访存数据流映射至硬件缓存层次结构,执行如下步骤:
C1.根据Stensor描述的层次结构迭代生成相应的基于循环的中间表示形式,将所有访存操作置于循环体内;
C2.建立内存层级间的数据通路。在FPGA上使用FIFO在层级间通信,在GPU上将访存中间表示合并到计算中间表示;
C3.识别并删除复用循环,复用循环为没有在访存下标出现的循环,并计算需要分配的缓存大小;
C4.生成数据传输单元。在FPGA上将缓存划分为Bank,并向量化数据传输通路;
在GPU上生成相应的访存和数据搬移指令;
C5.改写循环结构以控制双缓存的填充、加载与交换。
本发明的有益效果:利用本发明提供的技术方案,可以大幅提升异构系统的编程效率。用户只需要编写一份映射方法的规格说明就可以在各类设备上执行。
附图说明
图1本发明具体实施例中使用URE描述矩阵乘法计算数据流
图2本发明具体实施例中使用STT描述计算数据流映射方式
图3本发明具体实施例中使用Stensor描述矩阵乘法访存数据流
图4本发明具体实施例中识别矩阵乘法依赖向量中的空间和时间维度
图5本发明具体实施例中建立矩阵乘法访存的中间表示形式
具体实施方式
本发明的具体实施方式如下:
A.用户描述张量计算的数据流及其映射方式,执行如下步骤:
A1.使用URE描述循环迭代间的依赖关系。URE是具有常量依赖距离的递归函数,可表示为如下的形式:
其中V1,V2,...,Vp是变量,f是任意函数,是迭代空间中的一个点。上式表示在计算点/>时读取变量V1,V2,...,Vp在距离为/>时的值。在本发明的编程模型中,URE通常表示如下:
F(z1,z2,...)=select(c,value,F(z1-d1,z2-d2,…))+…
URE的左侧以从里向外的顺序列出了所有的循环变量。在URE的右侧,select是一个三目运算符,表示在边界条件满足时读取一个外部值。对URE的引用应当包含所有维度,其中每个维度可以加/减一个常量值。每个URE仅可定义一次,其值在定义后不可更新。
A2.使用STT将计算映射至硬件抽象层。STT是一种形式化的数学表示,用于描述计算映射至硬件单元并调度计算执行的方式。本发明提供两种方式来指定一个STT:第一种方式采用严格的数学定义,利用调度向量与分配矩阵P进行循环变换。点/>被映射至处理单元在时间步/>执行。这种方式可以对循环进行仿射变换。
第二种方式是不完整的STT。展开所有的空间循环,其中每个循环迭代映射至一个处理单元。处理单元的执行由数据依赖决定。这种方式虽然简单,但也得到了广泛的采用,并能生成高效的脉动阵列。
A3.使用Stensor描述数据在内存间的移动。Stensor是一个抽象的且可定制的张量存储空间,每个Stensor管理自身的张量缓存,接受上游Stensor的数据,并向下游Stensor或脉动阵列发送数据。
Stensor被定义在内存层次中,DRAM,SRAM,REG。每个Stensor只保存在循环执行中会访问的子张量,由.scope()原语指定。Stensor会自动在每个循环迭代时更新保存的数据。多个Stensor可通过符号>>连接。通常,输入数据会经过一个层级结构传送给脉动阵列,输出数据会经过另一个层次结构传送给内存。每个Stensor每次输出一个张量,其维度在.out()原语中给出。此外,Stensor的数据布局可由访问它时使用的下标决定。
B.将计算数据流映射至硬件计算单元,执行如下步骤:
B1.建立基于循环的中间表示形式。在这一步骤中,编译器根据URE中定义的变量生成对应的嵌套循环节点表示循环的生命周期,以及分配节点来表示每个URE使用的内存空间。计算语句位于循环体与分配节点内部。如果有多个URE需要进行合并,计算语句按照合并的顺序置于同一循环体内部。
B2.提取对于同一个URE的所有引用。为方便叙述,本发明假设编译器需要提取对URE vi的所有引用。编译器检查所有URE v1…vn的定义,并在定义右侧识别如的引用模式。如前所述,对URE的引用包含了其所有维度,因此本发明将引用下标减去定义下标即可得到依赖向量/>
B3.识别出依赖向量中的空间维度与时间维度。对于时间维度,编译器进一步将dt=0的维度t称为零维度,反之为非零维度。本发明对非零维度进行线性化操作,即对于假设各维度的大小分别为/>线性化后/> 代表了变量的复用距离。
B4.根据所有URE引用的依赖向量分配寄存器。编译器分配的寄存器数组包含三部分:第一部分对应于空间维度,即对所有处理单元分配寄存器。第二部分对应于零维度,编译器使用保守分配策略,合并所有的零维度以决定活跃变量的个数。第三部分对应于非零维度,其数目为线性化后复用距离的最大值。编译器进一步将所有对URE的引用替换为对寄存器的引用,下标为对应的依赖距离。
B5.识别URE中的数据传播(Propagation)。本发明称具有如下形式的URE为数据传播:
F(zs,zt,…)=select(zs==0,value,F(zs-ds,zt,…))
其中zs代表空间维度,zt代表时间维度,ds代表空间维度上的依赖距离。边界处理单元(zs==0)获取外部值,仅存在沿着空间维度的数据依赖且不会修改。若目标平台为FPGA,编译器在传播路径上添加fpga_reg原语,即在两个处理单元之间插入流水线寄存器。若目标平台为GPU,由于缺少硬件互联的处理单元,编译器将数据传播模式改写为数据广播(Broadcast)模式,即将值复制到所有向量单元内。
B6.对循环进行变换。在FPGA上编译器生成硬件脉动阵列,展开所有空间循环,循环的每一次迭代对应于一个处理单元。在GPU上编译器将计算映射至向量单元:指定线程块/线程以映射至GPU的并行核心;将最内层空间循环向量化,循环的每次迭代映射至向量单元的不同通道。展开其余空间循环以产生连续的SIMD指令流。
C.将访存数据流映射至硬件缓存层次结构,执行如下步骤:
C1.建立基于循环的中间表示形式。编译器根据Stensor描述的层次结构迭代生成相应的中间表示形式。从计算的中间表示开始,编译器建立相同的嵌套循环作为数据生产者/消费者的中间表示,循环体内仅包含访存操作,并将原访存操作替换为对该生产者/消费者的访问。以此类推,编译器继续为该中间表示建立其生产者/消费者,直到主机端Stensor。
C2.建立内存层级间的数据通路。在FPGA上编译器将各层级的循环中间表示作为独立的执行内核(kernel),内核之间通过先入先出队列(FIFO)进行通信。因此,访存与计算可完全异步执行。在GPU上,编译器将各层级的中间表示插入到计算中间表示的某一层级内,在执行计算前完成访存与数据搬移。
C3.识别并删除复用循环。本发明定义复用循环为没有在访存下标出现的循环:执行这些循环时将重复加载相同的数据,编译器可移除复用循环从而减少数据传输量。对于一个定义在SRAM的Stensor,若其上游和下游的循环结构不同(通常由于移除上游复用循环),本发明自动插入一个双缓存以复用数据,缓存的大小根据上游循环结构确定。
C4.生成数据传输单元。本发明在Stensor中指定了数据传输的粒度:在FPGA上,编译器沿着空间维度生成多个存储单元,同时向量化数据通路,每次从各存储单元读取一个向量,因此每次从整个缓存读取一个矩阵/子张量。在GPU上,编译器选择合适粒度的访存与数据搬移指令,并提前发射指令以掩盖访存延时。
C5.改写循环结构以控制双缓存的填充、加载与交换。编译器将原始中间表示改写为两重循环:外层循环将双缓存的执行划分为周期,在周期结束前交换读/写缓存;内层循环控制每一个周期的行为:从DRAM读取数据以填充写缓存,根据访存下标生成读缓存地址并加载相应的数据。在FPGA上读/写缓存显式并行执行,而在GPU上由硬件调度执行。
下面通过实例对本发明做进一步说明。
假定用户使用本方法实现矩阵乘法计算数据流的映射。该计算定义如下:
其中,A和B代表输入矩阵,其大小分别为M*P和P*N。C代表输出矩阵,大小为M*N。
A.用户描述张量计算的数据流及其映射方式:
A1.使用URE描述循环迭代间的依赖关系。对于本例本发明定义URE如下:
X(k,i,j)=select(j==0,A(i,k),X(k,i,j-1));
Y(k,i,j)=select(i==0,B(k,j),Y(k,i-1,j));
Z(k,i,j)=select(k==0,0,Z(k-1,i,j))+X(k,i,j)*Y(k,i,j);
Out(i,j)=select(k==K-1,Z(k,i,j));
X.merge_ures(Y,Z,Out);
X.tile({i,j},{ii,jj},{II,JJ});
X.tile({ii,jj,k},{iii,jjj,kkk},{III,JJJ,KKK});
如图1所示,本发明将循环i,j,k视为三维空间中的点(i,j,k)。aik可沿着维度j复用,即点(i,0,k)读取aik,点(i,1,k)读取(i,0,k)的值,以此类推;bkj可沿着维度i复用,即点(0,j,k)读取bkj,点(1,j,k)读取(0,j,k)的值,以此类推;cij可沿着维度k归约,即点(i,j,0)初始化cij为0,点(i,j,1)读取(i,j,0)的值并计算,以此类推。最后,merge_ures合并这些URE,并将原始循坏切块两次产生所需的循环结构。
A2.使用STT将计算映射至硬件抽象层。对于本例本发明定义STT如下:
X.space_time_transform(iii,jjj);
等价于定义调度向量sT=(1,1,1)和映射矩阵如图2所示,点/>被映射至PE(iii,jjj)。结合URE定义的数据依赖关系,本发明描述了一种脉动阵列数据流设计,其中输入数据沿着一行/一列PE传播,部分和在每个PE内部累加。
A3.使用Stensor描述数据在内存间的移动。对于本例本发明定义Stensor如下:
Stensor DA(DRAM),SA(SRAM),DB(DRAM),SB(SRAM);
Stensor RC(REG),DC(DRAM),C;
A>>DA.out(kkk)>>SA.scope(k).out(kkk,iii);
B>>DB.out(kkk)>>SB.scope(k).out(kkk,jjj);
Out>>RC.scope(iii).out(jjj)>>DC>>C(j,i);
如图3所示,本发明定义了位于DRAM的DA、DB和DC,位于SRAM的SA和SB,位于REG的RC及位于Host的C。SA,SB和RC在相应的循环层级内插入了缓存。本发明构建了三条数据通路:对于输入数据,向量化内层循环kkk作为数据传输单元;对于计算结果,向量化内层循环jjj作为数据传输单元。
B.将计算数据流映射至硬件计算单元:
B1.建立基于循环的中间表示形式。在本例中编译器建立中间表示如下:
for i,j,k
for ii,jj
for iii,jjj,kkk
X(kkk,jjj,iii,jj,ii,k,j,i)=select(jjj==0,A(…),X(kkk,jjj-1,iii,jj,ii,k,j,i));
Y(kkk,jjj,iii,jj,ii,k,j,i)=select(iii==0,B(…),Y(kkk,jjj,iii-1,jj,ii,k,j,i));
Z(kkk,jjj,iii,jj,ii,k,j,i)=select(kkk==0&&k==0,0,
select(kkk==0,Z(kkk+KKK-1,…,k-1,…),
Z(kkk-1,…,k,…)))+X(…)*Y(…);
Out(jjj,iii,jj,ii,j,i)=select(kkk==KKK-1&&k==K-1,Z(…));
编译器建立循环结点,将所有URE放置在同一组循环内部,并展开依赖关系以表达完整迭代空间内的数据流。
B2.提取对于同一个URE的所有引用。本例中包含两个对Z的引用,如图4所示,本发明通过将引用下标减去定义下标得到相应的依赖向量。
B3.识别出依赖向量中的空间维度与时间维度。如图4所示,本例空间维度为jjj和iii,零维度为jj和ii,非零维度为kk和k。将非零维度线性化后得到依赖距离d=1。
B4.根据所有URE引用的依赖向量分配寄存器。本例中编译器分配Z[JJJ][III][JJ*II][1],其中[JJJ][III]对应于空间维度,[JJ*II]对应于非零维度(活跃变量个数),[1]对应于零维度最大依赖距离。本发明将两个URE引用均替换为Z[jjj][iii][0][0]。本发明插入了寄存器轮换操作,因此索引0始终指向当前计算步的活跃变量。
B5.识别URE中的数据传播。在本例中,X和Y分别表达了A和B的数据传播模式。
在FPGA上本发明将其改写如下:
X(kkk,jjj,iii,jj,ii,k,j,i)=select(jjj==0,A(…),fpga_reg(X(kkk,jjj-1,iii,jj,ii,k,j,i)));
Y(kkk,jjj,iii,jj,ii,k,j,i)=select(iii==0,B(…),fpga_reg(Y(kkk,jjj,iii-1,jj,ii,k,j,i)));
本发明将URE引用包含在fpga_reg调用内,指导底层EDA工具插入流水线寄存器,从而减轻布局布线压力,取得更高的频率与可扩展性。
在GPU上本发明将其改写如下:
X(kkk,jjj,iii,jj,ii,k,j,i)=A(kkk+KKK*k,iii+III*ii+III*II*i);
Y(kkk,jjj,iii,jj,ii,k,j,i)=B(jjj+JJJ*jj+JJJ*JJ*j,kkk+KKK*k);
对于X,由于A的下标不包含jjj,因此相同的数据被复制到jjj个向量单元通道内。对于Y,由于B的下标包含jjj,每个向量单元通道处理不同的数据。
B6.对循环进行变换。在FPGA上,编译器展开空间循环iii和jjj以产生硬件处理单元。在GPU上,编译器向量化内层循环jjj,同时展开外层循环iii。此外,编译器将循环i,j映射至线程块,将循环ii和jj映射至线程块内的每个硬件线程。
C.将访存数据流映射至硬件缓存层次结构:
C1.建立基于循环的中间表示形式。如图5所示,编译器复制计算中间表示的循环结构并分离访存操作至DA和DB的中间表示。
C2.建立内存层级间的数据通路。在FPGA上,编译器生成独立的执行内核,彼此之间通过FIFO通信。如图5所示,DA将数据写入其FIFO,SA读取DA的FIFO并将数据写入其自身的FIFO,最后,脉动阵列读取SA的FIFO,并以相同的方式从DB和SB获取数据。在GPU上,编译器将访存操作插入到计算的中间表示内。
C3.识别并删除复用循环。如图5所示,A的访存下标不包含循环j,jj和jjj。在SA的循环k内插入了缓存,因此无需重复写入循环jj和jjj对应的数据,可将其从DA中移除。以此类推,循环ii和iii可从DB中移除。SA的缓存大小由DA决定,即KKK*III*II。SB的缓存大小由DB决定,即KKK*JJJ*JJ。
C4.生成数据传输单元。在本例中,本发明指定DA和DB每次输出一个向量,其大小为KKK。SA和SB每次输出一个矩阵,两者大小分别为[III,KKK]和[JJJ,KKK]。若目标平台为FPGA,编译器沿着空间维度III和JJJ将SA和SB划分为多个Bank,每次读/写一个大小为KKK的向量。若目标平台为GPU,编译器生成相应粒度的访存指令。
C5.改写循环结构以控制双缓存的填充、加载与交换。在本例中,编译器将SA和SB的执行划分为K*I*J个周期,作为外层循环。每个周期内,SA需要被读取JJJ*JJ*II次,写入III*II次;SB需要被读取III*II*JJ次,写入JJJ*JJ次。编译器取两者较大值作为一个周期的长度,并生成相应的内层循环。在第一个周期仅写入数据到写缓存,并且在最后一个周期仅从读缓存读取数据。
最后需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (9)
1.一种面向异构平台的张量计算数据流映射方法,包括如下步骤:
A.用户描述张量计算的数据流及其映射方式,执行如下步骤:
A1.使用URE描述数据依赖关系,即计算数据流;
A2.使用STT描述计算数据流映射至硬件计算单元的方式;
A3.使用Stensor描述数据在内存间的移动,即访存数据流;
B.将计算数据流映射至硬件计算单元,执行如下步骤:
B1.建立基于循环的中间表示形式,将所有URE合并置于循环体内;
B2.提取对于同一个URE的所有引用,将引用下标减去定义下标得到依赖向量;
B3.识别出依赖向量中的空间维度与时间维度,将依赖向量的非零维度进行线性化操作得到一维复用距离;
B4.根据所有URE引用的依赖向量分配寄存器,并改写URE引用为寄存器引用;
B5.识别URE中的数据传播,并进行改写以适配目标硬件;
B6.对循环进行变换,在FPGA上进行循环展开,而在GPU上标注线程块/线程循环,并对最内层空间循环向量化;
C.将访存数据流映射至硬件缓存层次结构,执行如下步骤:
C1.根据Stensor描述的层次结构迭代生成相应的基于循环的中间表示形式,将所有访存操作置于循环体内;
C2.建立内存层级间的数据通路,在FPGA上使用FIFO在层级间通信,在GPU上将访存中间表示合并到计算中间表示;
C3.识别并删除复用循环,复用循环为没有在访存下标出现的循环,并计算需要分配的缓存大小;
C4.生成数据传输单元,在FPGA上将缓存划分为Bank,并向量化数据传输通路;在GPU上生成相应的访存和数据搬移指令;
C5.改写循环结构以控制双缓存的填充、加载与交换。
2.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,A1中所述URE表示如下:
F(z1,z2,...)=select(c,value,F(z1-d1,z2-d2,...))+…
F(z1,z2,...)是指以从里向外的顺序列出所有的循环变量,select是一个三目运算符,表示在边界条件满足时读取一个外部值,对URE的引用包含所有维度,其中每个维度加/减一个常量值。
3.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,A2中所述STT的使用方式是指展开所有的空间循环,其中每个循环迭代映射至一个处理单元,处理单元的执行由数据依赖决定。
4.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,A2中所述STT的使用方式是利用调度向量与分配矩阵P进行循环变换,点/>被映射至处理单元/>在时间步/>执行。
5.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,A3具体为,每个Stensor管理自身的张量缓存,接受上游Stensor的数据,并向下游Stensor或脉动阵列发送数据,所述Stensor被定义在内存层次中DRAM,SRAM,REG,每个Stensor只保存在循环执行中会访问的子张量,Stensor会自动在每个循环迭代时更新保存的数据,每个Stensor每次输出一个张量。
6.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,所述B1具体为,根据URE中定义的变量生成对应的嵌套循环节点表示循环的生命周期,以及分配节点来表示每个URE使用的内存空间,计算语句位于循环体与分配节点内部,如果有多个URE需要进行合并,计算语句按照合并的顺序置于同一循环体内部。
7.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,所述B4中寄存器数组包含三部分:第一部分对应于空间维度,即对所有处理单元分配寄存器,第二部分对应于零维度,合并所有的零维度以决定活跃变量的个数,第三部分对应于非零维度,其数目为线性化后复用距离的最大值。
8.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,所述B5中URE的数据传播:
F(zs,zt,...)=select(zs==0,value,F(zs-ds,zt,...))
其中zs代表空间维度,边界处理单元(zs==0)获取外部值,若目标平台为FPGA,在传播路径上添加fpga_reg原语,即在两个处理单元之间插入流水线寄存器,若目标平台为GPU,将数据传播模式改写为数据广播模式,即将值复制到所有向量单元内。
9.如权利要求1所述的面向异构平台的张量计算数据流映射方法,其特征在于,所述C5具体为,将原始中间表示改写为两重循环:外层循环将双缓存的执行划分为周期,在周期结束前交换读/写缓存;内层循环控制每一个周期的行为:从DRAM读取数据以填充写缓存,根据访存下标生成读缓存地址并加载相应的数据,在FPGA上读/写缓存显式并行执行,而在GPU上由硬件调度执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410010418.4A CN117687813A (zh) | 2024-01-04 | 2024-01-04 | 一种面向异构平台的张量计算数据流映射方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410010418.4A CN117687813A (zh) | 2024-01-04 | 2024-01-04 | 一种面向异构平台的张量计算数据流映射方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117687813A true CN117687813A (zh) | 2024-03-12 |
Family
ID=90126566
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410010418.4A Pending CN117687813A (zh) | 2024-01-04 | 2024-01-04 | 一种面向异构平台的张量计算数据流映射方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117687813A (zh) |
-
2024
- 2024-01-04 CN CN202410010418.4A patent/CN117687813A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ament et al. | A parallel preconditioned conjugate gradient solver for the Poisson problem on a multi-GPU platform | |
US11714780B2 (en) | Compiler flow logic for reconfigurable architectures | |
US11500621B2 (en) | Methods and apparatus for data transfer optimization | |
US8930926B2 (en) | System, methods and apparatus for program optimization for multi-threaded processor architectures | |
US8661422B2 (en) | Methods and apparatus for local memory compaction | |
Yadav et al. | DISTAL: the distributed tensor algebra compiler | |
Hurkat et al. | VIP: A versatile inference processor | |
CN115576561A (zh) | 一种基于申威处理器的深度神经网络模型编译优化方法 | |
CN115668125A (zh) | 存储器处理单元架构映射技术 | |
Hsu et al. | Stardust: Compiling sparse tensor algebra to a reconfigurable dataflow architecture | |
Miller | Two approaches to architecture-independent parallel computation | |
Kronawitter et al. | Automatic data layout transformations in the ExaStencils code generator | |
CN117687813A (zh) | 一种面向异构平台的张量计算数据流映射方法 | |
Chellappa et al. | Computer generation of fast Fourier transforms for the cell broadband engine | |
Lou et al. | OpenACC directive-based GPU acceleration of an implicit reconstructed discontinuous Galerkin method for compressible flows on 3D unstructured grids | |
KR102363317B1 (ko) | 회로들을 자동으로 합성하는 방법, 디바이스 및 이와 관련된 컴퓨터 프로그램 | |
Khan et al. | Design and implementation of parallel SOM model on GPGPU | |
Liu et al. | Compiling halide programs to push-memory accelerators | |
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 | |
Luo et al. | Gpu port of a parallel incompressible navier-stokes solver based on openacc and mvapich2 | |
US20230385077A1 (en) | Forward-style Gradient GeMMs | |
Shioya et al. | Block red–black MILU (0) preconditioner with relaxation on GPU | |
US12026485B2 (en) | Method for generating source code | |
Chung | Optimization of compiler-generated OpenCL CNN kernels and runtime for FPGAs | |
Chattopadhyay et al. | A timing driven cycle-accurate simulation for coarse-grained reconfigurable architectures |
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 |