一种面向类仿射数组下标应用的参数化并行存储结构模版制造技术

技术编号:12514463 阅读:58 留言:0更新日期:2015-12-16 12:21
本发明专利技术涉及的是在可重构编译领域,基于LLVM的CPU-FPGA异构体系结构面向C2VHDL的可重构编译器ASCRA中一种面向类仿射数组下标应用的参数化并行存储结构模版。面向类仿射数组下标应用的参数化并行存储结构模版,采用模块化设计思想的参数化并行存储结构模版在处理参与循环程序运算的数组下标为类仿射型时,为新数据自动生成基于RAM的多体交叉并行访存结构或单体串行访存结构。此模板结构不仅充分挖掘了输入数据重用和循环迭代间数据重用,还为了提高硬件执行频率,采用了寄存器平移策略,简化了硬件设计,保证Smart buffer缓存结构与计算单元的连接固定不变。

【技术实现步骤摘要】

本专利技术涉及的是在可重构编译领域,基于LLVM的CPU-FPGA异构体系结构面向 C2VHDL的可重构编译器ASCRA中一种面向类仿射数组下标应用的参数化并行存储结构模 版。
技术介绍
目前,国内外针对CPU-FPGA计算平台的自动化编译工具的研究已经取得了一些 可喜的研究成果,主要分为两类:一类是采用类C语言作为程序设计语言,但这些类C语言 已将ANSI C扩充得面目全非,程序开发人员相当于重新学习一种新的语言,增加了设计难 度;另外一类是由C语言作为程序设计语言,由编译器将C语言中待加速的代码编译成为 VHDL语言,再由ISE等综合工具生成硬件电路。本专利技术主要研究应用于后一类面向C2VHDL 编译器的相关技术。 目前一些国内外大学、科研机构及工业界对这类编译器已经进行了初步的研究, 但是在为循环流水阵列生成硬件存储结构时这些编译器对数据重用及并行支持的不够完 善,影响了计算性能的提高。文献提出了一种可重构编译器,利用猜测和前瞻执行方 式开发指令级并行,主要针对无循环携带相关的计数类循环进行加速,采用迭代模调度 IMS(Iterative Modulo Scheduling)方式实现循环流水,根据迭代模调度算法确定启动 间距后,相隔一定的启动间距IlQnitiation interval)插入段间寄存器,根据数据流图 DFG (Data Flow Graph)生成相应的数据通路,流水化执行循环;文献在文献的基 础上,主要研究编译优化技术挖掘循环并行性,如循环展开、循环流水等传统的软件编译优 化技术实现循环的加速;文献针对计数类循环,利用迭代模调度消除存储调度冲突,实 现最内层能循环的软件流水,当流水失败时增大启动间距避免数据冲突,该方法不利于吞 吐率的提高,文献中提出的编译器只生成了为循环流水阵列提供数据的单体串行 存储结构,没有提出并行的存储结构概念。文献使用ARM处理器作为目标嵌入式平台, 针对单存储端口且无循环携带相关的循环,采用软件流水技术以固定的启动间距II,执行 流水,流水时,首先调度访存指令,然后调度非访存指令,并没有并行存储系统的设计。文 献设计的编译器针对类仿射数组下标应用中的面向滑动窗口类特殊应用提出了有针 对性的存储结构模板,其存储结构由片外存储器MEM、片存储器Block RAM和Smart Buffer 构成,数据首先从片外存储器MEM流入Block RAM,然后调入支持数据重用的输入Smart Buffer,为流水通路供应输入数据,运算完成后,结果存入输出Smart Buffer并经Block RAM传回片外存储器,Smart Buffer根据总线大小、滑动窗口大小、数据大小和滑动距离 自动生成,但是此模板无法用于具有循环迭代间流依赖的应用,同时由于其生成的Smart Buffer结构采用寄存器和计算单元完全互连的方法,导致仲裁机制较为复杂。文献针 对文献中存在的问题提出了优化后的参数化三层存储体系结构模板,但是此模板为只 有层内数据重用特征的循环展开程序生成存储结构时,其并行性还存在可以改进的空间, 此模板仅针对滑动窗口类型的应用,无法为具有循环迭代间流依赖的应用生成存储结构。 文献提出的编译器主要采用多Cache结构提供并行访问数据,当循环展开时,编译 器为每个循环迭代复制一份Cache数据,在提升程序性能的同时明显的增加了硬件面积开 销,尤其当程序中存在循环迭代间流依赖时,生成的硬件存储结构会出现Cache -致性的 问题。文献提出的编译器主要研究如何为类仿射数组下标应用自动生成并行存储 体及防止数据并行访问冲突的调度方法。文献提出了一种粗粒度可重构协处理器体 系结构,用于加速计算密集或数据密集类算法,其在ALU运算部件前后加入输入输出FIFO, 利用数据选择指令和非平衡广播指令配合FIFO实现数据重用,通过拷贝多分RAM消除结构 相关,实现数据的并行读取,该结构虽然可以实现数据重用及数据的并行传输,但是耗费了 大量宝贵的片上存储资源。 存储系统的设计直接影响运算系统潜在并行性的发挥,制约着循环流水的整体性 能,在文献等编译器中均无优化的存储结构设计,调度访存指令时,需耗费大量 的时钟周期读取所需的数据,为避免访存冲突,只能增大启动间距II,导致循环流水吞吐率 的大大降低,访存指令的调度成为制约循环流水性能提升的瓶颈。存储系统研究的关键问 题是提高存储带宽,减少存储器的访存次数和冲突,数据重用是目前广泛采用的方法。目前 可重构编译系统中,存储结构的设计存在一定的缺陷: (1)仅具有能为某类特定应用程序设计存储结构,其存储结构的可配置及灵活性 较差,文献提出的存储体系结构模型,仅面向滑动窗口类型的应用,开发输入相关数 据重用,存储容量可配置,存储结构固定不变。 (2)循环携带流相关数据重用支持能力弱,除了文献之外,均不支持此类数 据重用。 (3)忽略了不可数据重用访存节点的并行访问。目前普遍基于数据重用方式开发 存储结构,对数据重用之外的存储结构研究甚少。文献通过拷贝多份RAM实现不可重 用节点数据的并行读取,但是片上存储资源有限,拷贝多份RAM的方式对存储资源需求大 量增加,有可能超出片上存储资源数目。 类仿射数组下标的应用是指参与循环运算的数组元素下标为类仿射型应用,在 实际应用中很多程序都是类仿射型。如图1的示例代码为一个典型的类仿射型数组下标 应用,循环边界和数组下标是循环变量或常数的仿射函数。如果数组每维的下标都具有 ain+c(inl,…,Li1)的形式,其中a为整数,η为循环嵌套层数,Li 2,…,in为循环索引 变量,c (in i,…,i2, D为由L i2,…,in派构成的函数(若η = 1,c (i η η…,i2, h)为常 数),称该数组的下标为类仿射型。在图1中的示例代码中,只有数组A参与循环运算,当循 环关键变量i步进时,数据访问轨迹如图2所示,存在箭头所指的循环迭代间数据重用。在 充分挖掘数据重用后,执行每次迭代空间时只需从RAM中读取阴影方框表示的数据,其他 输入数据可以重用上次循环迭代时读取或生成的数据,进而提高流水线的执行效率,加速 应用。如何为仿射类型数组下标应用生成数据重用和并行性高的存储结构是可重构编译技 术的关键任务。 对于类仿射型数组下标应用,上述文献中所列举的可重构编译器在自动生成具有 并行性和数据可重用性的存储结构时,都存在各自的局限性。本专利技术主要采用模板方法为 只有层内数据重用的仿射类数组下标应用编译生成高效的模块化多层次存储结构,编译时 采用模块化设计思想,根据应用程序访存特征自动组合各子存储模块,生成多层次并行存 储结构体。 相关对比文件包括: (I)Callahan T.Kernel Formation in Garpcc.Proceedings of the Ilth Annual IEEE Symposium on Field-Programmable Custom Computing Machines. Napa,CA, USA,2003. 04:308-309 (2)Li Yanbin,Callahan T,Darnell Ej et al. Hardware-Softw本文档来自技高网...

【技术保护点】
一种面向类仿射数组下标应用的参数化并行存储结构模版,其特征在于:采用模块化设计思想的参数化并行存储结构模版在处理参与循环程序运算的数组下标为类仿射型时,为新数据自动生成基于RAM的多体交叉并行访存结构或单体串行访存结构,为输入依赖的复用数据生成Smart Buffer缓存结构,为循环迭代间的流依赖的复用数据自动生成RAW Buffer缓存结构,其中Smart Buffer直接服务于运算单元,RAW Buffer和RAM为运算单元和Smart Buffer服务;所述访存数据依赖图MDDG=(V,E,R),其中V为节点集合,E为连接相邻节点的有向边,R为数据重用度,即循环迭代空间内数组元素进行了Load或Store操作,每个存在一个数据重用度:表示节点每隔次循环迭代就会同节点发生对同一存储地址的读写;访存数据依赖图的生成包括:(1)遍历程序中进行Load和Store操作的所有数组元素,根据数组名,分别将其划分到不同的集合Gx中,x=1…n,表示有程序中存在不同名的数组个数,根据操作属性将数组元素A[ai+b]表示为LA[ai+b]或SA[ai+b],将其插入到集合Gx中;(2)遍历集合Gx中的元素,获得数组元素下标斜率A={a|a为数组元素下标斜率},当所有进行Store操作的数组元素SA[ai+b]具有相同的下标斜率,或不存在进行Store操作的数组元素,则将集合Gx中数组元素按不同下标斜率划分到不同集合Sxa中,a=1…N,表示不同的数组下标斜率,如果存在n个不同的数组下标斜率,则需要备份n份访存数据,之后执行步骤(3);当数组元素SA[ai+b]存在不同的下标斜率a时,将集合Gx中数组元素按不同下标斜率划分到不同集合Sx0m中,m=a,执行步骤(4);(3)依次遍历不同集合Sxa中的数组元素,R表示数组下标截距模数据步长k同余的数组元素之间的关系,数据步长表示每次循环迭代时数组元素增加的地址间隔,k=a*Stepi,Stepi表示循环步长.R为集合Sa上的等价关系,对任何数组元素XA[ai+b]∈Sxk,集合[XA[ai+b]]R={x|x∈Sxa,ARx},[XA[ai+b]]R简化表示为Sxam,m=1…k‑1,表示模数据步长k的余数,(4)将每个集合Sxam或Sx0m中的数组元素XA[ai+b]按类仿射数组下标的截距从小到大进行排序,当循环迭代空间存在写后读相关,删除进行Load操作的数组元素;当进行Load操作的数组元素与进行Store操作的数组元素具有相同数组下标时,将进行Store操作的数组元素排在进行Load操作的数组元素前面,如果这两个数组元素之间存在迭代内写后读相关,则从集合中删除进行Load操作的数组元素;(5)遍历集合Sxam或Sx0m中的数组元素,每当遍历到进行Store操作的数组元素时,都将其及之前的所有数组元素构成一个新的集合Sxamn或Sx0mn,n=1...N,表示第n个新集合,按此规则继续遍历剩余的数组元素,直到遍历完集合中的所有数组元素,如果不存在进行Store操作的数组元素,则剩余的数组元素构成一个新的集合;(6)计算集合Sxamn或Sx0mn中每两个相邻数组元素之间的数据重用度R<XA[ai+b],XA[ai+c]>,如果集合Sxamn中只有一个数组元素,则不计算数据重用度:R<XA[ai+b],XA[ai+c]>=Δd<XA[ai+b],XA[ai+c]>/k不能整除时,R<XA[ai+b],XA[ai+c]>=0.Δd<XA[ai+b],XA[ai+c]>表示一次循环迭代内数组元素之间的距离:|c‑b|;(7)依次遍历数据重用度R,如果存在R<XA[ai+b],XA[ai+c]>=0,则继续划分集合,将XA[ai+b]及之前的所有数组元素构成一个新的集合Sxamnv或Sx0mnv,v=1...N,表示第v个新集合,按此规则继续遍历剩余的数组元素,直到遍历完集合中的所有数组元素,如果不存在数据重用度R=0的情况,则集合Sxamn或Sx0mn中剩下的数组元素构成一个新的集合Sxamnv或Sx0mnv;(8)生成访存数据依赖图MDDGxamnv集合:每个集合Sxamnv或Sx0mnv中的数组元素为访存数据依赖图MDDGxamnv或MDDGx0mnv中一个节点,其中第一个节点为根节点,从根节点开始依次指向其后序节点,最后一个节点为叶子节点,每条边上的权值为数据重用度R<XA[ai+b],XA[ai+c]>,生成的访存数据依赖图的个数等于集合Sxamnv或Sx0mnv的个数。...

【技术特征摘要】

【专利技术属性】
技术研发人员:吴艳霞郭振华张国印谢东良
申请(专利权)人:哈尔滨工程大学
类型:发明
国别省市:黑龙江;23

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1