首页 / 专利库 / 电脑编程 / 别名 / 一种基于OpenCL的FPGA图处理加速方法和系统

一种基于OpenCL的FPGA图处理加速方法和系统

阅读:413发布:2020-05-13

专利汇可以提供一种基于OpenCL的FPGA图处理加速方法和系统专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于OpenCL的FPGA图处理 加速 方法和系统,属于大 数据处理 领域。包括:根据反汇编得到的中间代码IR,生成完整的控制数据流图CDFG;对完整的CDFG图,根据Load和Store指令进行重新分 块 ,得到新的CDFG指令块,确定各CDFG指令块之间的并行模式;对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式;采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的 硬件 描述语言,编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。本发明采用管道技术和重新调整指令块中指令,减少访存次数,降低访存延时;采用片上存储分块,减少不同流 水 线对同一个内存块的写冲突,从而提升系统效率。,下面是一种基于OpenCL的FPGA图处理加速方法和系统专利的具体信息内容。

1.一种基于OpenCL的FPGA图计算加速方法,其特征在于,该方法包括以下步骤:
S1.对基于OpenCL编写的图计算编译生成的汇编文件,反汇编得到中间代码IR;
S2.根据中间代码IR,生成完整的控制数据流图CDFG;
S3.对完整的CDFG图,根据Load和Store指令进行重新分,得到新的CDFG指令块,同时确定各CDFG指令块之间的并行模式;
S4.对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式;
S5.采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的硬件描述语言,将其编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
2.如权利要求1所述的方法,其特征在于,步骤S2包括以下步骤:
S21.对中间代码IR的每个基础指令块进行分析,确定指令之间的依赖关系;
S22.根据指令之间的依赖关系,将各个基础指令块转化为对应的CDFG图;
S23.对每个基础指令块中的访存操作指令和同步操作指令进行标记,对存在调用关系的基础指令块对,在具有相同别名的变量时在两个基础指令块中进行标记;
S24.对各基础指令块转化成的CDFG图,根据是否具有相同别名变量标记,拼接为完整的CDFG图。
3.如权利要求1所述的方法,其特征在于,步骤S3包括以下步骤:
S31.对完整CDFG图进行BFS遍历,实现对完整CDFG的分块,得到重新划分后的CDFG块;
S32.根据CDFG指令块的片上逻辑的频率,确定存在调用关系的CDFG指令块之间的并行模式;
S33.根据指令块之间的并行模式,确定指令块之间进行信息传递所需要的缓存区的大小,再根据缓存区的大小对FPGA上的BRAM进行数据的划分。
4.如权利要求3所述的方法,其特征在于,步骤S31包括以下步骤:
S311.从完整CDFG图的根节点出发,进行BFS算法遍历,每一次遍历的步长选择同一层所有计算时延最小的值;
S312.在遍历的过程中,如果发现FIFO或者REGISTER指令,则需确认是否是REGISTER指令到REGISTER指令或FIFO指令到FIFO指令,如果是,则需将REGISTER或FIFO指令的深度进行累加,如果不是,则继续执行;
S313.在遍历的过程中,如果发现Load或者Store指令,则停止本次遍历,将遍历到的所有指令放到同一个指令块中;
S314.从刚刚停止的Load或Store指令对应的节点开始,进行BFS算法遍历,每一次遍历的步长选择同一层所有计算时延最小的值,进入步骤S312重复遍历直到遍历到所有的指令。
5.如权利要求3所述的方法,其特征在于,步骤S32包括以下步骤:
S321.分别对每一个指令块进行计算它们片上逻辑的频率;
S322.根据存在调用关系的CDFG块对的片上逻辑的频率,确定指令块之间的并行模式。
6.一种基于OpenCL的FPGA图计算加速系统,其特征在于,该系统包括:
反编译模块,用于对基于OpenCL编写的图计算编译生成的汇编文件,反汇编得到中间代码IR;
预处理模块,用于根据中间代码IR,生成完整的控制数据流图CDFG;
重整模块,用于对完整的CDFG图,根据Load和Store指令进行重新分块,得到新的CDFG指令块,同时确定各CDFG指令块之间的并行模式,对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式;
编译执行模块,用于采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的硬件描述语言,将其编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
7.如权利要求6所述的系统,其特征在于,所述预处理模块包括:
别名分析子模块,用于对中间代码IR的每个基础指令块进行分析,确定指令之间的依赖关系,根据指令之间的依赖关系,将各个基础指令块转化为对应的CDFG图,对每个基础指令块中的访存操作指令和同步操作指令进行标记,对存在调用关系的基础指令块对,在具有相同别名的变量时在两个基础指令块中进行标记;
CDFG图拼接子模块,用于对各基础指令块转化成的CDFG图,根据是否具有相同别名变量标记,拼接为完整的CDFG图。
8.如权利要求6所述的系统,其特征在于,所述重整模块包括:
CDFG图遍历分析子模块,用于对完整CDFG图进行BFS遍历,实现对完整CDFG的分块,得到重新划分后的CDFG块;
并行关系分析子模块,用于根据CDFG指令块的片上逻辑的频率,确定存在调用关系的CDFG指令块之间的并行模式,根据指令块之间的并行模式,确定指令块之间进行信息传递所需要的缓存区的大小,再根据缓存区的大小对FPGA上的BRAM进行数据的划分。

说明书全文

一种基于OpenCL的FPGA图处理加速方法和系统

技术领域

[0001] 本发明属于大数据处理技术领域,更具体地,涉及一种基于OpenCL的FPGA图处理加速方法和系统。

背景技术

[0002] 图是一种经典的数据结构,在理论方面有图论领域,同时在现实生活中,很多关系都可以转化抽象为图。比如说电数据分析、社交网络、交易网络、交通网络等等。人们通过分析网络的特征来获取想要的信息。比如说设计网络中获取哪些人物是“网络红人”,交通网络中获取两个地方的最优路线等等。图计算就是将上述常见的现实问题抽象为几个经典的问题,如SSSP算法即获取两点之间的最短距离,PageRank算法即获取每一个节点的重要程度等。经典的图计算包括PageRank、BFS、DFS、SSSP等。如何快速获取这些图计算的结果是一个具有挑战性的问题。
[0003] 基于GPU的图计算加速系统,由于使用GPU平台的功耗和能耗过高,而基于传统通用处理器CPU的计算效率有限,因此,为了提高图计算的计算和访存效率,一种基于定制硬件的方式进行图计算加速的方式应用而生。其中包括基于ASIC的图计算加速器和基于FPGA的图计算加速器。虽然基于ASIC的图计算加速器具有更高的计算效率,但是其本身灵活性不足,在面对多种图计算算法的时候,FPGA可重构性的特定更能适应。使用FPGA作为图计算系统的硬件平台相比CPU具有更高的并行度,相比GPU具有更高的能效。
[0004] 已有的基于FPGA的图计算系统主要有两类,即CPU-FPGA的异构系统以及基于FPGA的图计算系统。基于CPU-FPGA的异构系统主要是考虑到图数据本身的Power-Law特性,其中CPU是一种通用处理器,对计算和访存分散的任务比较友好,而针对计算和访存密集型的任务可以使用FPGA进行加速。首先,FPGA具有大量的可编程逻辑单元,可以针对不同的算法设计特定的片上逻辑,而且这些片上逻辑还可以实现流线,从而实现高并行度,所以使用FPGA对计算和访存密集型的任务进行加速是非常合理的。然而,如何确定任务是适合在CPU上进行执行还是适合在FPGA上进行执行显得尤为重要和困难。现有的一些策略是根据节点的度数来确定适合在哪种平台上面进行运行,节点的度数很小,意味着是适合在CPU上面进行计算;节点度数很大,意味着适合在FPGA上面进行计算。然而,这种方式有很大的缺点:(1)上述的决策策略是一种静态的方式,对于动态过程中产生的分散节点无法判断。有很多图计算算法是根据节点的收敛与否来确定该节点在下一次迭代过程中是否需要计算。这样就会导致节点度数很大的点在迭代过程中的有效边减少,从而将一个计算或访存密集型的节点变成一个计算或访存分散的节点,从而使系统整体性能变差。(2)CPU和FPGA之间信息的同步。由于CPU负责一部分计算任务,FPGA负责另外一部分计算任务。而且,大部分情况下,这两部分计算任务之间通常有依赖关系或者需要进行信息同步的操作。这时,需要将FPGA或者CPU计算的中间结果通过PCIe总线进行信息的同步。如果说这两部分之间进行频繁的通信,势必会对整体的性能产出很大的影响。基于FPGA的图计算系统是将整个图计算算法通过FPGA上的可编程逻辑单元进行实现。相比于上述的异构执行模式,去掉了通信的开销,然而也带了很多问题:(1)对于计算或者访存不是很密集的任务,浪费了FPGA高并行度的优势。(2)FPGA片上缓存有限,如何在有限资源的前提下达到很高的性能,这对开发用户来说很不友好。
[0005] 开发FPGA有三类开发语言,分别为Verilog/VHDL、HLS、OpenCL。其中使用Verilog/VHDL语言开发FPGA,需要开发用户自己写RTL,需要设计状态机,需要确定仿真的正确性等等。使用这一类开发语言对开发用户的要求很高;使用HLS语言这种类C的语言开发FPGA虽然降低了开发用户的难度,但是由于HLS语言本身表达流水线的能力不够,无法充分发挥FPGA的优势;使用OpenCL开发FPGA既保持了HLS语言开发难度低的特性,又由于OpenCL在编译过程中采用细粒度的流水线的模式进行编译,所以很好地利用了FPGA流水线的优势。但是由于图计算中常见的问题:图的Power-Law特性、图节点之间的通信、随机访存等等,都会导致系统性能下降。所以如何使用OpenCL开发一个基于FPGA的高效的图计算系统显得尤为困难和重要。

发明内容

[0006] 针对现有技术OpenCL的FPGA代码转换机制在图计算应用方面表现出的低效率问题,本发明提供了一种基于OpenCL的FPGA图处理加速方法和系统,其目的在于使用OpenCL开发一个基于FPGA的高效的图计算系统,该系统能够克服图计算的图的Power-Law特性、图节点之间的通信、随机访存等等问题。
[0007] 为实现上述目的,按照本发明的第一方面,提供了一种基于OpenCL的FPGA图计算加速方法,该方法包括以下步骤:
[0008] S1.对基于OpenCL编写的图计算编译生成的汇编文件,反汇编得到中间代码IR;
[0009] S2.根据中间代码IR,生成完整的控制数据流图CDFG;
[0010] S3.对完整的CDFG图,根据Load和Store指令进行重新分,得到新的CDFG指令块,同时确定各CDFG指令块之间的并行模式;
[0011] S4.对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式;
[0012] S5.采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的硬件描述语言,将其编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
[0013] 具体地,步骤S2包括以下步骤:
[0014] S21.对中间代码IR的每个基础指令块进行分析,确定指令之间的依赖关系;
[0015] S22.根据指令之间的依赖关系,将各个基础指令块转化为对应的CDFG图;
[0016] S23.对每个基础指令块中的访存操作指令和同步操作指令进行标记,对存在调用关系的基础指令块对,在具有相同别名的变量时在两个基础指令块中进行标记;
[0017] S24.对各基础指令块转化成的CDFG图,根据是否具有相同别名变量标记,拼接为完整的CDFG图。
[0018] 具体地,步骤S3包括以下步骤:
[0019] S31.对完整CDFG图进行BFS遍历,实现对完整CDFG的分块,得到重新划分后的CDFG块;
[0020] S32.根据CDFG指令块的片上逻辑的频率,确定存在调用关系的CDFG指令块之间的并行模式;
[0021] S33.根据指令块之间的并行模式,确定指令块之间进行信息传递所需要的缓存区的大小,再根据缓存区的大小对FPGA上的BRAM进行数据的划分。
[0022] 具体地,步骤S31包括以下步骤:
[0023] S311.从完整CDFG图的根节点出发,进行BFS算法遍历,每一次遍历的步长选择同一层所有计算时延最小的值;
[0024] S312.在遍历的过程中,如果发现FIFO或者REGISTER指令,则需确认是否是REGISTER指令到REGISTER指令或FIFO指令到FIFO指令,如果是,则需将REGISTER或FIFO指令的深度进行累加,如果不是,则继续执行;
[0025] S313.在遍历的过程中,如果发现Load或者Store指令,则停止本次遍历,将遍历到的所有指令放到同一个指令块中;
[0026] S314.从刚刚停止的Load或Store指令对应的节点开始,进行BFS算法遍历,每一次遍历的步长选择同一层所有计算时延最小的值,进入步骤S312重复遍历直到遍历到所有的指令。
[0027] 具体地,步骤S32包括以下步骤:
[0028] S321.分别对每一个指令块进行计算它们片上逻辑的频率;
[0029] S322.根据存在调用关系的CDFG块对的片上逻辑的频率,确定指令块之间的并行模式。
[0030] 为实现上述目的,按照本发明的第二方面,提供了一种基于OpenCL的FPGA图计算加速系统,该系统包括:
[0031] 反编译模块,用于对基于OpenCL编写的图计算编译生成的汇编文件,反汇编得到中间代码IR;
[0032] 预处理模块,用于根据中间代码IR,生成完整的控制数据流图CDFG;
[0033] 重整模块,用于对完整的CDFG图,根据Load和Store指令进行重新分块,得到新的CDFG指令块,同时确定各CDFG指令块之间的并行模式,对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式;
[0034] 编译执行模块,用于采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的硬件描述语言,将其编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
[0035] 具体地,所述预处理模块包括:
[0036] 别名分析子模块,用于对中间代码IR的每个基础指令块进行分析,确定指令之间的依赖关系,根据指令之间的依赖关系,将各个基础指令块转化为对应的CDFG图,对每个基础指令块中的访存操作指令和同步操作指令进行标记,对存在调用关系的基础指令块对,在具有相同别名的变量时在两个基础指令块中进行标记;
[0037] CDFG图拼接子模块,用于对各基础指令块转化成的CDFG图,根据是否具有相同别名变量标记,拼接为完整的CDFG图。
[0038] 具体地,所述重整模块包括:
[0039] CDFG图遍历分析子模块,用于对完整CDFG图进行BFS遍历,实现对完整CDFG的分块,得到重新划分后的CDFG块;
[0040] 并行关系分析子模块,用于根据CDFG指令块的片上逻辑的频率,确定存在调用关系的CDFG指令块之间的并行模式,根据指令块之间的并行模式,确定指令块之间进行信息传递所需要的缓存区的大小,再根据缓存区的大小对FPGA上的BRAM进行数据的划分。
[0041] 总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
[0042] (1)针对OpenCL开发FPGA中代码转化机制的低效率问题,本发明通过将OpenCL代码转换为LLVM IR中间层代码进行指令调整,使得没有数据依赖的指令放到一起进行执行,将指令分块之后,将有数据依赖的指令块之间的数据传递通过channel来进行传递,将指令块实现pipeline的效果,减少访存次数,降低访存延时,提高了系统效率。
[0043] (2)针对图计算中乱序访存问题,本发明分析指令块的访存行为,确定FPGA片上存储的划分方式,结合FPGA的特性,对FPGA片上BRAM进行位宽和深度的自定义,减少不同流水线对同一个内存块的写冲突,从而提升系统效率。附图说明
[0044] 图1为本发明实施例提供的一种基于OpenCL的FPGA图计算加速方法流程图
[0045] 图2为本发明实施例提供的一种基于OpenCL的FPGA图计算加速系统结构示意图。

具体实施方式

[0046] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0047] 本发明提出一种基于OpenCL的FPGA图处理加速机制,该加速机制分为两个部分对图处理算法进行加速。
[0048] 第一部分,结合FPGA的特性,针对OpenCL代码编译生成的FPGA片上逻辑进行优化,从而达到FPGA片上逻辑能够以很高的频率进行流水化处理的效果,体现在步骤S2~S3。
[0049] FPGA上的片上逻辑具有如下特点:如果FPGA片上组合逻辑深度越,FPGA能够达到的最高运行频率越低。如果FPGA片上组合逻辑深度越短,相应的组合逻辑之间需要添加的FIFO数量就会增多,读取FIFO的时间就会延长。同时FIFO使用的是FPGA上有限的BRAM资源实现的。
[0050] 本发明通过根据上述特性来确定FPGA上合理的逻辑长度(每个CDFG指令块包含多少指令)以及各个CDFG指令块之间的并行模式,达到优化OpenCL到FPGA上运行效率低的问题。
[0051] 第二部分,结合图计算算法的特性设计有效的数据结构,针对OpenCL代码的访存行为进行优化,从而减少中间计算数据的I/O开销的目的,体现在步骤S4。
[0052] 图计算算法的特性如下:数据局部性差、访存随机性强、数据冲突频率高、传输计算比低等特点。
[0053] 由于OpenCL是一种跨平台的开发语言,同时FPGA、CPU和GPU各个器件之间又有本质的区别,所以结合器件特性针对OpenCL的图处理算法做优化可以实现很好的性能提升。本发明相比于使用传统的HLS开发FPGA的方式,可以保持OpenCL开发优势的前提下,同时保证在FPGA上面运行具有很好的性能。
[0054] 如图1所示,本发明提出一种基于OpenCL的FPGA图计算加速方法,该方法包括以下步骤:
[0055] 步骤S1.对基于OpenCL编写的图计算编译生成的汇编文件,反汇编得到中间代码IR。
[0056] 利用LLVM进行反汇编,得到中间代码IR,其包含多个基础指令块。
[0057] 步骤S2.根据中间代码IR,生成完整的控制数据流图CDFG。
[0058] 分别对每一个IR指令块生成控制数据流图CDFG(Control Data Flow Graph),然后通过指令块中具有相同名字的部分,将每一个指令块生成的CDFG图进行拼接,生成一个完整的CDFG图。
[0059] 步骤S2包括以下步骤:
[0060] S21.对中间代码IR的每个基础指令块进行分析,确定指令之间的依赖关系。
[0061] S22.根据指令之间的依赖关系,将各个基础指令块转化为对应的CDFG图。
[0062] 对于确定指令块之间并行关系的问题中,将该问题转化为图计算中常见的遍历问题。所以首先需要将指令块转化为图的形式,这里采用的是将指令块转化为控制数据流图(CDFG),图中每一个节点代表一条指令,节点与节点之间的关系表示指令执行的先后顺序以及依赖关系。
[0063] S23.对每个基础指令块中的访存操作指令和同步操作指令进行标记,对存在调用关系的基础指令块对,在具有相同别名的变量时在两个基础指令块中进行标记。
[0064] 分析每一个指令块的输入、输出和跳转关系,尤其是每一个指令块中的Merge部分。例如,g_graph_nodes32和g_graph_nodes64是相同数据的不同位宽表示,在分析过程中应该视为相同的别名。
[0065] 在指令分析的过程中,获取指令块中的访存操作以及指令块中的同步操作。
[0066] 对中间层代码IR的每一个基础指令块(Basic Block)中的每一条指令进行分析。每一条指令包括操作码和操作数。对于操作码是Load和Store的指令需要进行标记,获取指令块中的访存操作。
[0067] 对中间层代码IR的每一个基础指令块(Basic Block)中的每一条指令进行分析。每一条指令包括操作码和操作数。对于操作码是FIFO和REGISTER的指令需要进行标记,获取指令块中的同步操作。指令块中出现的FIFO和REGISTER操作是为了FPGA的片上逻辑能够无停滞的运行所设置的缓冲区。
[0068] S24.对各基础指令块转化成的CDFG图,根据是否具有相同别名变量标记,拼接为完整的CDFG图。
[0069] 步骤S3.对完整的CDFG图,根据Load和Store指令进行重新分块,得到新的CDFG指令块,同时确定各CDFG指令块之间的并行模式。
[0070] 在设计相应的算法来确定指令块之间的并行关系的过程中,需要明确Load和Store指令不是FPGA上的片上逻辑,所以需要将Load和Store指令标记出来,同时算法遍历到Load或Store指令时需要停止。同时在遍历过程中遇到REGISTER指令到REGISTER指令的情况,则不需要将REGISTER指令加入到指令块中,因为REGISTER指令在FPGA上只是对BRAM数据的读写操作,并不是FPGA的片上逻辑操作。
[0071] 步骤S3包括以下步骤:
[0072] S31.对完整CDFG图进行BFS遍历,实现对完整CDFG的分块,得到重新划分后的CDFG块。
[0073] 从指令块Block0对应的CDFG开始进行BFS算法遍历,遍历算法基于传统的BFS算法进行修改,每一次遍历的步长是选择同一层所有计算时延最小的值,其中计算时延是指FPGA片上逻辑进行某一操作的时延,假设在同一层中既有加法运算又有乘法运算,加法运算的时延是2个时钟,乘法运算的时延是5个时钟,那么在这一次BFS算法扩展的过程中选择的步长应该是2。
[0074] S311.从完整CDFG图的根节点出发,进行BFS算法遍历,每一次遍历的步长选择同一层所有计算时延最小的值。
[0075] S312.在遍历的过程中,如果发现FIFO或者REGISTER指令,则需确认是否是REGISTER指令到REGISTER指令或FIFO指令到FIFO指令。如果是,则需将REGISTER或FIFO指令的深度进行累加。如果不是,则继续执行。
[0076] S313.在遍历的过程中,如果发现Load或者Store指令,则停止本次遍历,将遍历到的所有指令放到同一个指令块中。
[0077] S314.从刚刚停止的Load或Store指令对应的节点开始,进行BFS算法遍历,每一次遍历的步长选择同一层所有计算时延最小的值,进入步骤S312重复遍历直到遍历到所有的指令。
[0078] S32.根据CDFG指令块的片上逻辑的频率,确定存在调用关系的CDFG指令块之间的并行模式。
[0079] 根据步骤S31中提到的规则对CDFG图进行遍历,在遍历的过程中如果发现Load或者Store指令则遍历过程停止。将遍历到的所有指令放到同一个指令块中,并初始化另一个指令块,从刚刚停止的Load和Store指令开始进行步骤S31中提到的遍历过程。同时需要注意在遍历的过程中如果遇到REGISTER指令到REGISTER指令的情况,则不需要将REGISTER指令加入到指令块中,因为REGISTER指令在FPGA上只是对BRAM数据的读写操作,并不是FPGA的片上逻辑操作。
[0080] S321.分别对每一个指令块进行计算它们片上逻辑的频率。
[0081] 片上逻辑的频率就是时延总和的倒数。假设CDFG块A中的片上逻辑包括一个AND运算和一个SUB运算,其中,AND运算的时延为2ns,SUB运算的时延为3ns,因此,[0082] S322.根据存在调用关系的CDFG块对的片上逻辑的频率,确定指令块之间的并行模式。
[0083] 经过S321处理之后,完整的CDFG图已经被分成多个指令块。分别对每一个指令块进行计算它们片上逻辑的频率,也就是时延总和的倒数。然后根据每一个指令块的频率来确定指令块直接并行的模式。假设指令块A的频率为2H MHz,指令块B的频率为H MHz,同时指令块A执行后的输出作为指令块B执行前的输入。那么,指令块A在相同时间内产生数据需要2个指令块B进行消耗,从而可以确定指令块A和指令块B之间的并行模式为:1个A对应2个B。这样可以实现指令块A和指令块B可以同时执行,保证流水线在执行的过程中不会产生停滞的情况,从而整体上提高运行效率,缩短运行时间。
[0084] S33.根据指令块之间的并行模式,确定指令块之间进行信息传递所需要的缓存区的大小,再根据缓存区的大小对FPGA上的BRAM进行数据的划分。
[0085] 在确定每一个指令块之间的并行模式之后,指令块之间进行信息传递所需要的缓存区的大小就可以确定,然后根据缓存区的大小对FPGA上的BRAM进行数据的划分。针对上面的例子,A向B进行信息传递时,需要2个单位的缓存区大小,对FPGA上的BRAM划分两个单位的空间。
[0086] 根据图计算的特性对反汇编得到的指令进行重新分块以及重新确定指令块直接的并行关系,根据这些信息从而对FPGA上片上BRAM进行重新划分和组织,从而提高FPGA片上BRAM的利用率,从而达到提升系统性能的目的。
[0087] 步骤S4.对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式。
[0088] 在将FPGA片上逻辑进行提高并行度的过程中,所提供给FPGA片上逻辑的数据需要做同步的修改。同时考虑到FPGA片上BRAM容量比较小,通常只有8MB左右的大小。FPGA片上逻辑使用的是时序逻辑,在提高并行度的情况下,需要使用BRAM作为时序逻辑的中间缓存。总而言之,FPGA片上逻辑的并行度在提高的过程中需要消耗大量的片上BRAM的资源;同时如果想要减少频繁的I/O请求,需要使用BRAM资源做片上的缓存。
[0089] FPGA上面的BRAM具有位宽可变的特性。比如Intel Arria10 FPGA开发板上面的BRAM中的一种M9K,M9K默认的数据位宽是1bit(binary digit),容量是8K。同时,也可以用户自己设定位宽参数,比如设定为18bit,那么容量就变成了512。如果采用类似CPU的方式对BRAM进行管理会对BRAM造成很大的浪费,因为存在位宽对齐的问题。比如1bit的数据和18bit的数据放到同一个BRAM里面,由于数据位宽是固定的,所以数据只能以18bit的位宽进行存取,这样对于1bit的数据就需要18bit的空间进行存取,对BRAM造成很大的浪费。所以需要分析数据的访存行为对BRAM进行合理的划分和组织管理。
[0090] 由于图计算对访存带宽要求很高,所以片上BRAM的使用效率会直接影响到图计算算法的快慢程度。本发明采用数据分块的方式来进行数据的组织和管理,具体如下:
[0091] 对步骤S3中每一个指令块的Load和Store指令进行分析,将具有相同地址的Load和Store指令对应的指令块进行合并,同时增加对应的Load和Store指令的位宽。同时在BRAM中进行相同位宽的数据划分用来一次性将数据进行存放或者读取,从而减少I/O次数,从而提高运行效率。同时,对于BFS算法遍历过程中同一层的不同地址的Load和Store指令进行划分,不同的Load和Store指令对应到不同的BRAM块中,从而减少同时进行Load或Store指令时产生的读冲突和写冲突,减少读取数据或者存放数据的延时。
[0092] 步骤S5.采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的硬件描述语言,将其编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
[0093] 将最后优化后的中间层代码编译成相应的Verilog代码,之后再编译生成可以在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
[0094] 如图2所示,本发明提出一种基于OpenCL的FPGA图计算加速系统,该系统包括:
[0095] 反编译模块,用于对基于OpenCL编写的图计算编译生成的汇编文件,反汇编得到中间代码IR;
[0096] 预处理模块,用于根据中间代码IR,生成完整的控制数据流图CDFG;
[0097] 重整模块,用于对完整的CDFG图,根据Load和Store指令进行重新分块,得到新的CDFG指令块,同时确定各CDFG指令块之间的并行模式,对所有新CDFG指令块中的Load和Store指令进行分析,确定FPGA片上BRAM的划分方式;
[0098] 编译执行模块,用于采用所述BRAM的划分方式,对FPGA片上内存进行重新组织,根据指令块之间的并行模式,将所有新CDFG指令块翻译成相应的硬件描述语言,将其编译生成可在FPGA上面运行的二进制文件,烧至到FPGA上面进行运行。
[0099] 实施例一
[0100] 能量管理系统EMS主要是为电网调度人员提供电网各种实时信息,包括:频率、发电机功率、线路功率、母线电压等,并对电网进行调度决策管理,实现电力生产和输送的集中监视和控制,保障电网安全、优质、经济运行。电力系统需要实现实时/超实时的EMS,需要在采样时间内完成所有的计算,大体包括暂态计算和稳态计算两类,稳态计算的核心是潮流计算。目前电力系统应用主要是在CPU上实现的,但是潮流计算存在非常细粒度的并行性,这一点是通用CPU所不支持的,无法满足实时性要求。
[0101] 一个标注的潮流分布图是有向图,而电网的接线网是其相应的基图。不同运行方式的潮流方向不同,因而对应不同的有向图。电网各支路的方向由实际潮流的有功功率方向确定。
[0102] 本实施例将电网边表的数据转化为图,其中,发电站、变电所、负载为节点,线路、变压器为边,将稳态计算转化为图计算,再将潮流计算转化的图计算采用本发明的方法部署在FPGA上,充分发挥计算的并行性,提高性能,从而实现实时/超实时EMS。
[0103] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈