CN105302624A - 一种可重构编译器中循环流水迭代间启动间距自动分析方法 - Google Patents

一种可重构编译器中循环流水迭代间启动间距自动分析方法 Download PDF

Info

Publication number
CN105302624A
CN105302624A CN201510593950.4A CN201510593950A CN105302624A CN 105302624 A CN105302624 A CN 105302624A CN 201510593950 A CN201510593950 A CN 201510593950A CN 105302624 A CN105302624 A CN 105302624A
Authority
CN
China
Prior art keywords
loop
iteration
iterations
raw
starting
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
CN201510593950.4A
Other languages
English (en)
Other versions
CN105302624B (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 CN201510593950.4A priority Critical patent/CN105302624B/zh
Publication of CN105302624A publication Critical patent/CN105302624A/zh
Application granted granted Critical
Publication of CN105302624B publication Critical patent/CN105302624B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种可重构编译器中循环流水迭代间启动间距自动分析方法。对计数类循环进行循环流水迭代间启动间距信息模型的构建;将计数类循环的代码转换成SCoPs数据结构形式;根据计数类循环程序的SCoPs数据结构,进行循环流水迭代间写后读RAW数据依赖关系分析,得到RAW_DDA模型描述的计数类循环程序的RAW数据依赖关系分析结果RAW_DDA;基于计数类循环程序的RAW_DDA模型,进行循环流水迭代间启动间距的自动分析,得到循环流水迭代间非固定启动间距模型NF_II描述的启动间距自动分析结果。本发明能够减少循环流水执行时迭代间启动等待延时,具有通用性。

Description

一种可重构编译器中循环流水迭代间启动间距自动分析方法
技术领域
本发明属于可重构计算领域,尤其涉及一种可重构编译器中循环流水迭代间启动间距自动分析方法。
背景技术
目前,在研究多层循环到并行流水硬件结构自动映射时,主要包括:(1)以CGRA为代表面向粗粒度可重构硬件平台的循环流水硬件结构映射,通过函数级程序特征分析实现循环到固定流水硬件模板结构的映射,可以简化循环映射的复杂度,但是限制了循环程序对可重构平台的通用性;(2)以Xilinx提出的VivadoHLS(HighLevelSynthesis,高层次综合工具)为代表的细粒度可重构编译工具,通过循环程序特征分析,完成循环程序到异构加速平台的指令级映射,与粗粒度可重构编译器相比,指令级硬件映射具备更广泛的通用性和推广意义。
目前,GarpCC编译器中采用IMS(RausIterativeModuloScheduling)调度算法实现循环流水的控制映射,但是只对最内层循环进行流水控制;XPP中采用流水向量化方法,但是不能处理循环体间RAW数据依赖关系引起的非最内层循环迭代间流水启动间距问题;VivadoHLS、ROCCC、ImpulseC等HLS工具在实现多层循环到流水并行FPGA硬件结构映射时,均采用语句制导方式进行迭代间流水启动间距控制,即在源程序C代码循环中手动插入类似#pragmaII=xx的制导语句,控制循环映射成流水并行硬件结构之后迭代间启动间距的生成。该方式只能针对每层循环生成固定值的迭代间启动间距,同时在使用可重构编译器进行可重构计算应用部署时需要反复迭代综合仿真过程才能确定最终合适的迭代间流水启动间距值,并且没有提出自动化分析和相关优化方法,极大地制约了可重构计算应用的部署效率,同时会影响细粒度可重构编译器在工业界的推广。
正是基于以上问题,本发明提出了一种可重构编译器中循环流水迭代间启动间距自动分析方法,并在基于ARM-FPGA异构加速平台的细粒度可重构编译器ASCRA上展开相关设计与验证。ASCRA(Application-SpecificCompilerforReconfigurableArchitecture)是基于开源编译框架LLVM源码基础上进行开发,不仅在细粒度可重构编译器中实现循环程序流水硬件结构映射时启动间距分析的自动化,提高了可重构计算应用的部署效率,还能够有效降低循环程序在FPGA硬件上流水执行时因为RAW依赖关系产生的启动间距时钟等待延时,提高了循环程序流水执行的性能。
发明内容
本发明的目的是提供一种能够减少循环流水执行时迭代间启动等待延时的,可重构编译器中循环流水迭代间启动间距自动分析方法。
一种可重构编译器中循环流水迭代间启动间距自动分析方法,包括以下步骤,
步骤一:对计数类循环进行循环流水迭代间启动间距信息模型的构建,其中循环流水迭代间启动间距信息模型包括SCoPs数据结构、RAW_DDA模型和非固定启动间距模型NF_II;
步骤二:将计数类循环的代码转换成SCoPs数据结构形式;
步骤三:根据计数类循环程序的SCoPs数据结构,进行循环流水迭代间写后读RAW数据依赖关系分析,得到RAW_DDA模型描述的计数类循环程序的RAW数据依赖关系分析结果RAW_DDA;
步骤四:基于计数类循环程序的RAW_DDA模型,进行循环流水迭代间启动间距的自动分析,得到循环流水迭代间非固定启动间距模型NF_II描述的启动间距自动分析结果,得到启动间距向量
II r → = ( II p r , II p r + θ r , ... , II pr + k · θ r , II pr + ( k + 1 ) · θ r , . . . , II qr )
d e l a y ( s t m t ( I r &RightArrow; ) ) = &delta; r = m T ( L o o p ( r + 1 ) ) + &delta; r < m
T ( L o o p ( r ) ) = &Sigma; k = 0 ( q m - p m ) / &theta; m II k II k &Element; II m &RightArrow; , r = m &Sigma; k = 0 ( q m - p m ) / &theta; m ( T ( L ( r + 1 ) ) + II k ) II k &Element; II m &RightArrow; , 1 < r < m
II I m = 0 , I m = p m 1 , I m &NotEqual; p m
其中,表示循环体中迭代点Ir=pr+k·θr与Ir=pr+(k+1)·θr之间的启动间距;delay表示依赖关系next在循环Loop(r)中循环体迭代之间时钟延时;T(Loop(r+1))表示在循环Loop(r)中索引变量为Ir时循环Loop(r+1)流水执行时的时钟周期。
本发明一种可重构编译器中循环流水迭代间启动间距自动分析方法还可以包括:
1、计数类循环为:索引变量向量其中m为多层循环的最大深度;Loop(r)表示索引变量为Ir的循环,其中1≤r≤m,循环体用表示,表示循环体由索引向量控制,索引变量Ir=(pr,qrr),其中,pr和qr分别表示索引变量Ir的初值和终值,且是(I1,I2,...,Ir-1)的整值函数,θr表示循环变量Ir的增量且θr为常数。
2、SCoPs数据结构表示为:SCoPs由context和一系列声明statement构成一个二元组<Context,[Statement]>,其中context是SCoP约束参数的集合;每个声明statement都是一个四元组<Name,Domain,Schedule,[Access]>,Statement的单位是多层循环Loop中循环体其中1≤r≤m,其中Name表示声明statement的名称;Domain是声明的迭代域,表示一个statement在多层循环中的多维迭代空间域;Schedule是多维空间中迭代向量的整型映射,表示迭代空间中statement的迭代向量;[Access]是声明中对数组元素的访存操作集合,主要包括读、写、读写三种。
3、RAW_DDA模型是指:RAW_DDA=(statement,I,[Array],[NEXT]),其中RAW_DDA表示循环流水迭代间数据依赖关系分析结果,statement表示多层循环程序中的一个循环体的声明;I表示循环体索引变量Ir,1≤r≤m;[Array]是与索引变量Ir相关的RAW数据依赖关系的数组集合,用Array(Ir)表示;[NEXT]表示statement声明中所有迭代间RAW数据依赖关系集合,NEXT(Array(Ir))表示Array(Ir)中单个数组所引起的RAW数据依赖关系集合,其中NEXT是一个三元组(next,δ,Δ),其中δ表示迭代间RAW数据依赖关系的依赖距离,Δ表示依赖关系next在循环体中跨过的流水段延时。
4、非固定启动间距模型NF_II是指:多层循环中循环体迭代间启动间距信息用二维向量表示,1≤r≤m,其中表示循环体在索引变量Ir控制下流水启动时的延时向量,即循环体在迭代空间中迭代点(I1,I2,...,Ir,...,Im)与(I1,I2,...,Irr,...,Im)之间的启动延时按照字典顺序生成的迭代间启动间距向量。
有益效果:
现有细粒度可重构编译器采用指导语句方式生成迭代间固定启动间距,对于多层循环中不同深度的循环Loop(r)所对应的启动间距模型可以表示成一个一维向量,如公式所示,其中1≤r≤n。
I I &RightArrow; = ( II 1 , II 2 , ... , II r , ... , II m )
假设所有循环体的启动时间单位都是t,则在采用指导语句生成固定启动间距方式的流水硬件结构中,循环体相邻迭代之间等待时间II_Time。而采用非固定启动间距控制方式生成的流水硬件结构中,相邻迭代之间的等待时间NF_II_Time。
I I _ T i m e = &Pi; r = 1 m ( II r * ( ( q r - p r ) / &theta; r ) )
N F _ I I _ T i m e = &Pi; r = 1 m ( &Sigma; k = 0 ( q r - p r ) / &theta; r II p r + k * &theta; r )
在细粒度可重构编译器中,制导语句控制生成的固定启动间距模型中,手动设计的固定启动间距IIr最佳值为非固定启动间距向量中的最大值,其中k是正整数。
II r = m a x ( II p r , II p r + &theta; r , ... , II p r + k * &theta; r , ... , II q r )
可证明得出采用非固定启动间距方式能够减少多层循环流水执行时循环体每次迭代启动等待时间,如所示。
II_Time≥NF_II_Time
由上可得知,采用本发明所提出的方法,能够有效的减少循环流水执行时迭代间启动等待延时时间,从而提高循环程序流水执行时的性能。通过循环流水启动间距自动分析方法可以得到更精准的循环性能评估结果,实现更高效的软硬件自动划分方法,同时在硬件代码自动映射过程中,能够提高可重构计算应用到高性能循环硬件电路结构的部署效率,提高细粒度可重构编译器的效率和推广。
附图说明
图1为嵌套循环及N=5时带依赖关系的迭代域;图1(a)为一个典型外层循环迭代间数据相关的嵌套循环;图1(b)为当N=5时循环体的迭代域及迭代间的RAW数据依赖关系;
图2为N=5,II=3时循环流水运行时空图;
图3为N=5时变启动间距循环流水运行时空图;
图4为ASCRA系统架构图;
图5为计数类多层循环伪代码描述;
图6为计数类循环伪代码递归描述;
图7为计数类多层循环示例代码;
图8为示例代码的SCoPs结构。
具体实施方式
下面将结合附图对本发明做进一步详细说明。
在可重构混合计算系统中,由于FPGA的可定制性及硬件结构不确定性,导致无法直接利用通用计算机系统结构中所设计的软件流水技术实现多层循环迭代间变启动间距控制。现有细粒度可重构编译器在实现循环流水并行硬件结构映射时,主要采用语句制导的方法实现迭代间流水启动间距的生成,为了体现本发明内容比现有可重构编译器在多层循环流水迭代间启动间距实现方式上的改进之处,本部分采用一个多层嵌套循环的实例描述问题所在。
如附图1(a)所示,显示了一个典型外层循环迭代间数据相关的嵌套循环,当N=5时循环体的迭代域及迭代间的RAW数据依赖关系如附图1(b)所示。细粒度可重构编译器在实现该嵌套循环到可重构混合计算平台流水并行硬件结构自动映射时,将最内层循环体映射成为一个处理单元(PE,ProcessElement),循环控制语句映射成为一个控制单元(CU,ControlUnit),实现对每次迭代启动和结束时间的控制,循环流水控制单元的自动映射需要可重构编译器能够采用自动分析算法获得每次迭代之间的启动间距信息。现有细粒度可重构编译器皆采用语句制导方式人工指定迭代间启动间距约束条件,例如,Xilinx提供的VivadoHLS在实现附图1(a)嵌套循环的流水并行硬件结构映射时,通过数次综合和仿真迭代,根据附图1(b)迭代域中迭代体间RAW数据依赖关系可以得到如附图2所示的循环运行时空图,由迭代点(3,0)与迭代点(4,0)之间的RAW依赖关系约束条件(如附图2中黑色箭头所示)选择索引变量i确定的循环体迭代间最佳启动间距#pragmaII=3,通过这种指导语句的方式只能确定固定的启动间距大小。
通过分析附图2所示时空图,可以发现图中灰色箭头所代表的RAW数据依赖关系所引起的迭代间启动间距可以进行优化,通过对其启动间距进行手动优化后可以得到附图3所示的循环流水运行时空图,外层循环迭代间启动间距由固定II=3变成非固定的启动间距向量对多层循环外层循环迭代间采用非固定启动间距方式执行过程进行分析,可以得到采用非固定启动间距策略能够提高循环程序硬件使用率13.7%,减少循环执行时钟周期19%。
通过分析细粒度可重构编译器中采用指导语句生成固定启动间距和非固定启动间距两种循环迭代间流水控制策略,可以发现非固定启动间距控制策略能够更好地提高循环流水的性能。但是,按照指导语句方式在细粒度可重构编译器中实现非固定启动间距控制方式对于用户来说是非常困难的,针对每个多层循环应用程序都需要根据迭代间依赖关系手动分析得到非固定值的启动间距向量,这种工作量对于用户来说是不可接受的。另外,在细粒度可重构编译器中采用指导语句方式属于手动分析出迭代间最佳启动间距的方法,会在很大程度上由于用户没有得到最佳的启动间距而无法提高循环程序映射生成更加的硬件结构,从而无法得到良好的加速效果。这就迫切需要在细粒度可重构编译器中设计并实现一种能够自动得到迭代间启动间距的方法。
针对这一现状,在细粒度可重构编译器ASCRA中,本发明提出了一种循环流水迭代间启动间距自动分析方法,如附图4所示。本发明通过建立循环迭代间启动间距分析模型,并在该分析模型的基础上设计实现自动分析算法,该算法理论上可以有效改善可重构编译器对可重构计算应用的部署效率,还能有效提高循环流水硬件结构的性能,其中循环流水启动间距分析模型由四部分组成:
1)计数类多层循环
定义:索引变量向量其中m为多层循环的最大深度;Loop(r)表示索引变量为Ir的循环,其中1≤r≤m,循环体用表示,表示循环体由索引向量控制,索引变量Ir=(pr,qrr),其中,pr和qr分别表示索引变量Ir的初值和终值,且是(I1,I2,...,Ir-1)的整值函数,θr表示循环变量Ir的增量且θr为常数。
为了建立循环流水启动间距信息模型,需要将附图5所描述的多层循环Loop抽象成如附图6所示多个单层循环递归表示的形式。其中Loop(m)表示最内层循环。
在细粒度可重构编译器ASCRA中是对中间代码IR进行数据依赖关系分析,将附图5所示的高级语言描述形式转换成LLVM能够进行分析的数据结构,通过LLVMPASS将多层循环描述成一种抽象语法树(AbstractSyntaxtree,AST),筛选符合定义1)中所描述限制条件的计数类多层循环,实现附图5到附图6循环表示形式的抽象表示。
2)SCoPs
在本发明中用SCoPs(StaticControlParts)描述计数类多层循环模型中AST数据结构,其定义如下:
SCoPs由context和一系列声明statement构成一个二元组<Context,[Statement]>。其中context是SCoP约束参数的集合;每个声明statement都是一个四元组<Name,Domain,Schedule,[Access]>,Statement的单位是多层循环Loop中循环体其中1≤r≤m,其中Name表示声明statement的名称,是声明的唯一标识符;Domain是声明的迭代域,表示一个statement在多层循环中的多维迭代空间域,限制了statement的迭代范围;Schedule是多维空间中迭代向量的整型映射,表示迭代空间中statement的迭代向量;[Access]是声明中对数组元素的访存操作集合,主要包括读、写、读写三种。
本发明提出的SCoPs数据结构基于LLVM开发的多面体模型分析程序开源软件Polly进行设计,由于其能够准确的对不同深度循环体中数组元素访存操作进行描述,有利于对计数类多层循环迭代间的数据依赖关系进行精确分析。例如,附图7中所示的多层循环可以用附图8所示SCoPs表示,其中,循环Loop(i)中的循环体stmt(i)=Loop(j),所以Statement只描述了的声明,
利用得到的SCoPs数据结构可以进行循环体迭代间数据依赖关系分析,本发明基于改进后的ISL数据流分析方法,可以得到写后读(readafterwrite,RAW)、写后写(writeafterwrite,WAW)、读后写(writeafterread,WAR)三种数据依赖关系。通过研究可以得出,在细粒度可重构编译器中进行多层循环映射到流水硬件结构时,WAW和WAR数据依赖关系影响并行存储体系结构的设计,而RAW数据依赖关系会影响到迭代间启动间距,因此本发明只考虑RAW数据依赖关系分析结果。
3)RAW_DDA模型
在本发明中RAW_DDA模型用于描述RAW数据依赖关系,其定义如下:
RAW_DDA=(statement,I,[Array],[NEXT])。其中statement表示多层循环程序中的一个循环体的声明;I表示循环体索引变量Ir,1≤r≤m;[Array]是与索引变量Ir相关的RAW数据依赖关系涉及到的数组集合,用Array(Ir)表示;[NEXT]表示statement声明中所有迭代间RAW数据依赖关系集合,用NEXT(Array(Ir))表示Array(Ir)中单个数组所引起的RAW数据依赖关系集合,其中NEXT是一个三元组(next,δ,Δ),其中δ表示迭代间RAW数据依赖关系的依赖距离,Δ表示依赖关系next在循环体中跨过的流水段延时。
基于数据依赖关系分析算法得到的RAW_DDA结果,本发明对多层循环中每一个循环体进行迭代间启动间距分析,当循环体的索引变量Ir的边界pr或qr是变量时,会引起迭代间的启动间距不是一个固定值,提出采用向量来表示迭代间启动间距信息,建立非固定启动间距模型(None-FixedInitiationInterval,NF_II),如定义4)所描述。
4)NF_II模型
多层循环中循环体迭代间启动间距信息用二维向量表示,1≤r≤m。其中表示循环体在索引变量Ir控制下流水启动时的延时向量,即循环体在迭代空间中迭代点(I1,I2,...,Ir,...,Im)与(I1,I2,...,Irr,...,Im)之间的启动延时按照字典顺序生成的迭代间启动间距向量。
NF_II模型能够表示计数类多层循环中循环体每次迭代流水执行启动时的精确时间,采用非固定启动间距的思想,实现细粒度可重构编译生成的多层循环流水硬件单元的时序控制,能够有效减少多层循环流水执行时冒泡现象,提高多层循环流水执行的吞吐率。
在建立了分析模型之后,还需要为之建立相应的分析算法,以实现循环流水启动间距自动分析方法之发明目的,分析算法的定义如下:
根据RAW_DDA得到的RAW数据依赖关系分析结果进行多层循环的迭代间启动间距分析时,将多层循环按照附图6所示递归表示成多个单层循环的形式,Loop(r)中循环体迭代之间启动间距是由与索引变量Ir相关的RAW数据依赖关系所决定,其中1≤r≤m,Loop(r)的启动间距向量与索引变量Ir存在一对一仿射关系,如公式(1)所示,其中,k是正整数。
II r &RightArrow; = ( II p r , II p r + &theta; r , ... , II p r + k &CenterDot; &theta; r , ... , II q r ) 式(1)
循环体中迭代点Ir=pr+k·θr与Ir=pr+(k+1)·θr之间的启动间距为启动间距由NEXT(Array(Ir))决定,独立的数据依赖关系NEXT=(next,δ,Δ)与启动间距向量中每个启动间距的关系如公式(2)所示,其中delay表示依赖关系next在循环Loop(r)中循环体迭代之间时钟延时。
式(2)
d e l a y ( s t m t ( I r &RightArrow; ) ) = &delta; r = m T ( L o o p ( r + 1 ) ) + &delta; r < m 式(3)
T ( L o o p ( r ) ) = &Sigma; k = 0 ( q m - p m ) / &theta; m II k II k &Element; II m &RightArrow; , r = m &Sigma; k = 0 ( q m - p m ) / &theta; m ( T ( L ( r + 1 ) ) + II k ) II k &Element; II m &RightArrow; , 1 < r < m 式(4)
在循环Loop(r)中,根据RAW依赖关系next的依赖距离δ可以获得具有依赖关系next的两次迭代之间的延时delay,如公式(3)所示,其中T(Loop(r+1))表示在循环Loop(r)中索引变量为Ir时循环Loop(r+1)流水执行时的时钟周期。循环Loop(r)的两次迭代之间延时delay由最内层循环Loop(m)的循环体以递归形式计算得到,循环Loop(m)的迭代间启动间距向量为根据本文提出的非固定启动间距思想,在实现循环内部流水执行的同时,还可以实现循环层间也进行流水执行,因此只考虑最内层循环流水启动时间,则最内层循环Loop(m)的执行时间根据公式(4)可以计算得出。根据公式(5)可以从最内层循环逆向递归求出深度1<r≤m的循环Loop(r)的运行时钟周期T。
根据如上所示多层循环中迭代间启动间距计算方法,本文在细粒度可重构编译器ASCRA中设计实现了多层循环中循环体流水执行时迭代间启动间距自动分析算法。多层循环深度流水执行时迭代间启动间距自动分析算法的伪代码描述如算法1所示。首先,对最内层循环Loop(m)的启动间距向量进行分析。采用基于硬件延时的流水线划分算法对循环体进行流水线划分;按照公式(5)对迭代间启动间距向量进行初始化;然后对的RAW_DDA模型中数据依赖关系集合[NEXT]进行筛选,当Δ*θm≥δ时,则该依赖关系next会对循环体下一次迭代执行产生推后影响,对符合该条件的next依赖关系进行遍历,根据公式(2)进行启动间距向量的更新。
II I m = 0 , I m = p m 1 , I m &NotEqual; p m 式(5)
其次,根据Loop(m)的启动间距向量和T(Loop(m))对深度r=m-1的循环Loop(r)进行启动间距向量的分析,最后按照公式(2-5)迭代求出多层循环的启动间距信息
根据上文建立的循环迭代间流水启动间距信息模型,可以准确的评估出多层循环流水执行时的运行时钟周期,为细粒度可重构编译器中软硬件划分提供更加完善的划分依据信息,同时采用该NF_II自动分析算法获得的多层循环深度流水执行时迭代间非固定启动间距信息能够支持循环流水控制单元的生成。
在实现循环到流水硬件结构自动映射过程中,迭代间启动间距的自动分析技术是可重构编译器研究的难点。在现有细粒度可重构编译器中,例如:VivadoHLS、ROCCC、ImpulseC等,主要采用语句制导方式控制生成核心循环并行流水硬件结构的启动间距,该方法限制了仅能以固定启动间距方式对循环流水进行控制,降低了并行流水硬件结构的性能,同时在确定该迭代间启动间距时,需要迭代执行多次综合仿真过程才能确定,极大地制约了可重构计算应用的开发效率,同时影响了细粒度可重构编译器在工业界的推广。正是针对上述编译器的技术特性,本发明提出了一种可重构编译器中循环流水迭代间启动间距自动分析方法。该方法通过建立循环流水执行时迭代间启动间距的分析模型,并采用自动生成算法得到迭代间启动间距向量信息,可以有效减少流水冒泡延迟,提高硬件流水执行数据吞吐量,减少细粒度可重构编译器调试启动间距值迭代次数,可有效提高可重构编译器的执行效率以及自动化水平。实验结果表明,基于LLVM开源编译框架开发的细粒度可重构编译器ASCRA在采用本自动分析方法后,与其他可重构编译器相比,实现了更高效的软硬件自动划分方法,同时在硬件代码自动映射过程中,能够更加快速的得到高吞吐率的非固定启动间距循环硬件电路结构,提高细粒度可重构编译器的开发效率和推广。
一种可重构编译器中循环流水迭代间启动间距自动分析方法,主要包括如下几个步骤:
步骤一:对计数类循环进行循环流水迭代间启动间距信息模型的构建,其中循环流水迭代间启动间距信息模型包括SCoPs数据结构、RAW_DDA模型和非固定启动间距模型NF_II;
步骤二:将计数类循环的代码转换成SCoPs数据结构形式;
步骤三:根据计数类循环程序的SCoPs数据结构,进行循环流水迭代间写后读RAW数据依赖关系分析,得到RAW_DDA模型描述的计数类循环程序的RAW数据依赖关系分析结果RAW_DDA;
步骤四:基于计数类循环程序的RAW_DDA模型,进行循环流水迭代间启动间距的自动分析,得到循环流水迭代间非固定启动间距模型NF_II描述的启动间距自动分析结果。其中,公式(6)中表示循环体中迭代点Ir=pr+k·θr与Ir=pr+(k+1)·θr之间的启动间距;公式(7)表示NEXT=(next,δ,Δ)与启动间距向量中每个启动间距的关系,delay表示依赖关系next在循环Loop(r)中循环体迭代之间时钟延时;公式8)中T(Loop(r+1))表示在循环Loop(r)中索引变量为Ir时循环Loop(r+1)流水执行时的时钟周期。
II r &RightArrow; = ( II p r , II p r + &theta; r , ... , II p r + k &CenterDot; &theta; r , II p r + ( k + 1 ) &CenterDot; &theta; r , ... , II q r ) 式(6)
式(7)
d e l a y ( s t m t ( I r &RightArrow; ) ) = &delta; r = m T ( L o o p ( r + 1 ) ) + &delta; r < m 式(8)
T ( L o o p ( r ) ) = &Sigma; k = 0 ( q m - p m ) / &theta; m II k II k &Element; II m &RightArrow; , r = m &Sigma; k = 0 ( q m - p m ) / &theta; m ( T ( L ( r + 1 ) ) + II k ) II k &Element; II m &RightArrow; , 1 < r < m 式(9)
II I m = 0 , I m = p m 1 , I m &NotEqual; p m 式(10)
步骤一中所述的计数类循环描述为:索引变量向量其中m为多层循环的最大深度;Loop(r)表示索引变量为Ir的循环,其中1≤r≤m,循环体用表示,表示循环体由索引向量控制,索引变量Ir=(pr,qrr),其中,pr和qr分别表示索引变量Ir的初值和终值,且是(I1,I2,...,Ir-1)的整值函数,θr表示循环变量Ir的增量且θr为常数。
步骤一中所述的SCoPs数据结构表示为:SCoPs由context和一系列声明statement构成一个二元组<Context,[Statement]>。其中context是SCoP约束参数的集合;每个声明statement都是一个四元组<Name,Domain,Schedule,[Access]>,Statement的单位是多层循环Loop中循环体其中1≤r≤m,其中Name表示声明statement的名称,是声明的唯一标识符;Domain是声明的迭代域,表示一个statement在多层循环中的多维迭代空间域,限制了statement的迭代范围;Schedule是多维空间中迭代向量的整型映射,表示迭代空间中statement的迭代向量;[Access]是声明中对数组元素的访存操作集合,主要包括读、写、读写三种。
步骤一中所述的RAW_DDA模型是指:RAW_DDA=(statement,I,[Array],[NEXT])。其中RAW_DDA表示循环流水迭代间数据依赖关系分析结果,statement表示多层循环程序中的一个循环体的声明;I表示循环体索引变量Ir,1≤r≤m;[Array]是与索引变量Ir相关的RAW数据依赖关系涉及到的数组集合,用Array(Ir)表示;[NEXT]表示statement声明中所有迭代间RAW数据依赖关系集合,用NEXT(Array(Ir))表示Array(Ir)中单个数组所引起的RAW数据依赖关系集合,其中NEXT是一个三元组(next,δ,Δ),其中δ表示迭代间RAW数据依赖关系的依赖距离,Δ表示依赖关系next在循环体中跨过的流水段延时。
步骤一中所述的非固定启动间距模型NF_II是指:多层循环中循环体迭代间启动间距信息用二维向量表示,1≤r≤m。其中表示循环体在索引变量Ir控制下流水启动时的延时向量,即循环体在迭代空间中迭代点(I1,I2,...,Ir,...,Im)与(I1,I2,...,Irr,...,Im)之间的启动延时按照字典顺序生成的迭代间启动间距向量。
为了验证本发明所提出的可重构编译器中循环流水迭代间启动间距自动分析方法的有效性,本发明在基于ARM-FPGA异构加速平台的细粒度可重构编译器ASCRA(Application-SpecificCompilerforReconfigurableArchitecture)上进行了具体的技术实施方案实现。
ASCRA基于开源编译框架LLVM源码基础上进行开发,可以实现C-to-VHDL的自动映射,ASCRA系统架构图如附图4所示。首先,将计算密集型应用程序编译成LLVM中间代码(IR,IntermediateRepresentation)表示,采用一些前端优化技术进行IR优化;其次,对循环程序进行数据依赖关系分析、流水线划分、流水启动间距分析和优化,基于流水线划分结果和启动间距分析结果进行循环程序代价评估,评估将该循环程序映射到FPGA上执行时消耗的代价和获得的应用加速比;然后,基于循环程序代价评估结果进行软硬件划分,判断是否将其划分到协处理器FPGA硬件加速单元上执行;最后进行代码生成,结合并行编译优化技术和并行存储模型完成FPGA并行流水硬件加速单元VHDL代码的生成,同时生成软硬件接口驱动程序和将该循环程序封装成接口调用的C源程序,完成异构加速平台对计算密集型C应用程序的加速。
本发明所提出的循环流水迭代间启动间距自动分析方法在ASCRA编译器中,具体伪代码如算法1所示。
通过算法1所描述的实施过程,能够在可重构编译器工具中自动生成循环流水迭代间非固定启动间距模型信息。

Claims (5)

1.一种可重构编译器中循环流水迭代间启动间距自动分析方法,其特征在于:包括以下步骤,
步骤一:对计数类循环进行循环流水迭代间启动间距信息模型的构建,其中循环流水迭代间启动间距信息模型包括SCoPs数据结构、RAW_DDA模型和非固定启动间距模型NF_II;
步骤二:将计数类循环的代码转换成SCoPs数据结构形式;
步骤三:根据计数类循环程序的SCoPs数据结构,进行循环流水迭代间写后读RAW数据依赖关系分析,得到RAW_DDA模型描述的计数类循环程序的RAW数据依赖关系分析结果RAW_DDA;
步骤四:基于计数类循环程序的RAW_DDA模型,进行循环流水迭代间启动间距的自动分析,得到循环流水迭代间非固定启动间距模型NF_II描述的启动间距自动分析结果,得到启动间距向量
II r &RightArrow; = ( II p r , II p r + &theta; r , ... , II p r + k &CenterDot; &theta; r , II p r + ( k + 1 ) &CenterDot; &theta; r , ... , II q r )
d e l a y ( s t m t ( I r &RightArrow; ) ) = &delta; r = m T ( L o o p ( r + 1 ) ) + &delta; r < m
T ( L o o p ( r ) ) = &Sigma; k = 0 ( q m - p m ) / &theta; m II k II k &Element; II m &RightArrow; , r = m &Sigma; k = 0 ( q m - p m ) / &theta; m ( T ( L o o p ( r + 1 ) ) + II k ) II k &Element; II m &RightArrow; , 1 < r < m
II I m = 0 , I m = p m 1 , I m &NotEqual; p m
其中,表示循环体中迭代点Ir=pr+k·θr与Ir=pr+(k+1)·θr之间的启动间距;delay表示依赖关系next在循环Loop(r)中循环体迭代之间时钟延时;T(Loop(r+1))表示在循环Loop(r)中索引变量为Ir时循环Loop(r+1)流水执行时的时钟周期。
2.根据权利要求1所述的一种可重构编译器中循环流水迭代间启动间距自动分析方法,其特征在于:所述的计数类循环为:索引变量向量其中m为多层循环的最大深度;Loop(r)表示索引变量为Ir的循环,其中1≤r≤m,循环体用表示,表示循环体由索引向量控制,索引变量Ir=(pr,qrr),其中,pr和qr分别表示索引变量Ir的初值和终值,且是(I1,I2,...,Ir-1)的整值函数,θr表示循环变量Ir的增量且θr为常数。
3.根据权利要求1所述的一种可重构编译器中循环流水迭代间启动间距自动分析方法,其特征在于:所述的SCoPs数据结构表示为:SCoPs由context和一系列声明statement构成一个二元组<Context,[Statement]>,其中context是SCoP约束参数的集合;每个声明statement都是一个四元组<Name,Domain,Schedule,[Access]>,Statement的单位是多层循环Loop中循环体其中1≤r≤m,其中Name表示声明statement的名称;Domain是声明的迭代域,表示一个statement在多层循环中的多维迭代空间域;Schedule是多维空间中迭代向量的整型映射,表示迭代空间中statement的迭代向量;[Access]是声明中对数组元素的访存操作集合,主要包括读、写、读写三种。
4.根据权利要求1所述的一种可重构编译器中循环流水迭代间启动间距自动分析方法,其特征在于:所述的RAW_DDA模型是指:RAW_DDA=(statement,I,[Array],[NEXT]),其中RAW_DDA表示循环流水迭代间数据依赖关系分析结果,statement表示多层循环程序中的一个循环体的声明;I表示循环体索引变量Ir,1≤r≤m;[Array]是与索引变量Ir相关的RAW数据依赖关系的数组集合,用Array(Ir)表示;[NEXT]表示statement声明中所有迭代间RAW数据依赖关系集合,NEXT(Array(Ir))表示Array(Ir)中单个数组所引起的RAW数据依赖关系集合,其中NEXT是一个三元组(next,δ,Δ),其中δ表示迭代间RAW数据依赖关系的依赖距离,Δ表示依赖关系next在循环体中跨过的流水段延时。
5.根据权利要求1所述的一种可重构编译器中循环流水迭代间启动间距自动分析方法,其特征在于:所述的非固定启动间距模型NF_II是指:多层循环中循环体迭代间启动间距信息用二维向量表示,1≤r≤m,其中表示循环体在索引变量Ir控制下流水启动时的延时向量,即循环体在迭代空间中迭代点(I1,I2,...,Ir,...,Im)与(I1,I2,...,Irr,...,Im)之间的启动延时按照字典顺序生成的迭代间启动间距向量。
CN201510593950.4A 2015-09-17 2015-09-17 一种可重构编译器中循环流水迭代间启动间距自动分析方法 Active CN105302624B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510593950.4A CN105302624B (zh) 2015-09-17 2015-09-17 一种可重构编译器中循环流水迭代间启动间距自动分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510593950.4A CN105302624B (zh) 2015-09-17 2015-09-17 一种可重构编译器中循环流水迭代间启动间距自动分析方法

Publications (2)

Publication Number Publication Date
CN105302624A true CN105302624A (zh) 2016-02-03
CN105302624B CN105302624B (zh) 2018-10-26

Family

ID=55199918

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510593950.4A Active CN105302624B (zh) 2015-09-17 2015-09-17 一种可重构编译器中循环流水迭代间启动间距自动分析方法

Country Status (1)

Country Link
CN (1) CN105302624B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107885531A (zh) * 2017-11-28 2018-04-06 昆山青石计算机有限公司 一种基于数组私有化的并发大数据实时处理方法
CN109521354A (zh) * 2017-07-05 2019-03-26 是德科技股份有限公司 用于测量系统的创建程序的方法、其测量系统及其计算机可读记录介质
CN110532577A (zh) * 2018-05-24 2019-12-03 大唐移动通信设备有限公司 数字逻辑电路编译方法及装置
CN112528224A (zh) * 2020-12-28 2021-03-19 上海微波技术研究所(中国电子科技集团公司第五十研究所) 一种矩阵特征值分解分组循环迭代流水实现方法及系统
CN112631610A (zh) * 2020-11-30 2021-04-09 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944014A (zh) * 2010-09-15 2011-01-12 复旦大学 一种自动流水并行的实现方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944014A (zh) * 2010-09-15 2011-01-12 复旦大学 一种自动流水并行的实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
QI GUO ETC.: "Automatic Loop-based Pipeline Optimization on Reconfigurable Platform", 《TRUST, SECURITY AND PRIVACY IN COMPUTING AND COMMUNICATIONS (TRUSTCOM), 2013 12TH IEEE INTERNATIONAL CONFERENCE ON》 *
吴艳霞等: "面向应用的可重构编译器ASCRA", 《计算机科学与探索》 *
郭振华等: "一种改进ASAP调度的流水线自动划分算法", 《计算机科学》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109521354A (zh) * 2017-07-05 2019-03-26 是德科技股份有限公司 用于测量系统的创建程序的方法、其测量系统及其计算机可读记录介质
CN109521354B (zh) * 2017-07-05 2022-09-02 是德科技股份有限公司 用于测量系统的创建程序的方法
CN107885531A (zh) * 2017-11-28 2018-04-06 昆山青石计算机有限公司 一种基于数组私有化的并发大数据实时处理方法
CN110532577A (zh) * 2018-05-24 2019-12-03 大唐移动通信设备有限公司 数字逻辑电路编译方法及装置
CN110532577B (zh) * 2018-05-24 2021-06-18 大唐移动通信设备有限公司 数字逻辑电路编译方法及装置
CN112631610A (zh) * 2020-11-30 2021-04-09 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
CN112631610B (zh) * 2020-11-30 2022-04-26 上海交通大学 一种针对粗粒度可重构结构的数据重用消除访存冲突方法
CN112528224A (zh) * 2020-12-28 2021-03-19 上海微波技术研究所(中国电子科技集团公司第五十研究所) 一种矩阵特征值分解分组循环迭代流水实现方法及系统

Also Published As

Publication number Publication date
CN105302624B (zh) 2018-10-26

Similar Documents

Publication Publication Date Title
CN105302624B (zh) 一种可重构编译器中循环流水迭代间启动间距自动分析方法
Gaunt et al. Terpret: A probabilistic programming language for program induction
EP2677424B1 (en) OpenCL compilation
de Fine Licht et al. StencilFlow: Mapping large stencil programs to distributed spatial computing systems
Liu et al. Polyhedral-based dynamic loop pipelining for high-level synthesis
CN104360906B (zh) 一种基于差分约束系统与迭代模的高层次综合调度方法
Morvan et al. Efficient nested loop pipelining in high level synthesis using polyhedral bubble insertion
EP2677423B1 (en) OpenCL compilation
CN105260222B (zh) 一种可重构编译器中循环流水迭代间启动间距优化方法
Faber et al. Challenges designing for FPGAs using high-level synthesis
Matai et al. Enabling fpgas for the masses
Babikian et al. Automated generation of consistent models using qualitative abstractions and exploration strategies
CN112527304B (zh) 基于异构平台的自适应节点融合编译优化方法
Bertolacci et al. Using the loop chain abstraction to schedule across loops in existing code
Kobayashi et al. Compiler generation in PEAS-III: An ASIP development system
Campos et al. On data parallelism code restructuring for HLS targeting FPGAs
Menotti et al. LALP: A language to program custom FPGA-based acceleration engines
Turkington et al. FPGA based acceleration of the LINPACK benchmark: A high level code transformation approach
Schmid et al. High-level synthesis revised-Generation of FPGA accelerators from a domain-specific language using the polyhedron model
Nabi et al. Using type transformations to generate program variants for FPGA design space exploration
Birch et al. Value range analysis of conditionally updated variables and pointers
Gonzalez-Alvarez et al. MInGLE: an efficient framework for domain acceleration using low-power specialized functional units
Arató et al. A data flow graph generation method starting from C description by handling loop nest hierarchy
US20240311112A1 (en) Generating source code adapted for implementation on fpgas
Jamal et al. A Graph Neural Network Model for Fast and Accurate Quality of Result Estimation for High-Level Synthesis

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