CN112306500B - 一种针对粗粒度可重构结构的降低多类访存冲突编译方法 - Google Patents

一种针对粗粒度可重构结构的降低多类访存冲突编译方法 Download PDF

Info

Publication number
CN112306500B
CN112306500B CN202011375400.2A CN202011375400A CN112306500B CN 112306500 B CN112306500 B CN 112306500B CN 202011375400 A CN202011375400 A CN 202011375400A CN 112306500 B CN112306500 B CN 112306500B
Authority
CN
China
Prior art keywords
access
memory
conflict
mapping
array
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.)
Active
Application number
CN202011375400.2A
Other languages
English (en)
Other versions
CN112306500A (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.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong 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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN202011375400.2A priority Critical patent/CN112306500B/zh
Publication of CN112306500A publication Critical patent/CN112306500A/zh
Application granted granted Critical
Publication of CN112306500B publication Critical patent/CN112306500B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

一种针对粗粒度可重构结构的降低多类访存冲突编译方法,在编译器后端面高度时,采用访存压力分摊方法进行处理,调整不同子DFG的启动时间,调度结果将会通过数组起始地址偏置分配方法处理,对一时间内所有的访存操作访问的不同数组起始地址进行调整,还包括冲突感知映射方法的处理,根据冲突矩阵和当前映射情况将不同操作映射至PE上,重排序和回溯算法确保了映射过程的正确性。本发明的有益效果为:有效降低多数组间的多存储体冲突,大幅度降低主存利用DMA传递数据至片上存储器的时间代价;避免访存冲突,带来CGRA上更高的应用加速比;编译器后端流程结构简单,算法复杂度低,编译速度快。

Description

一种针对粗粒度可重构结构的降低多类访存冲突编译方法
技术领域
本发明涉及粗粒度可重构结构编译器领域,具体地,涉及降低粗粒度可重构结构中的多存储体冲突和互联冲突的数据分区和算子映射方法。
背景技术
随着微电子工艺的发展,摩尔定律逐渐走向终结,微处理器的主频难以取得进一步的提升。粗粒度可重构架构(Coarse-Grained Reconfigurable architecture,CGRA)在后摩尔定律时代是相较传统架构能实现更高能效比的体系结构。粗粒度可重构架构往往被应用于加速计算密集型应用程序中。在现代实际生活应用程序中,应用执行时间主要消耗在少量循环内核处。因此,针对将循环内核映射到可重构架构上的优化,对于提升可重构架构计算密集型应用的性能具有重要意义。
典型的CGRA结构是定义于ADRES[1]模型,如附图1所示。具体由:片上存储缓冲区(on-chip memory buffer,OMB),全局寄存器缓冲区(global register buffer,GRB),指令存储器(context memory)和运算单元阵列(processing element array,PEA)构成。运算单元阵列的每一个运算单元(processing element,PE)结构如附图2所示,包含指令控制单元(context control unit),功能单元(function unit),输出寄存器(output register)和本地寄存器缓冲区(local register buffer,LRB)。基于软流水技术,编译器将计算密集型应用程序循环部分抽象为循环内核形式,通常使用数据流图(data flow gragh,DFG)表示。编译器将DFG中不同运算及访存操作调度(schedule)并映射(mapping)到PEA中不同PE上。多个PE并行执行数据访存及运算,以获得更高的应用加速比和算力。不同的调度及映射策略直接决定了CGRA完成计算密集型运算的加速比和算力。高效地选取调度及映射策略以最小化循环内核实际执行时间,是实现粗粒度可重构架构编译器首要目的之一。
软件流水线策略带来了对片上存储器缓冲区并行提供数据的要求,当同一时间内访存操作超过的并行提供数据的最大限制后,存在的访存冲突会带来流水线停滞。造成访存冲突的原因有多种,包括多个访存操作同时访问多存储体(Multi-bank)片上存储器(Multi-Bank OMB)同一个存储体(Bank),以及多个访存操作同时占用相同的互联资源。通过对不同实际应用领域常见的循环内核分析统计,我们得到以下特征:第一,循环内核中访存操作占全部操作的47.9%。第二,发生在同一控制周期(Control Step,CS)的访存操作之间的访存冲突造成的时延占总运行时间的68.4%。通过上述分析,可以在编译器调度和映射策略的选取上综合考虑访存冲突因素以降低循环内核运行时间,规划片上存储器内的数据放置以降低主存与片上存储器数据传输时间,以提升应用加速比和算力。
相关研究及分析
一、对减少访存冲突的研究
对减少访存冲突的研究分为两个部分,包括单控制周期内对片上存储器同一存储体访问产生的冲突(多存储体冲突),与单控制周期内抢占同一硬件互联资源造成的冲突(互联冲突)。对于目标CGRA硬件结构,互联冲突主要由多操作同时占用列总线产生,故互联冲突在本硬件结构中被称为列总线冲突。国内外对减少访存冲突的研究,多集中在对循环内核中访存操作分析,并依此减少多存储体冲突。[2]对循环内核访存数组聚类以保证不同的存储体具有尽可能相等的利用率。[3][4]在[2]方法的基础上将对单个数组的访存操作尽可能映射到同一列PE上,避免多存储体内的数据冗余。[5]分析循环内核单一控制周期内针对单个数组的访存,利用线性变换将单个数组各元素分配到不同存储体内不同位置。[6]在[5]的基础上,将存储体划分为多个块,提升线性变换复杂度以覆盖更复杂的单数组并发访存情况。[7]针对线性变换参数的选取过程优化以加快编译速度。[8]将线性变换参数选取从仅对单数组的分析扩充到多数组,并提出算法对无冲突存储体合并。[9]在[8]多数组线性变换分析的基础上,对调度过程进行优化,进一步避免多存储体冲突。
然而,上述研究存在三个问题:一是上述研究全部围绕如何降低多存储体冲突展开,但都忽视了互联冲突所带来的性能损失,这一性能损失在访存操作数量占比高的循环内核会大幅度降低性能;二是上述研究解决多存储体冲突的策略仅能解决两访存操作在整个运算过程中访问地址距离不变的情况,而不适用于访存操作之间的关系随着循环迭代的进行而变化的情况;三是上述研究使用复杂的线性变换放置数据策略来解决多存储体冲突,带来了片上存储器内数据存储复杂度的提高,这会导致主存利用直接存储器访问(Direct Memory Access,DMA)传递数据至片上存储器的时间代价提高,进而导致可重构处理器应用加速比的降低。
二、对CGRA编译器后端调度与映射问题的研究
粗粒度可重构架构编译器将源程序中循环内核部分生成的中间表示(intermediate representation,IR)转化为数据流图DFG的形式,通过调度和映射过程将图中算子分配给不同PE,最后生成对应PE的配置指令。该问题在算法领域中属于NP问题,所以需要启发性算法高效地搜索可行调度及映射结果。[10]提出的粗粒度可重构架构的模调度(CGRA Modulo Schedule)是多数可重构架构编译器后端的实现基础。[11]提出边缘中心模调度(Edge-centric Modulo Scheduling,EMS)采用以路径问题为主要目标的调度方法。[12]提出的EPIMap将调度和映射问题转化成了寻找最大公共子图问题。[13]提出的RegiMap考虑PE上的LRB对调度过程中长距离数据依赖进行优化,并将映射过程转化成了寻找满足约束的最大组问题。[14]提出的PolyMap利用多面体模型编译对循环内核外的循环间映射流分析,调整循环内核之间执行顺序。[15]提出的MEMMap考虑访存延迟,建立了一个精确的公式解决使用OMB作为路由资源时的CGRA映射问题。[16]提出的RAMP在调度过程中灵活地探索多种路由数据策略,并选择可行且所需资源最少的策略。[17]同时考虑PE、GRB、LRB、OMB资源解决调度和映射问题。此外,[3][4]对传统EMS[11]进行优化,[9]的Dual-Force Directed Scheduling策略为CGRA编译器后端调度与映射问题提出了不同解决方案。然而,上述研究多数未考虑访存冲突对性能的影响,少数考虑访存冲突的调度方案也仅考虑了多存储体冲突,而未考虑互联冲突。这和本发明同时针对解决Bank冲突和互联冲突以提升应用加速比和算力有所不同。
参考文献
[1]Y.Park,J.J.K.Park,and S.Mahlke.2012.Efficient performance scalingof future CGRAs for mobile applications.In International Conference on Field-Programmable Technology(FPT).335–342.
[2]Kim Y,Lee J,Shrivastava A,et al.Operation and data mapping forCGRAs with multi-Bank memory[J].Acm Sigplan Notices,2010,45(4):17-26.
[3]Kim Y,Lee J,Shrivastava A,et al.Memory-Aware Application Mappingon Coarse-Grained Reconfigurable Arrays[C]//International Conference on High-performance Embedded Architectures&Compilers.Springer,Berlin,Heidelberg,2010.
[4]Kim Y,Lee J,Shrivastava A,et al.High Throughput Data Mapping forCoarse-Grained Reconfigurable Architectures[J].IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems,2011,30(11):1599-1609.
[5]Wang,Y.,Li,P.,Zhang,P.,Zhang,C.,&Cong,J.(2013).Memory partitioningfor multidimensional arrays in high-level synthesis.Proceedings-DesignAutomation Conference.
[6]Wang,Y.,Li,P.,&Cong,J.(2014).Theory and algorithm for generalizedmemory partitioning in high-level synthesis.ACM/SIGDA International Symposiumon Field Programmable Gate Arrays-FPGA,199–208.
[7]Meng,Chenyue,Yin,Shouyi,Ouyang,Peng,et al.Efficient memorypartitioning for parallel data access in multidimensional arrays[C]//DesignAutomation Conference.IEEE,2015.
[8]Yin S,Xie Z,Meng C,et al.MultiBank memory optimization forparallel data access in multiple data arrays[C]//IEEE/ACM InternationalConference on Computer-aided Design.IEEE,2017.
[9]Yin S,Yao X,Lu T,et al.Conflict-Free Loop Mapping for Coarse-Grained Reconfigurable Architecture with Multi-Bank Memory[J].IEEETransactions on Parallel and Distributed Systems,2017,PP(9):1-1.
[10]Rau B R.Iterative modulo scheduling:an algorithm for softwarepipelining loops[C]//International Symposium on Microarchitecture.IEEE,1994.
[11]Park,Hyunchul&Fan,Kevin&Mahlke,Scott&Oh,Taewook&Kim,Heeseok&Kim,Hong-seok.(2008).Edge-centric modulo scheduling for coarse-grainedreconfigurable architectures.Parallel Architectures and CompilationTechniques-Conference Proceedings,PACT.166-176.10.1145/1454115.1454140.
[12]Hamzeh,M.,Shrivastava,A.,&Vrudhula,S.(2012).EPIMap:Usingepimorphism to map applications on CGRAs.Proceedings-Design AutomationConference,1284–1291.
[13]Hamzeh,M.,Shrivastava,A.,&Vrudhula,S.(2013).REGIMap:Register-aware application mapping on coarse-grained reconfigurable architectures(CGRAs).Proceedings-Design Automation Conference,1–10.
[14]Liu,D.,Yin,S.,Peng,Y.,Liu,L.,&Wei,S.(2015).Optimizing SpatialMapping of Nested Loop for Coarse-Grained Reconfigurable Architectures.IEEETransactions on Very Large Scale Integration(VLSI)Systems,23(11),2581–2594.
[15]Yin,S.,Yao,X.,Liu,D.,Liu,L.,&Wei,S.(2016).Memory-Aware LoopMapping on Coarse-Grained Reconfigurable Architectures.IEEE Transactions onVery Large Scale Integration(VLSI)Systems,24(5),1895–1908.
[16]Dave,S.,Balasubramanian,M.,&Shrivastava,A.(2018).RAMP:Resource-aware mapping for CGRAs.Proceedings-Design Automation Conference,Part F1377.
[17]Z.Zhao et al.,"Towards Higher Performance and Robust Compilationfor CGRA Modulo Scheduling,"in IEEE Transactions on Parallel and DistributedSystems,vol.31,no.9,pp.2201-2219,1Sept.2020,doi:10.1109/TPDS.2020.2989149.
发明内容
有鉴于现有技术的上述缺陷,本发明要解决的技术问题为:CGRA编译器针对访存冲突的优化存在的未考虑互联冲突优化的问题、以及CGRA编译器利用线性变换方法解决多存储体冲突中忽略全局循环过程地址关系变化与高DMA传输时间代价的问题。
一种访存压力分摊方法,作为CGRA编译器后端调度过程中的一个步骤,通过适当增加控制周期的数量,并调整DFG内不同子图之间的启动时间,将循环内核中每一个控制周期访存操作数量尽可能降低,以减少每一个控制周期内发生访存冲突的可能性,从而提升可重构处理器应用加速比。
进一步地,首先如果DFG有多个子图构成,则对不同的II下的DFG进行子图启动时间调整。编译器后端对DFG中位于不同控制周期中的节点数量和访存节点数量计数。通过贪婪算法调整不同子图的启动时间,在放置每一个子图时,尽可能将节点数量和访存节点数量平均地分配到不同的控制周期中。
进一步地,该算法优先以分摊访存节点操作数量为目的,若当前策略得到的结果不满足每个控制周期内的节点数量限制,则算法在分配启动时间时会同时考虑分摊节点数量和访存节点操作数量,以在保证单控制周期内节点数量约束下,尽可能分摊访存压力。
优选地,最优运行时间出现在最小控制周期数量和控制周期数量增加一个周期两种情况之中,所以取两次运行最优结果作为最终所选用的配置信息。
一种数据的放置方法,作为CGRA编译器一个步骤,固定存储体数量,不进行线性变换,仅通过调整数组起始地址来降低多存储体冲突。
进一步地,本设计使用数列表示访存操作对不同数组的访问。对于不同维度的数组,其在存储器中均以一维数组的方式存储,本设计调整数组起始位置的策略不受数组维度的影响,因此后续分析均对一维数组展开。设循环内核访存的数组数量为K,数组名记为A1,A2,...,AK。当控制周期为r时,对第k个数组Ak中位置为Ak[a0i0+a1i1+…an-1in-1+an]元素的访存被记作
Figure BDA0002807081050000051
的向量形式。其中i0,i1,...,in-1为循环索引,a0,a1,...,an-1为线性变换系数。例如:在控制周期为2时访问Ak[2i0+3i1+1],访存可以被记作
Figure BDA0002807081050000052
的向量形式。
本设计中数组Ak的所有元素将会被放置到片上存储器首地址为Ok的位置,因此对数组Ak的访存操作
Figure BDA0002807081050000053
所访问的片上存储器Bank编号
Figure BDA0002807081050000054
如下所示。其中BankNum为片上存储器存储体数量。
Figure BDA0002807081050000055
同一控制周期内两个对不同数组的访存操作
Figure BDA0002807081050000056
Figure BDA0002807081050000057
不发生多存储体冲突的条件为
Figure BDA0002807081050000058
进一步地,本设计的目标即为选取各数组在片上存储器存储的首地址Ok,尽可能降低在循环内核执行全过程中下式满足的次数。其中,定义两次访问之间的曼哈顿距离为访问索引之间的“距离”,即
Figure BDA0002807081050000059
Figure BDA0002807081050000061
若遍历所有可能的数组偏置组合,算法复杂度将达到Θ(BankNumK)。
优选地,为了高效地得到数组首地址结果,本设计提出的数组起始地址偏置分配算法基于贪婪算法,将算法复杂度降低至Θ(BankNum×K)。该方法能有效地降低多存储体冲突发生次数。
进一步地,访存冲突仅会发生在同一个控制周期的访存操作之间,本编译器使用集合表示同一个控制周期对不同数组的访存。记控制周期r内对数组Ak的访存集合为
Figure BDA0002807081050000062
其中,对同一个数组索引的多次访问不重复记录。类似地,记控制周期r内对所有数组的访存集合为
Figure BDA0002807081050000063
记整个循环内核的访存集合为P={P1,P2,...,PIIcs},IIcs为循环内核的总控制周期数量。
得到整个循环内核的访存集合后,需要计算同一控制周期内对不同数组所有访问间的距离。对于Pr中任意两个不同的集合,依次选取集合中任意两个访问求其距离,并将两访问所属数组偏置Ok以及求得的距离d除BankNum取余之后的结果添加到距离集合D中,距离集合D包含了整个循环内核中可能会发生冲突的非同数组两次访问之间的距离。
得到距离矩阵D后,编译器将根据距离矩阵计算数组起始地址偏置。距离矩阵D之中的所有元素均除BankNum取余,所以数组偏置的选择仅需要选择偏置对BankNum取余之后的值,即选择一个[0,BankNum-1]中的整数值。在冲突次数的表示上,通过观察与推导可以发现,一个n维的线性变换除数取余运算,如(a0i0+a1i1+…an-1in-1+an)%BankNum,随着任意一个迭代变量的变化,结果将以BankNum为周期变化。所以编译器使用[0,BankNum]中的整数值标记循环过程中Bank冲突的次数。即值为0表示从不会出现冲突,值为BankNum表示每一次迭代都会有冲突,
Figure BDA0002807081050000064
表示每p次循环迭代会发生一次冲突。
可选偏置的评分即为选取当前偏置带来的冲突次数的相反数。评分最高的可选偏置即为发生Bank冲突最少的偏置。对于两个数组访问
Figure BDA0002807081050000065
Figure BDA0002807081050000066
首先计算所有系数的非零差值和BankNum的最大公约数g=gcd(a10-a00,a11-a01,...,a1(n-1)-a0(n-1),BankNum),若常数项差值a1n-a0n可以被g整除,则会有冲突发生,且冲突发生的次数为g。冲突矩阵发生的次数将会被存储至冲突矩阵之中。
进一步地,得到的取余后的数组偏置,需要恢复至起始地址。记已分配的数组占据了前Q的位置,则数组Ak在片上存储器的起始地址Ok为:
Figure BDA0002807081050000071
一种访存感知映射方法,作为CGRA编译器一个步骤,当编译器完成对循环内核的调度和起始地址分配后,编译器将分析出同一控制周期内访存操作之间的多存储体冲突,并在映射策略选择过程中,同时考虑多存储体冲突和列访存冲突带来的开销进行决策。
根据多存储体冲突邻接矩阵,编译器将调度结果映射至PEA。如果当前启动间隔为II,则调度的DFG R(V,E)映射到PEA的过程可以表示为寻找II时间扩展CGRA图R{II}(VR,ER)的子图问题。编译器首先为每个操作查找所有候选PE位置槽。一个候选PE位置槽必须有足够的互联资源来放置后继节点和前驱节点。设v为要映射的节点,V{mapped}为已映射的操作集。PE(v)是一个候选PE槽当且仅当下列的式子符合:
Figure BDA0002807081050000073
Figure BDA0002807081050000074
映射过程基于深度优先遍历,每次选取当前算子最优映射的PE,若无可选PE则回退并尝试其他决策。根据硬件资源利用率和潜在的银行冲突,映射操作v到PE p的代价函数为:
cost(v,p)=cost{hw}(v,p)+α×cost{conf}(v,p)
代价函数包括硬件资源成本和冲突成本,其中α是经验确定的权重。设Nv为节点未映射的前驱节点和后继节点的数量,Np为该PE p空闲的的前驱节点和后继节点的数量。
进一步地,如果Nv>Np,那么缺少足够的硬件资源来映射剩余的操作,cost{hw}(v,p)将是无穷大的。如果Nv≤Np,cost{hw}(v,p)的值由
Figure BDA0002807081050000072
计算。
如果在映射过程中某个节点v没有候选PEs,映射算法尝试回溯到可能导致错误的节点u。一旦没有节点可以回溯,当前II下的映射过程将失败,编译器将尝试增加II并重新启动调度和映射。
一种针对粗粒度可重构结构的降低多类访存冲突编译方法,包括上述的访存压力分摊方法、数据的放置方法、访存感知映射方法之中的至少一种方法。
与现有技术相比,本发明的有益效果如下:
1、相比于现有的仅对循环单次迭代分析的基于线性变换的降低多存储体冲突的可重构处理器编译器,本发明提出的数组首地址偏置策略启发性地对整个循环迭代过程进行分析,在有效降低多数组间的多存储体冲突的前提下,能大幅度降低主存利用DMA传递数据至片上存储器的时间代价。
2、相比现有的仅考虑降低多存储体冲突的可重构处理器编译器,本发明提出的访存感知映射同时将Bank冲突和列访存冲突作为策略选取因素,进一步避免访存冲突,带来CGRA上更高的应用加速比。
3、本发明可重构处理器编译器后端流程结构简单,算法复杂度低,编译速度快。
附图说明
图1是现有技术的4x4 CGRA典型构架图;
图2是现有技术的PE结构图;
图3是本申请的实施例的编译流程总览;
图4是本申请的实施例的访存压力分摊策略前后DFG情况;
图5是本申请的实施例的数组起始地址偏置分配策略过程;
图6是本申请的实施例在4x4 PEA上25个kernels下运行时间。
具体实施方式
以下参考说明书附图介绍本申请的优选实施例,使其技术内容更加清楚和便于理解。本申请可以通过许多不同形式的实施例来得以体现,本申请的保护范围并非仅限于文中提到的实施例。
以下将对本发明的构思、具体结构及产生的技术效果作进一步的说明,以充分地了解本发明的目的、特征和效果,但本发明的保护不仅限于此。
本发明基于的硬件结构
本发明旨在对可重构处理器编译器调度和映射过程进行优化,综合考虑访存算子之间的多存储体冲突和互联冲突,提出一种减少循环内核运行过程中发生的访存冲突数量的高性能编译器后端设计。可重构处理器上的PE阵列和片上存储器OMB的连接结构如附图1-2所示。PEA中同一列的PE通过列总线连接到CrossBar,并通过仲裁器连接至多存储体片上存储器,每一个PE上的访存操作通过所连接的列总线访问片上存储器各存储体。若同一控制周期内多个PE对同一个存储体访问请求数据,片上存储器需要花费额外的时间代价依次处理这些PE对该存储体的访存请求,即为多存储体冲突。此外,若同一控制周期内同一列上的PE同时访问片上存储器,互联列总线因带宽限制,需要花费额外的时间代价依次处理该列上PE的访存请求,即为互联冲突,被称为列总线冲突。在发生冲突期间,处理器上PE均处于停顿状态,软流水的循环迭代启动间隔(Initiation Interval,II)的实际时间将会增加。多存储体冲突和列总线冲突两者带来的额外代价中的最大值即为该控制周期访存冲突带来的额外代价。因此,仅针对降低多存储体冲突而不考虑列总线冲突的影响而得到的加速比是有限的。本发明提出的编译器后端控制流,在调度过程中平摊循环内核各控制周期的访存压力,并根据调度结果调整数组存储的起始地址,在映射算子中综合考虑多存储体冲突和列总线冲突以选择具有低访存冲突的决策。
本发明的实施例的编译器后端流程
编译器后端流程如附图3所示,其中301至304为本发明提出的方法,其余步骤为现有技术。301为本发明提出的访存压力分摊策略,在调度完成后,该方法将被用于调整不同子DFG的启动时间。调度完成后,调度结果将会被送入包括302与303的数组起始地址偏置分配策略。302将会通过同一时间内所有的访存操作访问的地址,对不同数组起始地址进行调整,303将会根据数组起始地址调整的结果计算冲突矩阵。304为冲突感知映射算法,将会根据冲突矩阵和当前映射情况将不同操作映射至PE上,重排序和回溯算法确保了映射过程的正确性。
一、访存压力分摊策略
访存压力分摊策略作为编译器后端调度过程中的一个环节,通过适当增加控制周期的数量,并调整DFG内不同子图之间的启动时间,将循环内核中每一个控制周期访存操作数量尽可能降低,以减少每一个控制周期内发生访存冲突的可能性,从而提升可重构处理器应用加速比。首先如果DFG有多个子图构成,则对不同的II下的DFG进行子图启动时间调整。编译器后端对DFG中位于不同控制周期中的节点数量和访存节点数量计数。通过贪婪算法调整不同子图的启动时间,在放置每一个子图时,尽可能将节点数量和访存节点数量平均地分配到不同的控制周期中。该算法优先以分摊访存节点操作数量为目的,若当前策略得到的结果不满足每个控制周期内的节点数量限制,则算法在分配启动时间时会同时考虑分摊节点数量和访存节点操作数量,以在保证单控制周期内节点数量约束下,尽可能分摊访存压力。附图4给出例子,附图4(a)是原始的DFG,其中每个节点表示了一个运算操作,标注为L和S的节点表示读取和存储访问片上存储器操作,位于同一行的节点将会在同一时间内执行。附图4(b)是经过访存压力分摊策略后的结果,DFG中的第二棵子树整体延后了一个周期执行,使得访存操作数量在各周期数量上得到了平均。
考虑到适当增加控制周期,被分摊到每一个控制周期的访存操作数量将会进一步降低,多存储体冲突和列冲突发生的可能性也将会降低,从而整体的运行时间可能会减少。经测试,最优运行时间出现在最小控制周期数量和控制周期数量增加一个周期两种情况之中,所以取两次运行最优结果作为最终所选用的配置信息。
二、数组起始地址偏置分配策略
传统的基于线性变换的数据放置策略会同时对片上存储器存储体数量,线性变换系数进行调整以降低多存储体冲突。利用这些方法得到的片上数据排布,需要将主存中连续存放的数据分散放置到片上存储器中的不同位置,这将难以发挥DMA连续数据传输上的速度优势,进而增加了主存传输数据至片上存储器的传输代价。为了解决这个问题,本设计在数据的放置问题上,固定存储体数量,不进行线性变换,仅通过调整数组起始地址来降低多存储体冲突。
本设计使用数列表示访存操作对不同数组的访问。对于不同维度的数组,其在存储器中均以一维数组的方式存储,本设计调整数组起始位置的策略不受数组维度的影响,因此后续分析均对一维数组展开。设循环内核访存的数组数量为K,数组名记为A1,A2,...,AK。当控制周期为r时,对第k个数组Ak中位置为Ak[a0i0+a1i1+…an-1in-1+an]元素的访存被记作
Figure BDA0002807081050000101
的向量形式。其中i0,i1,...,in-1为循环索引,a0,a1,...,an-1为线性变换系数。例如:在控制周期为2时访问Ak[2i0+3i1+1],访存可以被记作
Figure BDA0002807081050000102
的向量形式。
本设计中数组Ak的所有元素将会被放置到片上存储器首地址为Ok的位置,因此对数组Ak的访存操作
Figure BDA0002807081050000103
所访问的片上存储器Bank编号
Figure BDA0002807081050000104
如下所示。其中BankNum为片上存储器存储体数量。
Figure BDA0002807081050000105
同一控制周期内两个对不同数组的访存操作
Figure BDA0002807081050000106
Figure BDA0002807081050000107
不发生多存储体冲突的条件为
Figure BDA0002807081050000108
将该条件展开化简,得到下式。本设计的目标即为选取各数组在片上存储器存储的首地址Ok,尽可能降低在循环内核执行全过程中下式满足的次数。其中,定义两次访问之间的曼哈顿距离为访问索引之间的“距离”,即
Figure BDA0002807081050000109
Figure BDA00028070810500001010
若遍历所有可能的数组偏置组合,算法复杂度将达到Θ(BankNumK)。为了高效地得到数组首地址结果,本设计提出的数组起始地址偏置分配算法基于贪婪算法,将算法复杂度降低至Θ(BankNum×K)。该方法能有效地降低多存储体冲突发生次数。
访存冲突仅会发生在同一个控制周期的访存操作之间,本编译器使用集合表示同一个控制周期对不同数组的访存。记控制周期r内对数组Ak的访存集合为
Figure BDA00028070810500001011
其中,对同一个数组索引的多次访问不重复记录。类似地,记控制周期r内对所有数组的访存集合为
Figure BDA00028070810500001012
记整个循环内核的访存集合为P={P1,P2,...,PIIcs},IIcs为循环内核的总控制周期数量。
得到整个循环内核的访存集合后,需要计算同一控制周期内对不同数组所有访问间的距离。对于Pr中任意两个不同的集合,依次选取集合中任意两个访问求其距离,并将两访问所属数组偏置Ok以及求得的距离d除BankNum取余之后的结果添加到距离集合D中,距离集合D包含了整个循环内核中可能会发生冲突的非同数组两次访问之间的距离。
得到距离矩阵D后,编译器将根据距离矩阵计算数组起始地址偏置。距离矩阵D之中的所有元素均除BankNum取余,所以数组偏置的选择仅需要选择偏置对BankNum取余之后的值,即选择一个[0,BankNum-1]中的整数值。在冲突次数的表示上,通过观察与推导可以发现,一个n维的线性变换除数取余运算,如(a0i0+a1i1+…an-1in-1+an)%BankNum,随着任意一个迭代变量的变化,结果将以BankNum为周期变化。所以编译器使用[0,BankNum]中的整数值标记循环过程中Bank冲突的次数。即值为0表示从不会出现冲突,值为BankNum表示每一次迭代都会有冲突,
Figure BDA0002807081050000111
表示每p次循环迭代会发生一次冲突。可选偏置的评分即为选取当前偏置带来的冲突次数的相反数。评分最高的可选偏置即为发生Bank冲突最少的偏置。对于两个数组访问
Figure BDA0002807081050000112
Figure BDA0002807081050000113
首先计算所有系数的非零差值和BankNum的最大公约数g=gcd(a10-a00,a11-a01,...,a1(n-1)-a0(n-1),BankNum),若常数项差值a1n-a0n可以被g整除,则会有冲突发生,且冲突发生的次数为g。冲突矩阵发生的次数将会被存储至冲突矩阵之中。
对于一个实际应用中的循环内核的一次数组偏置选取过程展示在附图5之中。附图5(a)是一个循环深度为2的一个完美嵌套循环,在一次迭代中存在4个读取操作和1个存储操作,包含了对数组a和b的访问;附图5(b)是循环内核经过调度和访存压力分摊策略之后的DFG,其中标注了LD的节点指示出了读取的位置,SD标记出了存储的位置,其他Sll和Xor节点均为正常操作;附图5(c)是使用算法得到的当数组a首地址偏置为0时,将数组b的首地址偏置设置为不同值时的多存储体冲突次数,计算结果显示当选取两个数组的偏置差值为1时,可以避免多存储体冲突的发生;附图5(d)是原始和调整偏置之后各周期下访存冲突情况对比,其中标注出来的数据表示在该次循环迭代下将会有冲突发生。通过算法避免了所有可能发生的多存储体冲突。
得到的取余后的数组偏置,需要恢复至起始地址。记已分配的数组占据了前Q的位置,则数组Ak在片上存储器的起始地址Ok为:
Figure BDA0002807081050000114
三、访存感知映射算法
当编译器完成对循环内核的调度和起始地址分配后,编译器将分析出同一控制周期内访存操作之间的多存储体冲突,并在映射策略选择过程中,同时考虑多存储体冲突和列访存冲突带来的开销进行决策。
根据多存储体冲突邻接矩阵,编译器将调度结果映射至PEA。如果当前启动间隔为II,则调度的DFG R(V,E)映射到PEA的过程可以表示为寻找II时间扩展CGRA图R{II}(VR,ER)的子图问题。编译器首先为每个操作查找所有候选PE位置槽。一个候选PE位置槽必须有足够的互联资源来放置后继节点和前驱节点。设v为要映射的节点,V{mapped}为已映射的操作集。PE(v)是一个候选PE槽当且仅当下列的式子符合:
Figure BDA0002807081050000121
Figure BDA0002807081050000122
映射过程基于深度优先遍历,每次选取当前算子最优映射的PE,若无可选PE则回退并尝试其他决策。根据硬件资源利用率和潜在的银行冲突,映射操作v到PE p的代价函数为:
cost(v,p)=cost{hw}(v,p)+α×cost{conf}(v,p)
代价函数包括硬件资源成本和冲突成本,其中α是经验确定的权重。设Nv为节点未映射的前驱节点和后继节点的数量,Np为该PE p空闲的的前驱节点和后继节点的数量。如果Nv>Np,那么缺少足够的硬件资源来映射剩余的操作,cost{hw}(v,p)将是无穷大的。如果Nv≤Np,cost{hw}(v,p)的值由
Figure BDA0002807081050000123
计算。
下面的算法Calculate Conflict Cost显示了cost{conf}(v,p)的计算过程,该算法在同时考虑银行冲突和列总线冲突的情况下计算每个操作的执行时间,计算将操作v映射至PEp上的代价。算法迭代地遍历每一个PE,如果当前PE上存在已经被放置的节点,那么则计算该运算节点与已放置节点的多存储体冲突和列总线冲突。最终该节点的发射时间则为以上两种冲突的最大值。该算法综合考虑了银行冲突和互联资源利用率不平衡引起的冲突,比仅考虑单一冲突取得了更好的性能。
Figure BDA0002807081050000131
编译器通过上述算法计算所有不同映射策略的代价,选择代价最低的候选PEs,直到D(V,E)中的所有操作都映射到R{II}(VR,ER)上。如果在映射过程中某个节点v没有候选PEs,映射算法尝试回溯到可能导致错误的节点u。一旦没有节点可以回溯,当前II下的映射过程将失败,编译器将尝试增加II并重新启动调度和映射。
四、结果评估
利用针对CGRA结构设计实现的仿真环境,测试集成了本发明提出的访存压力分摊策略、数组起始地址偏置分配策略和映射策略的可重构编译器在25个典型计算密集型应用测试集。结果显示本发明生成的配置信息可以获得平均37.1%的性能提升。附图6展示了集成本发明的模调度编译器和原始编译器生成的配置包性能比较。说明本发明所述方案较已有方案可以有效提升粗粒度可重构架构编译器生成的配置信息包的性能,并能降低主从端数据传输时间,从而提高可重构处理器应用加速比。
以上详细描述了本申请的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本申请的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本申请的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

Claims (7)

1.一种访存压力分摊方法,作为CGRA编译器后端调度过程中的一个步骤,其特征在于,通过增加控制周期的数量,并调整DFG内不同子图之间的启动时间,将循环内核中每一个控制周期访存操作数量降低,减少每一个控制周期内发生访存冲突的可能性,提升可重构处理器应用加速比;
编译器后端对DFG中位于不同控制周期中的节点数量和访存节点数量计数,通过贪婪算法调整不同子图的启动时间,在放置每一个子图时,将节点数量和访存节点数量平均地分配到不同的控制周期中;
在当前策略得到的结果不满足每个控制周期内的节点数量限制的情况下,算法在分配启动时间时同时考虑分摊节点数量和访存节点操作数量,在保证单控制周期内节点数量约束下,分摊访存压力。
2.一种数据放置方法,作为CGRA编译器后端处理的一个步骤,其特征在于,固定存储体数量,不进行线性变换,仅通过调整数组起始地址来降低多存储体冲突;
同一控制周期内两个对不同数组的访存操作
Figure FDA0003612154660000011
Figure FDA0003612154660000012
不发生多存储体冲突的条件为:
Figure FDA0003612154660000013
其中,循环内核访存的数组数量为K,数组名记为A1,A2,…,AK,当控制周期为r时,对第k个数组Ak中位置为Ak[a0i0+a1i1+…an-1in-1+an]元素的访存被记作
Figure FDA0003612154660000014
的向量形式,i0,i1,…,in-1为循环索引,a0,a1,…,an-1为线性变换系数;
对数组Ak的访存操作
Figure FDA0003612154660000015
所访问的片上存储器Bank编号
Figure FDA0003612154660000016
如下所示,
Figure FDA0003612154660000017
数组Ak的所有元素将会被放置到片上存储器首地址为Ok的位置,BankNum为片上存储器存储体数量;
已分配的数组占据了前Q的位置,则数组Ak在片上存储器的起始地址Ok为:
Figure FDA0003612154660000018
3.如权利要求2的数据放置方法,其特征在于,其目标为选取各数组在片上存储器存储的首地址Ok,降低在循环内核执行全过程中下式满足的次数,其中,定义两次访问之间的曼哈顿距离为访问索引之间的距离,即
Figure FDA0003612154660000021
Figure FDA0003612154660000022
在遍历所有数组偏置组合情况下,算法复杂度达到Θ(BankNumK)。
4.如权利要求3的数据放置方法,其特征在于,选取各数组在片上存储器存储的首地址Ok时基于贪婪算法,算法复杂度降低至Θ(BankNum×K)。
5.一种访存感知映射方法,作为CGRA编译器后端处理的一个步骤,其特征在于,当编译器完成对循环内核的调度和起始地址分配后,编译器分析出同一控制周期内访存操作之间的多存储体冲突,并在映射策略选择过程中,同时考虑多存储体冲突和列访存冲突带来的开销进行决策;当前启动间隔为II,调度的DFG R(V,E)映射到PEA的过程表示为寻找II时间扩展CGRA图R{II}(VR,ER)的子图问题;
编译器首先为每个操作查找所有候选PE位置槽,设v为要映射的节点,V{mapped}为已映射的操作集,PE(v)是一个候选PE槽当且仅当下列的式子符合:
Figure FDA0003612154660000024
Figure FDA0003612154660000025
映射过程基于深度优先遍历,每次选取当前算子最优映射的PE;根据硬件资源利用率和潜在的银行冲突,映射操作v到PE p的代价函数为:
cost(v,p)=cost{hw}(v,p)+α×cost{conf}(v,p)
代价函数包括硬件资源成本和冲突成本,其中α是经验确定的权重;
设Nv为节点未映射的前驱节点和后继节点的数量,Np为该PE p空闲的前驱节点和后继节点的数量;当Nv>Np时,缺少足够的硬件资源来映射剩余的操作,cost{hw}(v,p)是无穷大的;当Nv≤Np时,cost{hw}(v,p)的值由
Figure FDA0003612154660000023
计算;
cost{conf}(v,p)的计算过程,在同时考虑银行冲突和列总线冲突的情况下计算每个操作的执行时间,计算将操作v映射至PE p上的代价;迭代地遍历每一个PE,如果当前PE上存在已经被放置的节点,那么则计算运算节点与已放置节点的多存储体冲突和列总线冲突;最终节点的发射时间则为以上两种冲突的最大值;编译器计算所有不同映射策略的代价,选择代价最低的候选PEs,直到D(V,E)中的所有操作都映射到R{II}(VR,ER)上。
6.如权利要求5所述的访存感知映射方法,其特征在于,当在映射过程中某个节点v没有候选PEs时,映射算法尝试回溯到导致错误的节点u,当没有节点可以回溯时,当前启动间隔II下的映射过程失败,编译器增加II并重新启动调度和映射。
7.一种针对粗粒度可重构结构的降低多类访存冲突编译方法,其特征在于,包括访存压力分摊方法、数据放置方法、访存感知映射方法之中的至少一种方法;
所述访存压力分摊方法是指如权利要求1所述的访存压力分摊方法;
所述数据放置方法是指如权利要求2-4任一所述的数据放置方法;
所述访存感知映射方法是指如权利要求5-6任一所述的访存感知映射方法。
CN202011375400.2A 2020-11-30 2020-11-30 一种针对粗粒度可重构结构的降低多类访存冲突编译方法 Active CN112306500B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011375400.2A CN112306500B (zh) 2020-11-30 2020-11-30 一种针对粗粒度可重构结构的降低多类访存冲突编译方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011375400.2A CN112306500B (zh) 2020-11-30 2020-11-30 一种针对粗粒度可重构结构的降低多类访存冲突编译方法

Publications (2)

Publication Number Publication Date
CN112306500A CN112306500A (zh) 2021-02-02
CN112306500B true CN112306500B (zh) 2022-06-07

Family

ID=74487454

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011375400.2A Active CN112306500B (zh) 2020-11-30 2020-11-30 一种针对粗粒度可重构结构的降低多类访存冲突编译方法

Country Status (1)

Country Link
CN (1) CN112306500B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220244870A1 (en) * 2021-02-03 2022-08-04 Alibaba Group Holding Limited Dynamic memory coherency biasing techniques
CN113450863A (zh) * 2021-07-09 2021-09-28 上海交通大学 一种对抗阻变对称存储器硬失效错误的方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102508816A (zh) * 2011-11-15 2012-06-20 东南大学 一种应用于粗粒度可重构阵列的配置方法
CN103116493A (zh) * 2013-01-21 2013-05-22 东南大学 一种应用于粗粒度可重构阵列的自动映射方法
CN103927270A (zh) * 2014-02-24 2014-07-16 东南大学 一种面向多个粗粒度动态可重构阵列的共享数据缓存装置及控制方法
KR20150040663A (ko) * 2013-10-07 2015-04-15 삼성전자주식회사 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
CN105867994A (zh) * 2016-04-20 2016-08-17 上海交通大学 一种用于粗粒度可重构架构编译器的指令调度优化方法
CN109471636A (zh) * 2018-09-14 2019-03-15 上海交通大学 粗粒度可重构体系结构的算子映射方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0605349D0 (en) * 2006-03-17 2006-04-26 Imec Inter Uni Micro Electr Reconfigurable multi-processing coarse-grain array
CN102508712B (zh) * 2011-09-29 2014-01-15 中国科学技术大学苏州研究院 异构多核可重构混合系统中的中间件系统及任务执行方法
CN103914429B (zh) * 2014-04-18 2016-11-23 东南大学 用于粗粒度动态可重构阵列的多模式数据传输互连器
CN104615474B (zh) * 2014-09-02 2018-06-22 清华大学 用于粗粒度可重构处理器的编译优化方法
US10528356B2 (en) * 2015-11-04 2020-01-07 International Business Machines Corporation Tightly coupled processor arrays using coarse grained reconfigurable architecture with iteration level commits
CN117271392A (zh) * 2017-08-03 2023-12-22 涅克斯硅利康有限公司 用于缓存一致性的可重构的缓存架构及方法
CN109522254B (zh) * 2017-10-30 2022-04-12 上海寒武纪信息科技有限公司 运算装置及方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102508816A (zh) * 2011-11-15 2012-06-20 东南大学 一种应用于粗粒度可重构阵列的配置方法
CN103116493A (zh) * 2013-01-21 2013-05-22 东南大学 一种应用于粗粒度可重构阵列的自动映射方法
KR20150040663A (ko) * 2013-10-07 2015-04-15 삼성전자주식회사 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
CN103927270A (zh) * 2014-02-24 2014-07-16 东南大学 一种面向多个粗粒度动态可重构阵列的共享数据缓存装置及控制方法
CN105867994A (zh) * 2016-04-20 2016-08-17 上海交通大学 一种用于粗粒度可重构架构编译器的指令调度优化方法
CN109471636A (zh) * 2018-09-14 2019-03-15 上海交通大学 粗粒度可重构体系结构的算子映射方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于粗粒度可重构处理器的任务映射技术研究;袁开坚;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20190115(第01期);第I137-98页 *

Also Published As

Publication number Publication date
CN112306500A (zh) 2021-02-02

Similar Documents

Publication Publication Date Title
US8516454B2 (en) Efficient parallel computation of dependency problems
US9032377B2 (en) Efficient parallel computation of dependency problems
Chatarasi et al. Marvel: A data-centric approach for mapping deep learning operators on spatial accelerators
CN112306500B (zh) 一种针对粗粒度可重构结构的降低多类访存冲突编译方法
Yin et al. Conflict-free loop mapping for coarse-grained reconfigurable architecture with multi-bank memory
US6324629B1 (en) Method for determining an optimized data organization
Liu et al. OBFS: OpenCL based BFS optimizations on software programmable FPGAs
Zhang et al. A data layout optimization framework for nuca-based multicores
US20090064120A1 (en) Method and apparatus to achieve maximum outer level parallelism of a loop
WO2022068205A1 (zh) 数据存储和读取方法及系统
Anbar et al. Exploiting hierarchical locality in deep parallel architectures
CN105260222A (zh) 一种可重构编译器中循环流水迭代间启动间距优化方法
Tanase et al. Performance Analysis of the IBM XL UPC on the PERCS Architecture
Yin et al. Joint loop mapping and data placement for coarse-grained reconfigurable architecture with multi-bank memory
CN109522127A (zh) 一种基于gpu的流体机械仿真程序异构加速方法
Koike et al. A novel computational model for GPUs with applications to efficient algorithms
Zhang et al. Yuenyeungsptrsv: a thread-level and warp-level fusion synchronization-free sparse triangular solve
CN112631610B (zh) 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
Ben-Asher et al. Using memory profile analysis for automatic synthesis of pointers code
Kandemir Lods: Locality-oriented dynamic scheduling for on-chip multiprocessors
Capocotta Aggregation engine for Graph Neural Networks
Shivdikar et al. NeuraChip: Accelerating GNN Computations with a Hash-based Decoupled Spatial Accelerator
Malith et al. NeuraChip: Accelerating GNN Computations with a Hash-based Decoupled Spatial Accelerator
Khouri et al. Memory binding for performance optimization of control-flow intensive behavioral descriptions
Gao et al. FastRW: A Dataflow-Efficient and Memory-Aware Accelerator for Graph Random Walk on FPGAs

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
GR01 Patent grant
GR01 Patent grant