CN105159737A - 一种面向类仿射数组下标应用的参数化并行存储结构模版 - Google Patents

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

Info

Publication number
CN105159737A
CN105159737A CN201510447925.5A CN201510447925A CN105159737A CN 105159737 A CN105159737 A CN 105159737A CN 201510447925 A CN201510447925 A CN 201510447925A CN 105159737 A CN105159737 A CN 105159737A
Authority
CN
China
Prior art keywords
array
array element
data
subscript
memory access
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.)
Granted
Application number
CN201510447925.5A
Other languages
English (en)
Other versions
CN105159737B (zh
Inventor
吴艳霞
郭振华
张国印
谢东良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harbin Engineering University
Original Assignee
Harbin Engineering University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Harbin Engineering University filed Critical Harbin Engineering University
Priority to CN201510447925.5A priority Critical patent/CN105159737B/zh
Priority claimed from CN201510447925.5A external-priority patent/CN105159737B/zh
Publication of CN105159737A publication Critical patent/CN105159737A/zh
Application granted granted Critical
Publication of CN105159737B publication Critical patent/CN105159737B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

一种面向类仿射数组下标应用的参数化并行存储结构模版
技术领域
本发明涉及的是在可重构编译领域,基于LLVM的CPU-FPGA异构体系结构面向C2VHDL的可重构编译器ASCRA中一种面向类仿射数组下标应用的参数化并行存储结构模版。
背景技术
目前,国内外针对CPU-FPGA计算平台的自动化编译工具的研究已经取得了一些可喜的研究成果,主要分为两类:一类是采用类C语言作为程序设计语言,但这些类C语言已将ANSIC扩充得面目全非,程序开发人员相当于重新学习一种新的语言,增加了设计难度;另外一类是由C语言作为程序设计语言,由编译器将C语言中待加速的代码编译成为VHDL语言,再由ISE等综合工具生成硬件电路。本发明主要研究应用于后一类面向C2VHDL编译器的相关技术。
目前一些国内外大学、科研机构及工业界对这类编译器已经进行了初步的研究,但是在为循环流水阵列生成硬件存储结构时这些编译器对数据重用及并行支持的不够完善,影响了计算性能的提高。文献[1]提出了一种可重构编译器,利用猜测和前瞻执行方式开发指令级并行,主要针对无循环携带相关的计数类循环进行加速,采用迭代模调度IMS(IterativeModuloScheduling)方式实现循环流水,根据迭代模调度算法确定启动间距后,相隔一定的启动间距II(initiationinterval)插入段间寄存器,根据数据流图DFG(DataFlowGraph)生成相应的数据通路,流水化执行循环;文献[2]在文献[1]的基础上,主要研究编译优化技术挖掘循环并行性,如循环展开、循环流水等传统的软件编译优化技术实现循环的加速;文献[3]针对计数类循环,利用迭代模调度消除存储调度冲突,实现最内层能循环的软件流水,当流水失败时增大启动间距避免数据冲突,该方法不利于吞吐率的提高,文献[1,2,3]中提出的编译器只生成了为循环流水阵列提供数据的单体串行存储结构,没有提出并行的存储结构概念。文献[4]使用ARM处理器作为目标嵌入式平台,针对单存储端口且无循环携带相关的循环,采用软件流水技术以固定的启动间距II,执行流水,流水时,首先调度访存指令,然后调度非访存指令,并没有并行存储系统的设计。文献[5]设计的编译器针对类仿射数组下标应用中的面向滑动窗口类特殊应用提出了有针对性的存储结构模板,其存储结构由片外存储器MEM、片存储器BlockRAM和SmartBuffer构成,数据首先从片外存储器MEM流入BlockRAM,然后调入支持数据重用的输入SmartBuffer,为流水通路供应输入数据,运算完成后,结果存入输出SmartBuffer并经BlockRAM传回片外存储器,SmartBuffer根据总线大小、滑动窗口大小、数据大小和滑动距离自动生成,但是此模板无法用于具有循环迭代间流依赖的应用,同时由于其生成的SmartBuffer结构采用寄存器和计算单元完全互连的方法,导致仲裁机制较为复杂。文献[6]针对文献[5]中存在的问题提出了优化后的参数化三层存储体系结构模板,但是此模板为只有层内数据重用特征的循环展开程序生成存储结构时,其并行性还存在可以改进的空间,此模板仅针对滑动窗口类型的应用,无法为具有循环迭代间流依赖的应用生成存储结构。文献[7,8]提出的编译器主要采用多Cache结构提供并行访问数据,当循环展开时,编译器为每个循环迭代复制一份Cache数据,在提升程序性能的同时明显的增加了硬件面积开销,尤其当程序中存在循环迭代间流依赖时,生成的硬件存储结构会出现Cache一致性的问题。文献[9,10]提出的编译器主要研究如何为类仿射数组下标应用自动生成并行存储体及防止数据并行访问冲突的调度方法。文献[11]提出了一种粗粒度可重构协处理器体系结构,用于加速计算密集或数据密集类算法,其在ALU运算部件前后加入输入输出FIFO,利用数据选择指令和非平衡广播指令配合FIFO实现数据重用,通过拷贝多分RAM消除结构相关,实现数据的并行读取,该结构虽然可以实现数据重用及数据的并行传输,但是耗费了大量宝贵的片上存储资源。
存储系统的设计直接影响运算系统潜在并行性的发挥,制约着循环流水的整体性能,在文献[1,2,3,4]等编译器中均无优化的存储结构设计,调度访存指令时,需耗费大量的时钟周期读取所需的数据,为避免访存冲突,只能增大启动间距II,导致循环流水吞吐率的大大降低,访存指令的调度成为制约循环流水性能提升的瓶颈。存储系统研究的关键问题是提高存储带宽,减少存储器的访存次数和冲突,数据重用是目前广泛采用的方法。目前可重构编译系统中,存储结构的设计存在一定的缺陷:
(1)仅具有能为某类特定应用程序设计存储结构,其存储结构的可配置及灵活性较差,文献[5,6]提出的存储体系结构模型,仅面向滑动窗口类型的应用,开发输入相关数据重用,存储容量可配置,存储结构固定不变。
(2)循环携带流相关数据重用支持能力弱,除了文献[11]之外,均不支持此类数据重用。
(3)忽略了不可数据重用访存节点的并行访问。目前普遍基于数据重用方式开发存储结构,对数据重用之外的存储结构研究甚少。文献[11]通过拷贝多份RAM实现不可重用节点数据的并行读取,但是片上存储资源有限,拷贝多份RAM的方式对存储资源需求大量增加,有可能超出片上存储资源数目。
类仿射数组下标的应用是指参与循环运算的数组元素下标为类仿射型应用,在实际应用中很多程序都是类仿射型。如图1的示例代码为一个典型的类仿射型数组下标应用,循环边界和数组下标是循环变量或常数的仿射函数。如果数组每维的下标都具有ain+c(in-1,…,i2,i1)的形式,其中a为整数,n为循环嵌套层数,i1,i2,…,in为循环索引变量,c(in-1,…,i2,i1)为由i1,i2,…,in-1所构成的函数(若n=1,c(in-1,…,i2,i1)为常数),称该数组的下标为类仿射型。在图1中的示例代码中,只有数组A参与循环运算,当循环关键变量i步进时,数据访问轨迹如图2所示,存在箭头所指的循环迭代间数据重用。在充分挖掘数据重用后,执行每次迭代空间时只需从RAM中读取阴影方框表示的数据,其他输入数据可以重用上次循环迭代时读取或生成的数据,进而提高流水线的执行效率,加速应用。如何为仿射类型数组下标应用生成数据重用和并行性高的存储结构是可重构编译技术的关键任务。
对于类仿射型数组下标应用,上述文献中所列举的可重构编译器在自动生成具有并行性和数据可重用性的存储结构时,都存在各自的局限性。本发明主要采用模板方法为只有层内数据重用的仿射类数组下标应用编译生成高效的模块化多层次存储结构,编译时采用模块化设计思想,根据应用程序访存特征自动组合各子存储模块,生成多层次并行存储结构体。
相关对比文件包括:
(1)CallahanT.KernelFormationinGarpcc.Proceedingsofthe11thAnnualIEEESymposiumonField-ProgrammableCustomComputingMachines.Napa,CA,USA,2003.04:308-309
(2)LiYanbin,CallahanT,DarnellE,etal.Hardware-SoftwareCo-DesignofEmbeddedReconfigurableArchitectures,Proceedingsof37thConferenceonDesignAutomation.LosAngeles,California,2000:507-512
(3)GokhaleMB,StoneJM.NAPAC:compilingforahybridRISC/FPGAarchitecture,ProceedingsofIEEESymposiumonFPGAsforCustomComputingMachines.NapaValley,California,1998:126-135
(4)AlexJ.,DebabrataB.,SartajitP.etal.PACTHDL:ACCompilerTargetingASICsandFPGAswithPowerandPerformanceOptimizations.Powerawarecomputing.KluwerAcademicPublishers,2002:169-190
(5)GuoZ,NajjarW.Acompilerintermediaterepresentationforreconfigurablefabrics,ProceedingsoftheConf.onFieldProgrammableLogicandApplications.Madrid,Pain,2006:1-4
(6)DouY,DongYZ,XuJHetal.AutomaticGenerationofIPCoreforSliding-WindowOperationsBasedonaParameterizedMemoryArchitecutre.JournalofSoftware,2009,20(2):246-255(inchinese)
(7)SeungJ.Lee,DavidK.Raila,VoelodymyrV.Kindratenko.LLVM-CHiMPS:CompilationEnvironmentforFPGAsUsingLLVMCompilerInfrastructureandCHiMPSComputationalModel,Proceedingsof4thAnnualReconfigurableSystemsSummerInstitute.Urbana,USA,2008:1-10
(8)AndrewP.,SusanE.,DaveB.etal.Performanceandpowerofcache-basedreconfigurablecomputing,Proceedingsofthe36thannualinternationalsymposiumonComputerarchitecture.Austin,Texas,USA,2009:395-405
(9)ZhangZ,FanY.,JiangW.etal.AutoPilot:aplatformbasedESLsynthesissystem.HighLevelSynthesis:FromAlgorithmtoDigitalCircuit,SpringerNetherlands,2008:99-112
(10)Cong,J,BinLiu,NeuendorfferSeaal.High-LevelSynthesisforFPGAs:FromPrototypingtoDeployment.Computer-AidedDesignofIntegratedCircuitsandSystems,201130(4):473-491
(11)徐进辉,杨梦梦,窦勇,周兴铭.粗粒度可重构平台中循环自流水硬件实现.计算机学报,2009,32(6):1080-1088
发明内容
本发明的目的是提供一种基于LLVM设计的ASCRA可重构编译器,可以为只有层内数据重用的仿射类数组下标应用编译生成高效的模块化多层次存储结构的面向类仿射数组下标应用的参数化并行存储结构模版。
本发明的目的是这样实现的:
面向类仿射数组下标应用的参数化并行存储结构模版,采用模块化设计思想的参数化并行存储结构模版在处理参与循环程序运算的数组下标为类仿射型时,为新数据自动生成基于RAM的多体交叉并行访存结构或单体串行访存结构,为输入依赖的复用数据生成SmartBuffer缓存结构,为循环迭代间的流依赖的复用数据自动生成RAWBuffer缓存结构,其中SmartBuffer直接服务于运算单元,RAWBuffer和RAM为运算单元和SmartBuffer服务;所述访存数据依赖图MDDG=(V,E,R),其中V为节点集合,E为连接相邻节点的有向边,R为数据重用度,X={L,S},即循环迭代空间内数组元素进行了Load或Store操作,
每个 e = ( XA [ ai n + c ( i n - 1 , . . . , i 2 , i 1 ) ] , XA [ ai n + d ] ( i n - 1 , . . . , i 2 , i 1 ) ) ∈ E 存在一个数据重用度:
表示节点每隔M,次循环迭代就会同节点发生对同一存储地址的读写;访存数据依赖图的生成包括:
(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的个数。
计算生成参数化并行存储结构时所需的参数值包括:
多体交叉存取度:Ram_num;
存储体深度:Ram_depth;
存储体位宽:Ram_width;
RAWBufffer个数:RBuffer_num;
RAWBufffer深度:RBuffer_depth;
SmartBuffer个数:SBuffer_num;
SmartBuffer深度:Register_num。
本发明的有益效果在于:
此模板结构不仅充分挖掘了输入数据重用和循环迭代间数据重用,还为了提高硬件执行频率,采用了寄存器平移策略,简化了硬件设计,保证Smartbuffer缓存结构与计算单元的连接固定不变。在编译生成硬件存储结构时,不仅可以根据应用程序计算量匹配存储容量,更可以根据程序特征,灵活生成由多体交叉并行存储结构、单体串行访存结构、RAWBuffer缓存结构及SmartBuffer缓存结构组成的存储体系。循环携带流相关数据重用支持能力,除了文献[11]之外,均不支持此类数据重用。忽略了不可数据重用访存节点的并行访问。
附图说明
图1是类仿射型数组下标应用示例代码;
图2是图1中示例代码的数据访问轨迹图;
图3是参数化并行存储结构模板;
图4是访存数据依赖图集合;
图5是根据图1中示例代码生成的并行存储结构图。
具体实施方式
下面结合附图举例对本发明做更详细的描述:
本发明针对只有层内数据重用的仿射类数组下标应用程序,提出一种参数化并行存储模板,结构如图3所示。主要包括多体交叉并行存储结构、SmartBuffer、RAWBuffer、地址产生单元和存储控制器,在多体交叉并行存储结构中,地址流解析单元生成访问多个并行RAM存储体模块使用的内部访问地址流,通过外部的地址产生单元给多体交叉并行存储结构提供数据索引地址流;在类仿射数组下标应用流水执行时,通过存储卡控制器控制RAWBuffer的读写、地址产生单元控制多体交叉并行存储结构中的数据访问,然后两者将数据流以流水方式传递给SmartBuffer,为程序中的运算单元流水执行提供流水的数据支撑,从而提升整个应用的流水性能。
在自动生成硬件存储结构时,采用模块化设计思想,先将参与循环迭代空间运算的数组元素按数组名划分为不同的对象,再采用访存数据依赖图表示同名数组的数据访存特征;接下来,根据访存数据依赖图计算生成各个子模块的参数值,自动生成各个独立的存储模块,包括多体交叉并行存储结构、单体串行存储结构(并行度为1的多体交叉并行存储结构)、RAWBuffer缓存结构及SmartBuffer缓存结构;最后生成各个子模块的连线模块,构成多层次存储体系。本发明主要论述自动生成硬件存储结构过程中的访存数据依赖图生成算法和各子模块参数值计算方法。
本发明的一种面向类仿射数组下标应用的参数化并行存储结构模板的工作原理如下:
当参与循环程序运算的数组下标为类仿射型时,每次循环迭代需要访存的数组数据分为新数据和复用数据两类。在编译程序时,根据数组数据依赖关系,为新数据自动生成基于RAM的多体交叉并行访存结构或单体串行访存结构,为流水线提供并行的输入数据读取(Load)与输出数据写回(Store)操作。同时,由于FPGA器件具有较多的寄存器资源,可以尽量复用运算数据,为复用数据生成RAWBuffer、SmartBuffer结构,专用于存储需要复用的数据,从而消除对RAM的访问冲突,保证流水线的效率。根据需要访存的复用数据依赖类型编译器会自动生成不同的缓存结构:为输入依赖的复用数据生成SmartBuffer缓存结构,为循环迭代间的流依赖(写后读相关)的复用数据自动生成RAWBuffer缓存结构。其中SmartBuffer直接服务于运算单元,RAWBuffer和RAM为运算单元和SmartBuffer服务。在编译时,根据应用程序访存特征,组合各子存储结构,生成多层次存储结构。需要为参与循环运算的不同的数组确定的参数有:多体交叉并行访存结构的分体数Ram_num;存储体深度Ram_depth,存储体位宽Ram_width;SmartBuffer缓存结构的个数SBuffer_num,SmartBuffer的深度Register_num;RAWBuffer缓存结构的个数RBuffer_num,RAWBufffer深度RBuffer_depth。为了能根据存储模板规则编译生成参数化的并行存储结构,本发明提出了访存数据依赖图的定义及面向类仿射数组下标应用的访存数据依赖图生成算法,编译时根据访存数据依赖图中节点的属性信息,计算生成模板中的各参数值。
本发明的一种面向类仿射数组下标应用的参数化并行存储结构模板的访存数据依赖图生成算法如下:
定义1访存数据依赖图。访存数据依赖图MDDG=(V,E,R),其中V为节点集合,E为连接相邻节点的有向边,R为数据重用度.X={L,S},即循环迭代空间内数组元素进行了Load或Store操作,每个存在一个数据重用度表示节点每隔M次循环迭代就会同节点发生对同一存储地址的读写。
算法1:访存数据依赖图生成算法
ASCRA编译器首先采用llvm-gcc将C语言应用程序转换为SSA(StaticSingleAssignment)形式的IR(IntermediateRepresentation)中间表示形式,然后将IR程序映射生成硬件结构。因此,本发明提出的访存数据依赖图生成算法的输入指令集为IR代码(如果程序进行循环展开操作,则输入指令集为循环展开后的IR代码)。由于本发明主要研究只有层内数据重用的仿射类数组下标应用,因此,参与循环运算的数组下标可简化表示为ai+b,i为循环索引变量。
步骤:
(1)遍历程序中进行Load和Store操作的所有数组元素,根据数组名,分别将其划分到不同的集合Gx中,x=1…n,表示有程序中存在不同名的数组个数,根据操作属性将数组元素A[ai+b]表示为LA[ai+b](进行Load操作)或SA[ai+b](进行Store操作),将其插入到集合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]>,如式(1)所示,如果集合Sxamn中只有一个数组元素,则不计算数据重用度。
R<XA[ai+b],XA[ai+c]>=Δd<XA[ai+b],XA[ai+c]>/k(1)
式(1)中,不能整除时,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的个数。
本发明的一种面向类仿射数组下标应用的参数化并行存储结构模板的模板参数计算方法如下:
根据访存数据依赖图,为每个不同名的数组生成参数化并行存储结构所需参数值:(1)多体交叉存取度:Ram_num;(2)存储体深度:Ram_depth;(3)存储体位宽:Ram_width;(4)RAWBufffer个数:RBuffer_num;(5)RAWBufffer深度:RBuffer_depth;(6)SmartBuffer个数:SBuffer_num;(7)SmartBuffer深度:Register_num.设输入的数组元素个数Arrary_depth;输入的数组元素位宽I_width。
(1)多体交叉存储度Ram_num
生成访存数据依赖图过程中,如果集合Sxam的个数为n,或者集合Sx0m的个数为m,计算RAM的多体交叉存储度Ram_num的公式如(3)所示.当Ram_num等于1时,硬件结构为单体串行结构。
R a m _ n u m = 1 m > 0 n m = 0 - - - ( 3 )
(2)存储体深度Ram_depth
计算方法如式(4)。
Ram_depth=Arrary_depth/Ram_num(4)
(3)存储体位宽Ram_width
计算方法如式(5)。
Ram_width=I_width(5)
(4)RAWBuffer结构个数RBuffer_num
如果访存数据依赖图集合中存在流依赖的访存数据依赖图有f个,根据参数化并行存储模板规则,为重用数据生成RAWBuffer结构.其RAWBuffer结构的个数等于有流依赖的访存数据依赖图中的叶子节点的个数f,如式(6)。
RBuffer_num=f(6)
(5)RAWBufffer深度RBuffer_depth
为具有流依赖的输入数据设计RAWBuffer结构,每个RAWBuffer结构的深度由进行Store操作的数组元素所在数据通路中的流水段号(Ln)同访存数据依赖图中叶子节点(SA[ai+d])和其相连节点(LA[ai+b])间的数据重用度R<LA[ai+b],SA[ai+d]>的关系来确定,如式(7)。
R B u f f e r _ d e p t h = 0 , L n &GreaterEqual; R R < LA &lsqb; a i + b &rsqb; , SA &lsqb; a i + d &rsqb; > , L n < R - - - ( 7 )
式(7)中RBuffer_depth=0表示直连线,不生成寄存器。
(6)SmartBuffer结构个数SBuffer_num
SmartBuffer的个数等于访存数据依赖图中划分出的集合个数S,如式(8)。
SBuffer_num=S(8)
(7)SmartBuffer结构深度Register_num
在含流依赖的访存数据依赖图中,其叶子节点生成的数据存储在RAWBuffer中,非叶子节点中所需的数据从SmartBuffer中读取,此时SmartBuffer的深度如式(9)所示。
Register_num=ΣRxkmnv-RBuffer_depth+1(9)
其中,ΣRkmnv表示集合Sxkmnv(v=v0,…,vn)对应的访存数据依赖图中相邻节点数据重用度之和。
在含输入依赖(或只有单节点)的访存数据依赖图中,其叶子节点数据需要从并行存储结构中读取,并行读取的数据需要存储到相应SmartBuffer中,此时SmartBuffer的深度如式(10)所示。
Re g i s t e r _ n u m = M A X ( &Sigma;R xkmnv 0 , &Sigma;R xkmnv 1 , ... , &Sigma;R xkmnv n ) + 1 - - - ( 10 )
为了进一步阐明如何根据访存依赖图及参数化存储模板生成具体的硬件存储结构,本发明以图1中类仿射型数组下标应用示例代码论述具体实现思路。
1、访存数据依赖图生成算法的应用
如图1所示,代码段中只有一个数组A,依据访存数据依赖图生成算法对数组A进行访存数据依赖图生成,数组A的下标可以表示为ai+b,其中a=1,b为常数,i为循环索引变量。
访存数据依赖图生成步骤:
(1)遍历代码段中进行Load和Store操作的所有数组元素,每次循环迭代时进行Load操作的数组元素为A[i],A[i+1],A[i+3],A[i+6],进行Store操作的数组元素为A[i+2]。根据数组名,可以生成数组A对应的一个集合G1,根据操作属性将集合G1表示成{LA[i],LA[i+1],LA[i+3],LA[i+6],SA[i+2]}。
(2)遍历集合G1中的元素,获得数组元素A的下标斜率集合A={a|a=1},将斜率相同的数组元素划分到同一个集合中,得到集合S11={LA[i],LA[i+1],LA[i+3],LA[i+6],SA[i+2]},因为只有一种斜率a=1。
(3)因为代码段中循环的变量递增式为i=i+1,因此该循环的数据步长k=1,根据数组下标截距模数据步长k同余的数组元素之间的关系划分集合S11,因为下标模数据步长k的余数m=0,只有一个余数,所以只能划分成一个集合S110={LA[i],LA[i+1],LA[i+3],LA[i+6],SA[i+2]}。
(4)将集合S110中的数组元素XA[ai+b]按类仿射数组下标的截距从小到大进行排序,得到集合S110={LA[i],LA[i+1],SA[i+2],LA[i+3],LA[i+6]},当循环迭代空间存在写后读相关,删除进行Load操作的数组元素;当进行Load操作的数组元素与进行Store操作的数组元素具有相同数组下标时,将进行Store操作的数组元素排在进行Load操作的数组元素前面,如果这两个数组元素之间存在迭代内写后读相关,则从集合中删除进行Load操作的数组元素。得到最终集合S110={LA[i],LA[i+1],SA[i+2],LA[i+3],LA[i+6]}。
(5)遍历集合S110中的数组元素,每当遍历到进行Store操作的数组元素时,都将其及之前的所有数组元素构成一个新的集合Sxamn或Sx0mn(n=1...N,表示第n个新集合),按此规则继续遍历剩余的数组元素,直到遍历完集合中的所有数组元素,如果不存在进行Store操作的数组元素,则剩余的数组元素构成一个新的集合,最终得到两个集合S1101={LA[i],LA[i+1],SA[i+2]}和S1102={LA[i+3],LA[i+6]}。
(6)计算每个集合中相邻节点间的数据重用度:R<LA[i],LA[i+1]>=1,R<LA[i+1],SA[i+2]>=1,R<LA[i+3],LA[i+6]>=3。
(7)依次遍历数据重用度R,因为不存在数据重用度R=0的情况,所以不用继续划分集合。
(8)生成的访存数据依赖图的个数等于集合Sxamnv或Sx0mnv的个数,为两个集合S1101和S1102分别生成两个访存数据依赖图MDDG11010和MDDG11020,集合中的数组元素为访存数据依赖图的节点,其中第一个数组元素为根节点,最后一个数组元素为叶子节点,每条边上的权值为数据重用度R。访存数据依赖图MDDG11010中叶子节点为SA[i+2],访存数据依赖图MDDG11020中叶子节点为LA[i+6].最终生成如图4所示的访存数据依赖图集合。
2、模板参数的计算
根据参数计算公式得出:多体交叉存取度Ram_num=1,Ram_depth=100,Ram_width=32,RAWBufffer的个数RBuffer_num=1,如图1所示代码,其进行Store操作的数组元素的流水段号为1,因此,RAWBufffer的深度RBuffer_depth=0;SmartBuffer的个数SBuffer_num=2;其中含有流依赖的访存数据的SmartBuffer中寄存器的个数Register_num=2,不含有流依赖的访存数据的SmartBuffer中寄存器的个数Register_num=4。
3、参数化并行存储结构模板使用方法
根据参数化的并行存储结构模板,最终为图1所示的程序段生成如图5所示的存储结构。RAWBuffer用来存储写后读相关度的重用数据,与ALU和SmartBuffer相连,SmartBuffer和运算单元相连,存储输入可重用数据,为运算提供并行输入数据,其数据来源于RAWBuffer缓存结构和RAM存储体。其中,SmartBuffer采用寄存器平移策略传递数据,保证其和运算单元之间连接关系固定不变,降低了硬件复杂度。在流水线建立阶段,MUX选择器从RAM存储体接受数据,为SmartBuffer0提供A[1]和A[2];RAM存储体为SmartBuffer1提供A[4]至A[7],其中A[5]和A[6]是下次迭代所需要的数据。第1次迭代(i=1),A[3]=A[1]+A[2]+A[4]+A[7],第2次迭代(i=2),A[4]=A[2]+A[3]+A[5]+A[8],其中A[2]由SmartBuffer0中的寄存器平移获得,新的A[3]由RAWBuffer提供,A[5]由SmartBuffer1中的寄存器平移获得,A[8]由RAM存储体提供存入SmartBuffer1.以次类推,整个运算过程只需要对RAM进行106次访问,且没有访存冲突,流水线效率得到充分发挥。

Claims (2)

1.一种面向类仿射数组下标应用的参数化并行存储结构模版,其特征在于:采用模块化设计思想的参数化并行存储结构模版在处理参与循环程序运算的数组下标为类仿射型时,为新数据自动生成基于RAM的多体交叉并行访存结构或单体串行访存结构,为输入依赖的复用数据生成SmartBuffer缓存结构,为循环迭代间的流依赖的复用数据自动生成RAWBuffer缓存结构,其中SmartBuffer直接服务于运算单元,RAWBuffer和RAM为运算单元和SmartBuffer服务;所述访存数据依赖图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的个数。
2.根据权利要求1所述的一种面向类仿射数组下标应用的参数化并行存储结构模版,其特征在于:计算生成参数化并行存储结构时所需的参数值包括:
多体交叉存取度:Ram_num;
存储体深度:Ram_depth;
存储体位宽:Ram_width;
RAWBufffer个数:RBuffer_num;
RAWBufffer深度:RBuffer_depth;
SmartBuffer个数:SBuffer_num;
SmartBuffer深度:Register_num。
CN201510447925.5A 2015-07-28 一种面向类仿射数组下标应用的参数化并行存储结构模版 Active CN105159737B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510447925.5A CN105159737B (zh) 2015-07-28 一种面向类仿射数组下标应用的参数化并行存储结构模版

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510447925.5A CN105159737B (zh) 2015-07-28 一种面向类仿射数组下标应用的参数化并行存储结构模版

Publications (2)

Publication Number Publication Date
CN105159737A true CN105159737A (zh) 2015-12-16
CN105159737B CN105159737B (zh) 2018-08-31

Family

ID=

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105718245A (zh) * 2016-01-18 2016-06-29 清华大学 可重构计算循环映射优化方法
CN109213587A (zh) * 2018-09-12 2019-01-15 中国人民解放军战略支援部队信息工程大学 GPU平台下的多Stream并行DAG图任务映射策略
CN112631610A (zh) * 2020-11-30 2021-04-09 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159489A1 (en) * 2010-12-20 2012-06-21 Oliver Schabenberger Systems and Methods for Generating a Cross-Product Matrix In a Single Pass Through Data Using Single Pass Levelization
CN103226487A (zh) * 2013-04-25 2013-07-31 中国人民解放军信息工程大学 面向异构众核多级存储结构的数据分布与局部性优化方法
CN103701469A (zh) * 2013-12-26 2014-04-02 华中科技大学 一种大规模图数据的压缩存储方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159489A1 (en) * 2010-12-20 2012-06-21 Oliver Schabenberger Systems and Methods for Generating a Cross-Product Matrix In a Single Pass Through Data Using Single Pass Levelization
CN103226487A (zh) * 2013-04-25 2013-07-31 中国人民解放军信息工程大学 面向异构众核多级存储结构的数据分布与局部性优化方法
CN103701469A (zh) * 2013-12-26 2014-04-02 华中科技大学 一种大规模图数据的压缩存储方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
吴艳霞: "面向应用的可重构编译器ASCRA(英文)", 《计算机科学与探索》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105718245A (zh) * 2016-01-18 2016-06-29 清华大学 可重构计算循环映射优化方法
CN105718245B (zh) * 2016-01-18 2018-08-28 清华大学 可重构计算循环映射优化方法
CN109213587A (zh) * 2018-09-12 2019-01-15 中国人民解放军战略支援部队信息工程大学 GPU平台下的多Stream并行DAG图任务映射策略
CN109213587B (zh) * 2018-09-12 2021-11-09 中国人民解放军战略支援部队信息工程大学 GPU平台下的多Stream并行DAG图任务映射策略
CN112631610A (zh) * 2020-11-30 2021-04-09 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
CN112631610B (zh) * 2020-11-30 2022-04-26 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法

Similar Documents

Publication Publication Date Title
JáJá Parallel algorithms
US6609189B1 (en) Cycle segmented prefix circuits
US20210097221A1 (en) Optimization method for graph processing based on heterogeneous fpga data streams
CN103377035A (zh) 针对粗颗粒度流应用的流水并行化方法
US11080227B2 (en) Compiler flow logic for reconfigurable architectures
CN1983165A (zh) 用于在simd结构中处理线程组的系统和方法
CN110852930B (zh) 一种基于OpenCL的FPGA图处理加速方法和系统
CN102622334B (zh) 多线程环境下并行xslt转换方法和装置
Cecilia et al. Enhancing GPU parallelism in nature-inspired algorithms
WO2022068205A1 (zh) 数据存储和读取方法及系统
Tao et al. Hima: A fast and scalable history-based memory access engine for differentiable neural computer
US20230076473A1 (en) Memory processing unit architecture mapping techniques
CN105159737A (zh) 一种面向类仿射数组下标应用的参数化并行存储结构模版
CN105159737B (zh) 一种面向类仿射数组下标应用的参数化并行存储结构模版
Saied et al. Scheduling for minimizing the number of memory accesses in low power applications
Liu et al. A machine learning system to improve the performance of ASP solving based on encoding selection
Bui et al. Parallel shared memory strategies for ant-based optimization algorithms
Khachumov et al. A method for synthesis of specialized processors to support on-board scheduling of periodic tasks
Diéguez et al. BPLG–BMCS: GPU-sorting algorithm using a tuning skeleton library
Yu et al. Accelerated Synchronous Model Parallelism Using Cooperative Process for Training Compute-Intensive Models
Kalenkova Application of if-conversion to verification and optimization of workflows
CN109002909B (zh) 大气谱模式动力框架高可扩展并行优化方法及系统
Kutepov et al. Flowgraph stream parallel programming: Language, process model, and computer implementation
JPH0628324A (ja) 並列計算機及びコンパイラ
Delisle Parallel ant colony optimization: Algorithmic models and hardware implementations

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant