首页 / 专利库 / 人工智能 / 语言代码 / 一种面向图计算的高层次综合方法及系统

一种面向图计算的高层次综合方法及系统

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

专利汇可以提供一种面向图计算的高层次综合方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种面向图计算的高层次综合方法及系统,属于大 数据处理 领域,包括:(1)根据以点为中心的函数式编程模型生成图计算程序;(2)通过添加优化指令 指定 架构参数和微架构参数;(3)根据数据流图及优化指令将图计算程序编译为模 块 化的数据流中间表示;(4)根据IR模块与 硬件 模版 间的映射关系,将数据流中间表示映射到底层架构,并实例化硬件模版内的流 水 线和缓冲区;(5)若各实例化的参数化硬件模版以及整体架构均满足约束条件,则转入步骤(6);否则, 修改 优化指令后转入步骤(3);(6)生成可综合的硬件 语言代码 。本发明能够为从上层语言生成图应用RTL提供有效 支撑 ,以提高图计算在FPGA上执行的并行度。,下面是一种面向图计算的高层次综合方法及系统专利的具体信息内容。

1.一种面向图计算的高层次综合方法,其特征在于,包括:
(1)根据预定义的目标编程模型生成用于描述图计算任务的图计算程序;
所述目标编程模型是以点为中心的函数式编程模型,所述目标编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作;
(2)通过添加优化指令为图计算任务指定架构参数和微架构参数;
所述架构参数包括图计算相关的边处理操作和更新操作;所述微架构参数包括并行度和数据位宽;
(3)根据预先设计好的数据流图及所添加的优化指令将所述图计算程序编译为模化的数据流中间表示;
所述数据流图将各个图操作分解为一个或多个IR模块,并描述了IR模块之间的连接关系;每个IR模块对应数据流图上的一个节点,并且每个IR模块有相应的参数化硬件模版支撑
(4)根据IR模块与硬件模版间的映射关系,将编译得到的数据流中间表示映射到底层架构,并根据所指定的并行度和数据位宽实例化对应硬件模版内的流线和缓冲区;
(5)若各实例化的参数化硬件模版以及整体架构均满足预定义的约束条件,则转入步骤(6);否则,修改优化指令后转入步骤(3);
(6)根据各实例化的参数化硬件模版以及整体架构生成可综合的硬件语言代码
2.如权利要求1所述的面向图计算的高层次综合方法,其特征在于,每一个IR模块均设置有输入缓冲区和输出缓冲区,其中,输入缓冲区用于接收上一模块传递的数据并指示溢出情况,输出缓冲区用于存入当前IR模块产生的结果以供下一个IR模块读取,并根据缓冲区的溢出情况产生控制信号
由输入缓冲区和输出缓冲区实现IR模块之间的连接。
3.如权利要求2所述的面向图计算的高层次综合方法,其特征在于,所述数据流图包括
17个IR模块M1~M17;
所述IR模块M1用于执行读活跃点集合的图操作;所述IR模块M1在每一个时钟周期根据读点并行度n生成n个源节点;
所述IR模块M2~M3用于执行读边偏移量的图操作;所述IR模块M2根据读点并行度n从所述IR模块M1读取n个源节点,以传递源节点信息,同时针对所读取的源节点顺序生成边偏移量访存请求;所述IR模块M3从所述IR模块M2获取边偏移量访存请求后进行处理,以读取边偏移量;
所述IR模块M3~M8用于执行读边数据的图操作;所述IR模块M4从所述IR模块M3接收边偏移量,同时从所述IR模块M2读取n个源节点继续传递;所述IR模块M5从所述IR模块M4读取边偏移量和源节点数据并进行匹配,从而在源节点数据中添加其对应的边偏移量;所述IR模块M6从所述IR模块M5读取源节点及对应的边偏移量后,按照读边并行度m顺序生成m个边数据访存请求,并继续传递源节点信息;所述IR模块M7从所述IR模块M6读取边数据访存请求和源节点信息,将其中不属于所传递源节点的边标记为无效边,以生成边控制信息;所述IR模块M3还从所述IR模块M6获取边数据访存请求后进行处理,以读取边数据;所述IR模块M8从所述IR模块M3接收边数据,从所述IR模块M7接收源节点信息和边控制信息,并传递这三类信息;
所述IR模块M9~M13用于执行读目标点数据的图操作;所述IR模块M9从所述IR模块M8接收边数据、源节点信息和边控制信息后,根据边数据生成目标节点访存请求,并传递源节点信息和边控制信息;所述IR模块M10从所述IR模块M9读取目标节点访存请求后进行调度,以提高访存吞吐量;所述IR模块M11从所述IR模块M10读取调度后的目标节点访存请求后进行处理,以读取目标节点数据;所述IR模块M12从所述IR模块M11读取目标节点数据后,根据源节点对目标节点进行排序;所述IR模块M13传递从所述IR模块M12读取的源节点信息、排序后的目标节点数据以及边控制信息;
所述IR模块M14用于执行边数据计算的图操作;所述IR模块M14从所述IR模块M13读取目标节点数据后进行边数据计算,以得到更新值,并传递该更新值,同时传递源节点信息及边控制信息;
所述IR模块M15用于执行合并计算结果的图操作;所述IR模块M15从所述IR模块M14读取更新值后,根据读边并行度m对更新值进行合并,并传递源节点信息及边控制信息;
所述IR模块M16~M17用于执行更新结果及活跃点集合的图操作;所述IR模块M16从所述IR模块M15的输出缓冲区读取各个有效源节点对应的更新值,并传递源节点信息;所述IR模块M17从所述IR模块M16的输出缓冲区读取有效源节点的更新结果,并针对同一有效源节点的更新值进行合并,合并完成后,将更新值写回片上存储;
其中,读点并行度n和读边并行度m均为通过优化指令指定的微架构参数,所述IR模块M6所传递的源节点中,存在边属于所生成的m个边数据访存请求的源节点为有效源节点,其余为用于填充的无效源节点。
4.如权利要求3所述的面向图计算的高层次综合方法,其特征在于,每一个IR模块将其产生的结果及需要传递的信息均存储到该IR模块的输出缓冲区中;
一个IR模块Md向另外一个IR模块Ms读取数据时,IR模块Md先将IR模块Ms的输出缓冲区中的数据读取到IR模块Md的输入缓冲区中,然后IR模块Md从其输入缓冲区中读取数据;
其中,为IR模块Md和IR模块Ms为IR模块M1~M17中两个不同的IR模块。
5.如权利要求4所述的面向图计算的高层次综合方法,其特征在于,所述IR模块M6从所述IR模块M5读取源节点及对应的边偏移量后,按照读边并行度m顺序生成m个边数据访存请求,并继续传递源节点信息,包括:
所述IR模块M6从所述IR模块M5读取源节点及对应的边偏移量后,从其输入缓冲区中读取n个源节点,并获得所读取的源节点所对应最大边偏移量e,以及读边计数器的值c;
若c+m=e,则传递n个源节点以及m个边数据访存请求,同时将读边计数器的值增加m;
将所传递n个源节点从所述IR模块M6的输入缓冲区中移除;
若c+m>e,则传递n个源节点以及m个边数据访存请求,同时维持边计数器的值不变;将所传递n个源节点从所述IR模块M6的输入缓冲区中移除;
若c+m<e,且存在源节点v,所述源节点v的右偏移量erv=c+m,则传递所述源节点v及编号小于所述源节点v的源节点,并利用无效源节点进行填充,以一次传递n个源节点,同时传递m个边数据访存请求并将读边计数器的值增加m;将所述源节点v及编号小于所述源节点v的源节点从所述IR模块M6的输入缓冲区中移除;
若c+m<e,且存在源节点u,所述源节点u的左偏移量elu<c+m,右偏移量eru>c+m,则传递所述源节点u及编号小于所述源节点u的源节点,并利用无效源节点进行填充,以一次传递n个源节点,同时传递m个边数据访存请求并将读边计数器的值增加m;将编号小于所述源节点u的源节点从所述IR模块M6的输入缓冲区中移除;
其中,所述读边计数器的初始值为0。
6.如权利要求3所述的面向图计算的高层次综合方法,其特征在于,所述IR模块M10从所述IR模块M9读取目标节点访存请求后进行调度,包括:
所述IR模块M10从所述IR模块M9读取目标节点访存请求后,根据请求地址获得目标节点访存请求所属的片上点数据划分,并将该目标节点访存请求分配到与该片上点数据划分所对应的请求缓冲区中;
其中,片上存储根据读边并行度m被划分为m个片上点数据划分,相应地存在m个请求缓冲区与这m个片上点数据划分一一对应,每个时钟周期通过这m个请求缓冲区向m个片上点数据划分发出访存请求。
7.如权利要求3所述的面向图计算的高层次综合方法,其特征在于,若边的数量大于预设的阈值,则将边数据存储到片外DRAM中,且所述IR模块M3处理边数据访存请求时,从片外DRAM中读取边数据。
8.如权利要求1-7任一项所述的面向图计算的高层次综合方法,其特征在于,还包括:
(7)将所得到的可综合的硬件语言代码转化为流文件,并在FPGA开发板上运行;
(8)若性能不满足预设的性能要求,则修改优化指令后执行步骤(3)-(6),以重新得到可综合的硬件语言代码,并转入步骤(7);否则,操作结束。
9.一种面向图计算的高层次综合系统,其特征在于,包括:图计算程序生成模块、优化模块、编译模块、底层映射模块、约束检验模块以及综合模块;
所述图计算程序生成模块,用于根据预定义的目标编程模型生成用于描述图计算任务的图计算程序;所述目标编程模型是以点为中心的函数式编程模型,所述目标编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作;
所述优化模块,用于通过添加优化指令为图计算任务指定架构参数和微架构参数;所述架构参数包括图计算相关的边处理操作和更新操作;所述微架构参数包括并行度和数据位宽;
所述编译模块,用于根据预先设计好的数据流图及所添加的优化指令将所述图计算程序编译为模块化的数据流中间表示;所述数据流图将各个图操作分解为一个或多个IR模块,并描述了IR模块之间的连接关系;每个IR模块对应数据流图上的一个节点,并且每个IR模块有相应的参数化硬件模版支撑;
所述底层映射模块,用于根据IR模块与硬件模版间的映射关系,将编译得到的数据流中间表示映射到底层架构,并根据所指定的并行度和数据位宽实例化对应硬件模版内的流水线和缓冲区;
所述约束检验模块,用于判断各实例化的参数化硬件模版以及整体架构是否均满足预定义的约束条件,并在判定不满足约束条件时,修改优化指令;
所述综合模块,用于在各实例化的参数化硬件模版以及整体架构均满足预定义的约束条件时,根据各参数化硬件模版以及整体架构生成可综合的硬件语言代码。

说明书全文

一种面向图计算的高层次综合方法及系统

技术领域

[0001] 本发明属于大数据处理领域,更具体地,涉及一种面向图计算的高层次综合方法及系统。

背景技术

[0002] 最近十年来随着生物信息网络、社交网络、网页图等大数据分析问题的出现,图应用变得越来越重要,图是大数据关联属性的最佳表达方式,图计算则是基于图模式进行巨量、稀疏、超维关联的挖掘和分析过程,当前大数据的机器学习深度学习都依赖于图计算,图计算已经成为大数据处理的主流模式之一。
[0003] 图计算具有复杂和不规则的特性,给当前硬件提出了新的挑战。对于通用中央处理器(Central Processing Unit,CPU)而言,即使对于最优的图算法实现其指令级并行度仍然异常的低,绝大多数低于1.0,许多低于0.5;对于面向吞吐量的架构比如图形处理器(Graphics Processing Unit,GPU),按照单指令多数据(Single-Instruction Multiple-Data,SIMD)的方式执行,而图数据的幂律分布和图算法的不规则性天然对SIMD模式不友好,存在负载不均和低带宽利用率问题,研究表明只有低于16%的时间GPU得到完全利用。现场可编程阵列(Field-Programmable Gate Array,FPGA)等可重构硬件,由于其低功耗和可重构特性得到很大关注,目前,研究人员在FPGA上针对图计算设计出了多种有效架构,而由于图计算自身的复杂性和硬件编程过高的壁垒,即使对于专业的研究人员而言,编写完整的图计算硬件代码也是十分耗时的事情。
[0004] 为了使FPGA开发人员从繁琐的硬件细节中解脱出来,高层次综合系统(High Level Synthesis,HLS)系统被提了出来。HLS系统可以将高级语言(大部分词用C/C++)编写的程序转换为寄存器传输级(Register-Transfer Level,RTL)代码(如Verilog、VHDL等),HLS系统还提供了各种优化手段使得开发人员可以从高级语言层面对硬件结构进行优化,部分还提供了可视化的视图方便对每个时钟周期的电路行为进行分析,进一步提高了生成RTL的性能,但是目前与手动最优的RTL在面积和性能等多个方面有较大的差距,针对图计算这种不规则的复杂关联应用,这一现象尤为严重。总的来说,现有的HLS系统无法为图计算在FPGA上的高并行度执行提供有效支撑

发明内容

[0005] 针对现有技术缺陷和改进需求,本发明提供了一种面向图计算的高层次综合方法,其目的在于,为从上层语言生成图应用RTL提供有效支撑,以提高图计算在FPGA上执行的并行度。
[0006] 为实现上述目的,按照本发明的一个方面,提供了一种面向图计算的高层次综合方法,包括:
[0007] (1)根据预定义的目标编程模型生成用于描述图计算任务的图计算程序;
[0008] 目标编程模型是以点为中心的函数式编程模型,目标编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作;
[0009] (2)通过添加优化指令为图计算任务指定架构参数和微架构参数;
[0010] 架构参数包括图计算相关的边处理操作和更新操作;微架构参数包括并行度和数据位宽;
[0011] (3)根据预先设计好的数据流图及所添加的优化指令将图计算程序编译为模化的数据流中间表示;
[0012] 数据流图将各个图操作分解为一个或多个IR模块,并描述了IR模块之间的连接关系;每个IR模块对应数据流图中的一个节点,并且每个IR模块有相应的参数化硬件模版支撑;
[0013] (4)根据IR模块与硬件模版间的映射关系,将编译得到的数据流中间表示映射到底层架构,并根据所指定的并行度和数据位宽实例化对应硬件模版内的流线和缓冲区;
[0014] (5)若各实例化的参数化硬件模版以及整体架构均满足预定义的约束条件,则转入步骤(6);否则,修改优化指令后转入步骤(3);
[0015] (6)根据各实例化的参数化硬件模版以及整体架构生成可综合的硬件语言代码
[0016] 目前,还没有HLS工具可以从上层高级语言为图计算直接生成高并行度的高效流水线结构,一方面因为其表达能有限,用户很难准确描述所要的架构并指定微架构参数,另一方面,对图算法指定高并行度后,会产生大量数据依赖和冲突,没有足够的底层优化去实现高并行度所需的存储和计算结构,导致最后生成的硬件电路实际串行执行或者资源耗尽而无法生成。
[0017] 本发明根据函数式编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作,通过数据流图将各个图操作分解为了一个或多个IR模块,并且定义好了IR模块与底层参数化的硬件模版间的映射关系,提高了上层语言对底层硬件的描述能力,从而能够为从上层语言生成图应用RTL提供有效支撑;并且,在图计算程序编译为数据流IR,以及将数据流IR映射到底层架构的过程中,通过优化指令指定的并行度等微架构参数能够得到传递,并最终作用于底层架构,从而,本发明能够从高级语言层面对硬件结构进行优化,有效提高图计算在FPGA上执行的并行度。
[0018] 进一步地,每一个IR模块均设置有输入缓冲区和输出缓冲区,其中,输入缓冲区用于接收上一模块传递的数据并指示溢出情况,输出缓冲区用于存入当前IR模块产生的结果以供下一个IR模块读取,并根据缓冲区的溢出情况产生控制信号
[0019] 由输入缓冲区和输出缓冲区实现IR模块之间的连接。
[0020] 本发明通过为每一个IR模块都设置相应的输入缓冲区和输出缓冲区,能够有效减少流水线停顿。
[0021] 进一步地,数据流图包括17个IR模块M1~M17;
[0022] IR模块M1用于执行读活跃点集合的图操作;IR模块M1在每一个时钟周期根据读点并行度n生成n个源节点;
[0023] IR模块M2~M3用于执行读边偏移量的图操作;IR模块M2根据读点并行度n从IR模块M1读取n个源节点,以传递源节点信息,同时针对所读取的源节点顺序生成边偏移量访存请求;IR模块M3从IR模块M2获取边偏移量访存请求后进行处理,以读取边偏移量;
[0024] IR模块M3~M8用于执行读边数据的图操作;IR模块M4从IR模块M3接收边偏移量,同时从IR模块M2读取n个源节点继续传递;IR模块M5从IR模块M4读取边偏移量和源节点数据并进行匹配,从而在源节点数据中添加其对应的边偏移量;IR模块M6从IR模块M5读取源节点及对应的边偏移量后,按照读边并行度m顺序生成m个边数据访存请求,并继续传递源节点信息;IR模块M7从IR模块M6读取边数据访存请求和源节点信息,将其中不属于所传递源节点的边标记为无效边,以生成边控制信息;IR模块M3还从IR模块M6获取边数据访存请求后进行处理,以读取边数据;IR模块M8从IR模块M3接收边数据,从IR模块M7接收源节点信息和边控制信息,并传递这三类信息;
[0025] IR模块M9~M13用于执行读目标点数据的图操作;IR模块M9从IR模块M8接收边数据、源节点信息和边控制信息后,根据边数据生成目标节点访存请求,并传递源节点信息和边控制信息;IR模块M10从IR模块M9读取目标节点访存请求后进行调度,以提高访存吞吐量;IR模块M11从IR模块M10读取调度后的目标节点访存请求后进行处理,以读取目标节点数据;IR模块M12从IR模块M11读取目标节点数据后,根据源节点对目标节点进行排序;IR模块M13传递从IR模块M12读取的源节点信息、排序后的目标节点数据以及边控制信息;
[0026] IR模块M14用于执行边数据计算的图操作;IR模块M14从IR模块M13读取目标节点数据后进行边数据计算,以得到更新值,并传递该更新值,同时传递源节点信息及边控制信息;
[0027] IR模块M15用于执行合并计算结果的图操作;IR模块M15从IR模块M14读取更新值后,根据读边并行度m对更新值进行合并,并传递源节点信息及边控制信息;
[0028] IR模块M16~M17用于执行更新结果及活跃点集合的图操作;IR模块M16从IR模块M15的输出缓冲区读取各个有效源节点对应的更新值,并传递源节点信息;IR模块M17从IR模块M16的输出缓冲区读取有效源节点的更新结果,并针对同一有效源节点的更新值进行合并,合并完成后,将更新值写回片上存储;
[0029] 其中,读点并行度n和读边并行度m均为通过优化指令指定的微架构参数,IR模块M6所传递的源节点中,存在边属于所生成的m个边数据访存请求的源节点为有效源节点,其余为用于填充的无效源节点。
[0030] 现有HLS系统为了对底层硬件结构进行优化,在编译过程中,会先将上层语言编译为细粒度的中间表示后,再去挖掘其中的并行机会,实际上对于循环而展开的各种优化手段无法针对性地切实解决这些操作中存在的依赖和冲突问题,其作用于循环内包含的多种操作,无法为每个操作生成特定的支持。
[0031] 本发明所提供的数据流图,定义了上述17个IR模块对图计算任务中的7个主要图操作进行有效支撑,由此能够从更高抽象层次对图计算任务进行模块化的显示表达,精确地提供了优化支持,避免了大量数据冲突,有利于提高图计算的执行并行性。
[0032] 进一步地,每一个IR模块将其产生的结果及需要传递的信息均存储到该IR模块的输出缓冲区中;
[0033] 一个IR模块Md向另外一个IR模块Ms读取数据时,IR模块Md先将IR模块Ms的输出缓冲区中的数据读取到IR模块Md的输入缓冲区中,然后IR模块Md从其输入缓冲区中读取数据;
[0034] 其中,为IR模块Md和IR模块Ms为IR模块M1~M17中两个不同的IR模块。
[0035] 进一步地,IR模块M6从IR模块M5读取源节点及对应的边偏移量后,按照读边并行度m顺序生成m个边数据访存请求,并继续传递源节点信息,包括:
[0036] IR模块M6从IR模块M5读取源节点及对应的边偏移量后,从其输入缓冲区中读取n个源节点,并获得所读取的源节点所对应最大边偏移量e,以及读边计数器的值c;
[0037] 若c+m=e,则传递n个源节点以及m个边数据访存请求,同时将读边计数器的值增加m;将所传递n个源节点从所述IR模块M6的输入缓冲区中移除;
[0038] 若c+m>e,则传递n个源节点以及m个边数据访存请求,同时维持边计数器的值不变;将所传递n个源节点从所述IR模块M6的输入缓冲区中移除;
[0039] 若c+m<e,且存在源节点v,源节点v的右偏移量erv=c+m,则传递源节点v及编号小于源节点v的源节点,并利用无效源节点进行填充,以一次传递n个源节点,同时传递m个边数据访存请求并将读边计数器的值增加m;将源节点v及编号小于源节点v的源节点从IR模块M6的输入缓冲区中移除;
[0040] 若c+m<e,且存在源节点u,源节点u的左偏移量elu<c+m,右偏移量eru>c+m,则传递源节点u及编号小于源节点u的源节点,并利用无效源节点进行填充,以一次传递n个源节点,同时传递m个边数据访存请求并将读边计数器的值增加m;将编号小于源节点u的源节点从IR模块M6的输入缓冲区中移除;
[0041] 其中,读边计数器的初始值为0。
[0042] 通过上述优化调度,在每一个时钟周期,IR模块M6均传递n个源节点以及m个边数据访存请求,由此能够简化底层的硬件实现;并且当源节点的度数较小时,即所传递的边数据访存请求中存在不属于源节点的边时,能够处理这些小度数节点的所有边,由此实现了节点间并行;当源节点的度数较大时,即所传递的边数据访存请求没有完全包含源节点的所有边时,可以处理大度数节点的多条边,由此实现了节点内并行。因此,本发明能够根据图计算任务本身的不规则特性,灵活地实现节点间并行和节点内并行,从而能够有效提高资源利用率,有利于提高执行并行度。
[0043] 进一步地,IR模块M10从IR模块M9读取目标节点访存请求后进行调度,包括:
[0044] IR模块M10从IR模块M9读取目标节点访存请求后,根据请求地址获得目标节点访存请求所属的片上点数据划分,并将该目标节点访存请求分配到与该片上点数据划分所对应的请求缓冲区中;
[0045] 其中,片上存储根据读边并行度m被划分为m个片上点数据划分,相应地存在m个请求缓冲区与这m个片上点数据划分一一对应,每个时钟周期通过这m个请求缓冲区向m个片上点数据划分发出访存请求。
[0046] 由于在读目标点数据时,存在大量随机访存,通过上述调度优化,根据读边并行度将片上存储划分为片上点数据划分的同时,生成对应数量的缓冲区,由此能够减少访存冲突,保证较高的吞吐量。
[0047] 进一步地,若边的数量大于预设的阈值,则将边数据存储到片外DRAM中,且所述IR模块M3处理边数据访存请求时,从片外DRAM中读取边数据。
[0048] 传统的HLS系统利用数组表示存储单元,而实际上,数组很难映射到图计算所需要的各种硬件存储单元;本发明可支持片外数据传输,能够对存储结构进行优化。
[0049] 进一步地,本发明所提供的面向图计算的高层次综合方法,还包括:
[0050] (7)将所得到的可综合的硬件语言代码转化为流文件,并在FPGA开发板上运行;
[0051] (8)若性能不满足预设的性能要求,则修改优化指令后执行步骤(3)-(6),以重新得到可综合的硬件语言代码,并转入步骤(7);否则,操作结束。
[0052] 按照本发明的另一个方面,还提供了一种面向图计算的高层次综合系统,包括:图计算程序生成模块、优化模块、编译模块、底层映射模块、约束检验模块以及综合模块;
[0053] 图计算程序生成模块,用于根据预定义的目标编程模型生成用于描述图计算任务的图计算程序;目标编程模型是以点为中心的函数式编程模型,目标编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作;
[0054] 优化模块,用于通过添加优化指令为图计算任务指定架构参数和微架构参数;架构参数包括图计算相关的边处理操作和更新操作;微架构参数包括并行度和数据位宽;
[0055] 编译模块,用于根据预先设计好的数据流图及所添加的优化指令将图计算程序编译为模块化的数据流中间表示;数据流图将各个图操作分解为一个或多个IR模块,并描述了IR模块之间的连接关系;每个IR模块对应数据流图中的一个节点,并且每个IR模块有相应的参数化硬件模版支撑;
[0056] 底层映射模块,用于根据IR模块与硬件模版间的映射关系,将编译得到的数据流中间表示映射到底层架构,并根据所指定的并行度和数据位宽实例化对应硬件模版内的流水线和缓冲区;
[0057] 约束检验模块,用于判断各实例化的参数化硬件模版以及整体架构是否均满足预定义的约束条件,并在判定不满足约束条件时,修改优化指令;
[0058] 综合模块,用于在各实例化的参数化硬件模版以及整体架构均满足预定义的约束条件时,根据各参数化硬件模版以及整体架构生成可综合的硬件语言代码。
[0059] 总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
[0060] (1)本发明所提供的面向图计算的高层次综合方法及系统,根据函数式编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作,通过数据流图将各个图操作分解为了一个或多个IR模块,并且定义好了IR模块与底层参数化的硬件模版间的映射关系,,提高了上层语言对底层硬件的描述能力,从而能够为从上层语言生成图应用RTL提供有效支撑;并且,在图计算程序编译为数据流IR,以及将数据流IR映射到底层架构的过程中,通过优化指令指定的并行度等微架构参数能够得到传递,并最终作用于底层架构,从而,本发明能够从高级语言层面对硬件结构进行优化,有效提高图计算在FPGA上执行的并行度。总的来说,本发明为从上层语言生成图应用RTL提供了有效支撑,提高了图计算在FPGA上执行的并行度。
[0061] (2)本发明所提供的面向图计算的高层次综合方法及系统,通过数据流图定义了17个IR模块,对图计算任务中的7个主要图操作进行了有效支撑,由此能够从更高抽象层次对图计算任务进行模块化的显示表达,精确地提供了优化支持,避免了大量数据冲突,有利于提高图计算的执行并行性。
[0062] (3)本发明所提供的面向图计算的高层次综合方法及系统,当源节点的度数较小时,能够处理这些小度数节点的所有边,由此实现了节点间并行;当源节点的度数较大时,可以处理大度数节点的多条边,由此实现了节点内并行。因此,本发明能够根据图计算任务本身的不规则特性,灵活地实现节点间并行和节点内并行,从而能够有效提高资源利用率,有利于提高执行并行度。
[0063] (4)本发明所提供的面向图计算的高层次综合方法及系统,在处理读目标点数据访存请求时,根据读边并行度将片上存储划分为片上点数据划分的同时,生成对应数量的缓冲区,由此能够减少访存冲突,保证较高的吞吐量。附图说明
[0064] 图1为本发明实施例提供的面向图计算的高层次综合方法流程图
[0065] 图2为本发明实施例提供的数据流图;
[0066] 图3为本发明实施例提供的以点为中心的函数式编程模型示意图;
[0067] 图4为本发明实施例提供的数据流框架示意图;
[0068] 图5为现有的以点为中心的命令式编程模型示意图;
[0069] 图6为本发明实施例提供的硬件架构示意图。

具体实施方式

[0070] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0071] 在详细解释本发明的技术方案之前,先对图计算相关的术语进行简要介绍:图数据结构建立在反映现实世界的基元上,包括节点(vertices或v),连接不同节点的边(edges或e)和属性(properties),节点和边均有自己的属性,属性可以是任意类型的任意数据;压缩稀疏行(Compressed Sparse Row,CSR),一种图计算编程模型的输入格式,其中引入了边偏移量(offset)的概念,即当前顶点对应边在边表中的偏移量,具体包括左偏移量和右偏移量,左偏移量用于记录顶点对应的边在边表中的起点,右偏移量用于记录顶点对应的边在边表中的终点;在具体算法实现中,一般还会建立一个活跃点集(ActiveVertex),目标节点表示为u,属性值表示为Value,在本发明中,目标编程模型所要求的输入格式即为CSR;在执行模型方面,图计算中常见的执行模型有Push模型和Pull模型两种,在Pull模型中,图算法每轮迭代会调度所有节点,并处理其所有入边数据,由于PageRank类算法更适合采用Pull模型,基于Push的BFS需要同时获取源点和目标点数据,会增加硬件开销,并且基于Notify-Pull/Pull和Push/Pull的BFS的性能差距较低,在本发明中,所采用的执行模型即为Pull作为执行模型。
[0072] 为从上层语言生成图应用RTL提供有效支撑,以提高图计算在FPGA上执行的并行度,本发明所提供面向图计算的高层次综合方法,如图1所示,包括:
[0073] (1)根据预定义的目标编程模型生成用于描述图计算任务的图计算程序;
[0074] 目标编程模型是以点为中心的函数式编程模型,如图2所示,目标编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作;
[0075] 图3所示为本发明中以点为中心的函数式编程模型的伪代码,根据图计算的依赖关系,其中:第0行由用户指定输入的CSR格式图数据的地址,读入图数据,将根据后面的代码自动决定数据的存放方式和地址;第1-2行对应读活跃点集合的图操作,由于是pull执行,所有点都是活跃点,第1行实际上作为本轮迭代是否完成的信号,此处可以选择读点的并行度;第3行对应读边偏移量的图操作,同样可以指定并行度,默认和点并行度保持一致;第4行无实际作用,此目标编程模型不依赖循环驱动执行;第5行对应读边数据的并行度,可以指定读边并行度,由于是顺序读边不依赖于源点数据,当节点度数较大时相当于节点内并行,节点度数较小时相当于节点间并行,保证了硬件资源的持续运行和解决了点间度数不均匀带来的负载均衡问题;第6行对应读目标点数据的图操作,由于此处存在大量随机访存,将根据读边并行度生成对应数量的缓冲区,对片上点数据划分的同时也对访存请求实施调度保证较高的吞吐量;第7行对应边数据计算的图操作,可以指定数据位宽和数据类型;第8行对应合并计算结果的图操作,根据指定的合并逻辑操作,具体架构可根据读边并行度按照“An efficient graph accelerator with parallel data  conflict management”(作者:Yao Pengcheng等)中提供的并行累加架构产生;第10-11行对应更新结果及活跃点集合的图操作,第10行同样根据指定的合并逻辑操作,此处更新结果操作并行度不大于读点并行度,且会对片上点数据存储作相应设置,不会产生读写冲突问题;
[0076] (2)通过添加优化指令为图计算任务指定架构参数和微架构参数;
[0077] 架构参数包括图计算相关的边处理操作和更新操作;
[0078] 微架构参数包括并行度和数据位宽;并行度具体包括读点并行度和读边并行度,根据实际的需要,通过优化指令所指定的微架构参数还可包括数据类型和格式调整等;
[0079] (3)根据预先设计好的数据流图及所添加的优化指令将图计算程序编译为模块化的数据流中间表示;
[0080] 数据流图将各个图操作分解为一个或多个IR模块,并描述了IR模块之间的连接关系;每个IR模块对应数据流图中的一个节点,并且每个IR模块有相应的参数化硬件模版支撑;
[0081] 作为一种优选的实施方式,每一个IR模块均设置有输入缓冲区和输出缓冲区,其中,输入缓冲区用于接收上一模块传递的数据并指示溢出情况,输出缓冲区用于存入当前IR模块产生的结果以供下一个IR模块读取,并根据缓冲区的溢出情况产生控制信号
[0082] 由输入缓冲区和输出缓冲区实现IR模块之间的连接;
[0083] 通过为每一个IR模块都设置相应的输入缓冲区和输出缓冲区,能够有效减少流水线停顿;
[0084] 在本发明实施例中,如图4所示,数据流图包括17个IR模块M1~M17,依次编号为1~17;
[0085] IR模块M1用于执行读活跃点集合的图操作;IR模块M1在每一个时钟周期根据读点并行度n生成n个源节点;
[0086] IR模块M2~M3用于执行读边偏移量的图操作;IR模块M2根据读点并行度n从IR模块M1读取n个源节点,以传递源节点信息,同时针对所读取的源节点顺序生成边偏移量访存请求;IR模块M3从IR模块M2获取边偏移量访存请求后进行处理,以读取边偏移量;
[0087] IR模块M3~M8用于执行读边数据的图操作;IR模块M4从IR模块M3接收边偏移量,同时从IR模块M2读取n个源节点继续传递;IR模块M5从IR模块M4读取边偏移量和源节点数据并进行匹配,从而在源节点数据中添加其对应的边偏移量;IR模块M6从IR模块M5读取源节点及对应的边偏移量后,按照读边并行度m顺序生成m个边数据访存请求,并继续传递源节点信息;IR模块M7从IR模块M6读取边数据访存请求和源节点信息,将其中不属于所传递源节点的边标记为无效边,以生成边控制信息;IR模块M3还从IR模块M6获取边数据访存请求后进行处理,以读取边数据;IR模块M8从IR模块M3接收边数据,从IR模块M7接收源节点信息和边控制信息,并传递这三类信息;
[0088] IR模块M9~M13用于执行读目标点数据的图操作;IR模块M9从IR模块M8接收边数据、源节点信息和边控制信息后,根据边数据生成目标节点访存请求,并传递源节点信息和边控制信息;IR模块M10从IR模块M9读取目标节点访存请求后进行调度,以提高访存吞吐量;IR模块M11从IR模块M10读取调度后的目标节点访存请求后进行处理,以读取目标节点数据;IR模块M12从IR模块M11读取目标节点数据后,根据源节点对目标节点进行排序;IR模块M13传递从IR模块M12读取的源节点信息、排序后的目标节点数据以及边控制信息;
[0089] IR模块M14用于执行边数据计算的图操作;IR模块M14从IR模块M13读取目标节点数据后进行边数据计算,以得到更新值,并传递该更新值,同时传递源节点信息及边控制信息;
[0090] IR模块M15用于执行合并计算结果的图操作;IR模块M15从IR模块M14读取更新值后,根据读边并行度m对更新值进行合并,并传递源节点信息及边控制信息;
[0091] IR模块M16~M17用于执行更新结果及活跃点集合的图操作;IR模块M16从IR模块M15的输出缓冲区读取各个有效源节点对应的更新值,并传递源节点信息;IR模块M17从IR模块M16的输出缓冲区读取有效源节点的更新结果,并针对同一有效源节点的更新值进行合并,合并完成后,将更新值写回片上存储;
[0092] 其中,读点并行度n和读边并行度m均为通过优化指令指定的微架构参数,IR模块M6所传递的源节点中,存在边属于所生成的m个边数据访存请求的源节点为有效源节点,其余为用于填充的无效源节点;
[0093] 作为进一步优选的实施方式,每一个IR模块将其产生的结果及需要传递的信息均存储到该IR模块的输出缓冲区中;
[0094] 一个IR模块Md向另外一个IR模块Ms读取数据时,IR模块Md先将IR模块Ms的输出缓冲区中的数据读取到IR模块Md的输入缓冲区中,然后IR模块Md从其输入缓冲区中读取数据;
[0095] 其中,为IR模块Md和IR模块Ms为IR模块M1~M17中两个不同的IR模块;
[0096] (4)根据IR模块与硬件模版间的映射关系,将编译得到的数据流中间表示映射到底层架构,并根据所指定的并行度和数据位宽实例化对应硬件模版内的流水线和缓冲区;
[0097] (5)若各实例化的参数化硬件模版以及整体架构均满足预定义的约束条件,则转入步骤(6);否则,修改优化指令后转入步骤(3);
[0098] 根据实际的实施情况,约束条件可为对资源、时序等的要求;
[0099] 当实例化的参数化硬件模版以及整体架构不满足资源、时序等约束条件时,相应地,对优化指令的修改具体可以是减小并行度、优化数据划分方法、减少数据的复制和优化流水结构等;
[0100] (6)根据各实例化的参数化硬件模版以及整体架构生成可综合的硬件语言代码;
[0101] 具体的硬件描述语言可根据实际需要选择VHDL、Verilog等,所生成的硬件语言代码即为RTL代码。
[0102] 目前,还没有HLS工具可以从上层高级语言为图计算直接生成高并行度的高效流水线结构,一方面因为其表达能力有限,用户很难准确描述所要的架构并指定微架构参数,另一方面,对图算法指定高并行度后,会产生大量数据依赖和冲突,没有足够的底层优化去实现高并行度所需的存储和计算结构,导致最后生成的硬件电路实际串行执行或者资源耗尽而无法生成。
[0103] 上述面向图计算的高层次综合方法,根据函数式编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作,通过数据流图将各个图操作分解为了一个或多个IR模块,并且定义好了IR模块与底层参数化的硬件模版间的映射关系,提高了上层语言对底层硬件的描述能力,从而能够为从上层语言生成图应用RTL提供有效支撑;并且,在图计算程序编译为数据流IR,以及将数据流IR映射到底层架构的过程中,通过优化指令指定的并行度等微架构参数能够得到传递,并最终作用于底层架构,从而,能够从高级语言层面对硬件结构进行优化,有效提高图计算在FPGA上执行的并行度。总体而言,上述面向图计算的高层次综合方法,能够从上层语言生成图应用RTL提供有效支撑,有效提高图计算在FPGA上执行的并行度。
[0104] 现有HLS系统为了对底层硬件结构进行优化,在编译过程中,会先将上层语言编译为细粒度的中间表示后,再去挖掘其中的并行机会,实际上对于循环而展开的各种优化手段无法针对性地切实解决这些操作中存在的依赖和冲突问题,其作用于循环内包含的多种操作,无法为每个操作生成特定的支持。
[0105] 上述面向图计算的高层次综合方法中,所提供的数据流图,定义了上述17个IR模块对图计算任务中的7个主要图操作进行有效支撑,由此能够从更高抽象层次对图计算任务进行模块化的显示表达,精确地提供了优化支持,避免了大量数据冲突,有利于提高图计算的执行并行性。
[0106] 在一个优选的实施方式中,上述面向图计算的高层次综合方法中,IR模块M6从IR模块M5读取源节点及对应的边偏移量后,按照读边并行度m顺序生成m个边数据访存请求,并继续传递源节点信息,包括:
[0107] IR模块M6从IR模块M5读取源节点及对应的边偏移量后,从其输入缓冲区中读取n个源节点,并获得所读取的源节点所对应最大边偏移量e,以及读边计数器的值c;
[0108] 若c+m=e,则传递n个源节点以及m个边数据访存请求,同时将读边计数器的值增加m;将所传递n个源节点从IR模块M6的输入缓冲区中移除;
[0109] 若c+m>e,则传递n个源节点以及m个边数据访存请求,同时维持边计数器的值不变;将所传递n个源节点从IR模块M6的输入缓冲区中移除;
[0110] 若c+m<e,且存在源节点v,源节点v的右偏移量erv=c+m,则传递源节点v及编号小于源节点v的源节点,并利用无效源节点进行填充,以一次传递n个源节点,同时传递m个边数据访存请求并将读边计数器的值增加m;将源节点v及编号小于源节点v的源节点从IR模块M6的输入缓冲区中移除;
[0111] 若c+m<e,且存在源节点u,源节点u的左偏移量elu<c+m,右偏移量eru>c+m,则传递源节点u及编号小于源节点u的源节点,并利用无效源节点进行填充,以一次传递n个源节点,同时传递m个边数据访存请求并将读边计数器的值增加m;将编号小于源节点u的源节点从IR模块M6的输入缓冲区中移除;从而在下一轮源节点传递时,会从源节点u开始传递;
[0112] 其中,读边计数器的初始值为0。
[0113] 通过上述优化调度,在每一个时钟周期,IR模块M6均传递n个源节点以及m个边数据访存请求,由此能够简化底层的硬件实现;并且当源节点的度数较小时,即所传递的边数据访存请求中存在不属于源节点的边时,能够处理这些小度数节点的所有边,由此实现了节点间并行;当源节点的度数较大时,即所传递的边数据访存请求没有完全包含源节点的所有边时,可以处理大度数节点的多条边,由此实现了节点内并行。
[0114] 现有的HLS系统采用命令式编程,图5所示为一种现有的命令式编程模型的伪代码示意图,其中,第1行的循环代表依次处理所有活跃顶点,第4行的循环代表依次处理当前活跃顶点的所有边;首先考虑对嵌套循环进行粗粒度流水,即第2-3行作为一个流水阶段,第4-8行的循环整体作为一个流水阶段(目前只有spatial可以实现任意位置的粗粒度流水),接着对第4-8行代表的循环整体进行细粒度流水,即使达到了HLS工具最大的流水能力,高并行度情况下依然会有严重的流水停滞;之后考虑添加并行指令,分为点间并行和点内并行,分别对应于第1行的循环并行和第4行的循环并行,两者可同时添加;对于点内并行而言,对于高并行度的点内并行(图加速器可达到并行度为16或32),在顶点度数较小时每个周期都有许多计算资源空闲,点间并行情况与点内并行类似,由于图数据的幂律分布特性,并行流水线间存在负载不均的问题。
[0115] 对比可知,上述面向图计算的高层次综合方法,能够根据图计算任务本身的不规则特性,灵活地实现节点间并行和节点内并行,从而能够有效提高资源利用率,有利于提高执行并行度。
[0116] 在一个优选的实施方式中,在上述面向图计算的高层次综合方法中,IR模块M10从IR模块M9读取目标节点访存请求后进行调度,包括:
[0117] IR模块M10从IR模块M9读取目标节点访存请求后,根据请求地址获得目标节点访存请求所属的片上点数据划分,并将该目标节点访存请求分配到与该片上点数据划分所对应的请求缓冲区中;
[0118] 其中,片上存储根据读边并行度m被划分为m个片上点数据划分,相应地存在m个请求缓冲区与这m个片上点数据划分一一对应,每个时钟周期通过这m个请求缓冲区向m个片上点数据划分发出访存请求。
[0119] 由于在读目标点数据时,存在大量随机访存,通过上述调度优化,根据读边并行度将片上存储划分为片上点数据划分的同时,生成对应数量的缓冲区,由此能够减少访存冲突,保证较高的吞吐量。
[0120] 在一个优选的实施方式中,上述面向图计算的高层次综合方法中,若边的数量大于预设的阈值,则将边数据存储到片外DRAM中,且所述IR模块M3处理边数据访存请求时,从片外DRAM中读取边数据;具体的阈值可根据实际的片上存储容量确定。
[0121] 传统的HLS系统利用数组表示存储单元,而实际上,数组很难映射到图计算所需要的各种硬件存储单元;本发明可支持片外数据传输,能够对存储结构进行优化。
[0122] 为了实现FPGA上板运行,如图1所示,上述面向图计算的高层次综合方法,还可包括:
[0123] (7)将所得到的可综合的硬件语言代码转化为流文件,并在FPGA开发板上运行;
[0124] (8)若性能不满足预设的性能要求,则修改优化指令后执行步骤(3)-(6),以重新得到可综合的硬件语言代码,并转入步骤(7);否则,操作结束;
[0125] 具体的性能要求可根据实际的图计算任务需求相应设定,当性能不满足性能要求时,对优化指令的修改具体可以是减小并行度、优化数据划分方法、减少数据的复制和优化流水结构等。
[0126] 在本实施例中,按照上述面向图计算的高层次综合方法实现FPGA上板运行后,最终实现的底层硬件架构如图6所示,实际流水按照数据流中间表示分为17个IR模块,其中,用于执行读活跃点集合、读边偏移量、读边数据以及读目标点数据的模块为图计算无关的IR模块,用于执行边数据计算、合并计算结果以及更新结果及活跃点集合的IR模块为图计算相关的模块;对于图计算无关的模块,根据用户指定的并行度和数据位宽类型等微架构参数实例化对应的点传递流水线、边传递流水线、边控制信号传递流水线和缓冲区的大小以及各个模块内部控制信号的参数;对于图计算相关的模块,按照用户指令参数实例化,由于仅包含计算操作,不包含控制和访存操作,根据计算操作生成相应的基本硬件计算器在对应模块内连接即可,模块间的连接由上述输入缓冲区及输出缓冲区实现。如图6所示,在本发明实施例中,片上实例化的流水线主要包括读活跃点集合(Read active vertex set)流水线、读边数据(Read edge data)流水线、读目标点数据(Read destination vertex data)流水线、任务调度(Processing scheduling)流水线、边计算(Edge process)流水线、合并计算结果(Merge process result)流水线,以及更新节点和活跃点集(Update vertex data and active vertex)流水线;实际流水按照IR分为17个IR模块,每个IR模块有参数化的硬件模版支撑。
[0127] 本发明还提供了一种面向图计算的高层次综合系统,用于执行上述面向图计算的高层次综合方法的各步骤;该系统包括:图计算程序生成模块、优化模块、编译模块、底层映射模块、约束检验模块以及综合模块;
[0128] 图计算程序生成模块,用于根据预定义的目标编程模型生成用于描述图计算任务的图计算程序;目标编程模型是以点为中心的函数式编程模型,目标编程模型将图计算任务划分为读活跃点集合、读边偏移量、读边数据、读目标点数据、边数据计算、合并计算结果,以及更新结果及活跃点集合这七个图操作;
[0129] 优化模块,用于通过添加优化指令为图计算任务指定架构参数和微架构参数;架构参数包括图计算相关的边处理操作和更新操作;微架构参数包括并行度和数据位宽;
[0130] 编译模块,用于根据预先设计好的数据流图及所添加的优化指令将图计算程序编译为模块化的数据流中间表示;数据流图将各个图操作分解为一个或多个IR模块,并描述了IR模块之间的连接关系;每个IR模块表示对应数据流图中的一个节点,并且每个IR模块有相应的参数化硬件模版支撑;
[0131] 底层映射模块,用于根据IR模块与硬件模版间的映射关系,将编译得到的数据流中间表示映射到底层架构,并根据所指定的并行度和数据位宽实例化对应硬件模版内的流水线和缓冲区;
[0132] 约束检验模块,用于判断各实例化的参数化硬件模版以及整体架构是否均满足预定义的约束条件,并在判定不满足约束条件时,修改优化指令;
[0133] 综合模块,用于在各实例化的参数化硬件模版以及整体架构均满足预定义的约束条件时,根据各参数化硬件模版以及整体架构生成可综合的硬件语言代码;
[0134] 在本发明实施例中,各模块的具体实施方式可参考上述方法实施例中的描述,在此将不作复述。
[0135] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈