一种面向类仿射数组下标应用的参数化并行存储结构模版的制作方法_2

文档序号:8942896阅读:来源:国知局
synthesis system. High Level Synthesis: From Algorithm to Digital Circuit, Springer Netherlands, 2008:99-112
[0020] (10)Cong,J,Bin Liu,Neuendorffer S ea al. High-Level Synthesis for FPGAsiFrom Prototyping to Deployment. Computer-Aided Design of Integrated Circuits and Systems, 201130(4):473-491
[0021] (11)徐进辉,杨梦梦,窦勇,周兴铭.粗粒度可重构平台中循环自流水硬件实 现.计算机学报,2009, 32 (6) : 1080-1088

【发明内容】

[0022] 本发明的目的是提供一种基于LLVM设计的ASCRA可重构编译器,可以为只有层内 数据重用的仿射类数组下标应用编译生成高效的模块化多层次存储结构的面向类仿射数 组下标应用的参数化并行存储结构模版。
[0023] 本发明的目的是这样实现的:
[0024] 面向类仿射数组下标应用的参数化并行存储结构模版,采用模块化设计思想的参 数化并行存储结构模版在处理参与循环程序运算的数组下标为类仿射型时,为新数据自动 生成基于RAM的多体交叉并行访存结构或单体串行访存结构,为输入依赖的复用数据生 成Smart Buffer缓存结构,为循环迭代间的流依赖的复用数据自动生成RAW Buffer缓存 结构,其中Smart Buffer直接服务于运算单元,RAW Buffer和RAM为运算单元和Smart Buffer服务;所述访存数据依赖图MDDG = (V,E,R),其中V为节点集合,E为连接相邻节 点的有向边,R为数据重用度,X= {L,S},即循环迭代空间内数组元素 进行了 Load 或 Store 操作,
[0025]
[0026]
[0027] 次循环迭代就 会同节点抑发生对同一存储地址的读写;访存数据依赖图的生成包括:
[0028] (1)遍历程序中进行Load和Store操作的所有数组元素,根据数组名,分别将其划 分到不同的集合&中,X = 1…n,表示有程序中存在不同名的数组个数,根据操作属性将数 组元素 A
[ai+b] 表示为LA [ai+b] SA [ai+b] ' 将其插入到集合Gx中;
[0029] (2)遍历集合&中的元素,获得数组元素下标斜率A = {a I a为数组元素下标斜 率},当所有进行Store操作的数组元素 SA[ai+b]具有相同的下标斜率,或不存在进行Store 操作的数组元素,则将集合&中数组元素按不同下标斜率划分到不同集合Sxa中,a = 1··· N,表示不同的数组下标斜率,如果存在η个不同的数组下标斜率,则需要备份η份访存数 据,之后执行步骤(3);当数组元素 SA[al+b]存在不同的下标斜率a时,将集合6:(中数组元素 按不同下标斜率划分到不同集合S xan中,m = a,执行步骤(4);
[0030] (3)依次遍历不同集合Sxa中的数组元素,R表示数组下标截距模数据步长k同 余的数组元素之间的关系,数据步长表示每次循环迭代时数组元素增加的地址间隔,k = a*Stepi,Stepi表示循环步长.R为集合Sa上的等价关系,对任何数组元素 XA [ai+b]e Sxk,集 合[XA[ai+b]]R = {x|x e Sxa,ARx},[XA[ai+b]]R 简化表示为 Sxam,m = 1···1?-1,表示模数据步长 k 的余数,
[0031] (4)将每个集合Sxall^ S xQni中的数组元素 XA [al+b]按类仿射数组下标的截距从小 到大进行排序,当循环迭代空间存在写后读相关,删除进行Load操作的数组元素;当进行 Load操作的数组元素与进行Store操作的数组元素具有相同数组下标时,将进行Store操 作的数组元素排在进行Load操作的数组元素前面,如果这两个数组元素之间存在迭代内 写后读相关,则从集合中删除进行Load操作的数组元素;
[0032] (5)遍历集合Sxam或Sxftll中的数组元素,每当遍历到进行Store操作的数组元素时, 都将其及之前的所有数组元素构成一个新的集合S x_或S xftm,n = I. . . N,表示第η个新集 合,按此规则继续遍历剩余的数组元素,直到遍历完集合中的所有数组元素,如果不存在进 行Store操作的数组元素,则剩余的数组元素构成一个新的集合;
[0033] (6)计算集合Sx_或S xam中每两个相邻数组元素之间的数据重用度 R〈XA[al+b], XA[al+(:]>,如果集合Sx_中只有一个数组元素,则不计算数据重用度:
[0034]
[0035] 不能整除时,R〈XA[ai+b], XA[ai+c]> = 0· Δ d〈XA[ai+b], XA[ai+c]> 表示一次循环迭代内数 组元素之间的距离:|c_b| ;
[0036] (7)依次遍历数据重用度R,如果存在R〈XA[al+b],XA[al+d> = 0,则继续划分集合,将 XA[ai+b]及之前的所有数组元素构成一个新的集合Sxamnv或Sxftmv,V = I. . .N,表示第V个新集 合,按此规则继续遍历剩余的数组元素,直到遍历完集合中的所有数组元素,如果不存在数 据重用度R = 0的情况,则集合Sx_或S xftm中剩下的数组元素构成一个新的集合S x_j O · 〇x0mnv,
[0037] (8)生成访存数据依赖图MDDGxaninv集合:每个集合S x_^ S xQ_中的数组元素 为访存数据依赖图MDDGxaninv或MDDGxamv中一个节点,其中第一个节点为根节点,从根节 点开始依次指向其后序节点,最后一个节点为叶子节点,每条边上的权值为数据重用度 R〈XA[al+b],XA[al+d>,生成的访存数据依赖图的个数等于集合S xamnvS S xamv的个数。
[0038] 计算生成参数化并行存储结构时所需的参数值包括:
[0039] 多体交叉存取度:Ram_num ;
[0040] 存储体深度:Ram_depth ;
[0041 ]存储体位宽:Ram_width ;
[0042] RAW Bufffer 个数:RBuff er_num ;
[0043] RAW Bufffer 深度:RBuff er_depth ;
[0044] Smart Buffer 个数:SBuffer_num ;
[0045] Smart Buffer 深度:Register_num〇
[0046] 本发明的有益效果在于:
[0047] 此模板结构不仅充分挖掘了输入数据重用和循环迭代间数据重用,还为了提高硬 件执行频率,采用了寄存器平移策略,简化了硬件设计,保证Smart buffer缓存结构与计算 单元的连接固定不变。在编译生成硬件存储结构时,不仅可以根据应用程序计算量匹配存 储容量,更可以根据程序特征,灵活生成由多体交叉并行存储结构、单体串行访存结构、RAW Buffer缓存结构及Smart Buffer缓存结构组成的存储体系。循环携带流相关数据重用支 持能力,除了文献[11]之外,均不支持此类数据重用。忽略了不可数据重用访存节点的并 行访问。
【附图说明】
[0048] 图1是类仿射型数组下标应用示例代码;
[0049] 图2是图1中示例代码的数据访问轨迹图;
[0050] 图3是参数化并行存储结构模板;
[0051] 图4是访存数据依赖图集合;
[0052] 图5是根据图1中示例代码生成的并行存储结构图。
【具体实施方式】
[0053] 下面结合附图举例对本发明做更详细的描述:
[0054] 本发明针对只有层内数据重用的仿射类数组下标应用程序,提出一种参数化并行 存储模板,结构如图3所示。主要包括多体交叉并行存储结构、Smart Buffer、RAW Buffer、 地址产生单元和存储控制器,在多体交叉并行存储结构中,地址流解析单元生成访问多个 并行RAM存储体模块使用的内部访问地址流,通过外部的地址产生单元给多体交叉并行存 储结构提供数据索引地址流;在类仿射数组下标应用流水执行时,通过存储卡控制器控制 RAW Buffer的读写、地址产生单元控制多体交叉并行存储结构中的数据访问,然后两者将 数据流以流水方式传递给Smart Buffer,为程序中的运算单元流水执行提供流水的数据支 撑,从而提升整个应用的流水性能。
[0055] 在自动生成硬件存储结构时,采用模块化设计思想,先将参与循环迭代空间运算 的数组元素按数组名划分为不同的对象,再采用访存数据依赖图表示同名数组的数据访存 特征;接下来,根据访存数据依赖图计算生成各个子模块的参数值,自动生成各个独立的存 储模块,包括多体交叉并行存储结构、单体串行存储结构(并行度为1的多体交叉并行存储 结构)、RAW Buffer缓存结构及Smart Buffer缓存结构;最后生成各个子模块的连线模块, 构成多层次存储体系。本发明主要论述自动生成硬件存储结构过程中的访存数据依赖图生 成算法和各子模块参数值计算方法。
[0056] 本发明的一种面向类仿射数组下标应用的参数化并行存储结构模板的工作原理 如下:
[0057] 当参与循环程序运算的数组下标为类仿射型时,每次循环迭代需要访存的数组数 据分为新数据和复用数据两类。在编译程序时,根据数组数据依赖关系,为新数据自动生成 基于RAM的多体交叉并行访存结构或单体串行访存结构,为流水线提供并行的输入数据读 取(Load)与输出数据写回(Store)操作。同时,由于FPGA器件具有较多的寄存器资源,可 以尽量复用运算数据,为复用数据生成RAW Buffer、Smart Buffer结构,专用于存储需要复 用的数据,从而消除对RAM的访问冲突,保证流水线的效率。根据需要访存的复用数据依赖 类型编译器会自动生成不同的缓存结构:为输入依赖的复用数据生成Smart Buffer缓存 结构,为循环迭代间的流依赖(写后读相关)的复用数据自动生成RAW Buffer缓存结构。 其中Smart Buffer直接服务于运算单元,RAW Buffer和RAM为运算单元和Smart Buffer 服务。在编译时,根据应用程序访存特征,组合各子存储结构,生成多层次存储结构。需要 为参与循环运算的不同的数组确定的参数有:多体交叉并行访存结构的分体数Ram_num ; 存储体深度Ram_depth,存储体位宽Ram_width ;Smart Buffer缓存结构的个数SBuffer_ num,Smart Buffer 的深度 Register_num;RAW Buffer 缓存结构的个数 RBuffer_num,RAW Bufffer深度RBufTe
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1