一种面向多核集群的数据流编译优化方法

文档序号:6545600阅读:128来源:国知局
一种面向多核集群的数据流编译优化方法
【专利摘要】本发明公开了一种面向多核集群系统的数据流编译优化方法,包括:确定计算任务与处理核映射的任务划分与调度步骤;根据任务划分与调度结果构造集群节点间和集群节内核间的流水线调度表的层次流水线调度步骤;根据所述多核处理器的结构特性、集群节点间的通信情况和数据流程序在多核处理器上的执行情况做做基于cache的缓存优化步骤。本发明的方法结合了数据流程序与系统结构相关的优化技术,充分发挥高负载均衡性以及同步与异步混合流水代码在多核集群上的高并行性,而且针对多核集群上的缓存与通信方式,对程序的缓存访问和通信传输进行了优化,进一步地提高了程序的执行性能,具有更小的执行时间。
【专利说明】一种面向多核集群的数据流编译优化方法
【技术领域】
[0001]本发明属于计算机编译【技术领域】,更具体地,涉及一种面向多核集群的数据流编译优化方法。
【背景技术】
[0002]随着半导体技术的发展,多核处理器已经被验证为开发并行性的一个可行平台。多核集群并行系统以强大的并行计算能力和良好的扩展性成为一种重要的并行计算平台设计。多核集群系统提供了强大的计算处理能力,同时也将更多的负担交给了编译器和编程人员以有效地开发核间的粗粒度并行。数据流编程提供了一种可行的方法来开发多核架构的并行性。在这种模型中,每个结点代表了一个计算任务,每条边代表了计算任务之间的数据流动。每个计算任务都是一个独立的计算单元。它有独立的指令流和地址空间,计算任务之间的数据流动通过先进先出的通信队列来实现。数据流编程模型以数据流模型为基础,以数据流编程语言为实现方式。数据流编译即将数据流编程语言转换为底层目标可执行程序所涉及到的编译技术。其中,编译优化对数据流程序在目标处理核上的运行性能起到了决定性作用。
[0003]麻省理工学院编译实验室公开了一种流编程语言Streamlt。该语言基于Java,对Java进行了流扩展引入了 Filter概念。Filter是最基本的计算单元,它是一个单输入单输出的程序块。Filter中各个处理过程用Work来描述,每个Work之间采用Push、Pop和Peek操作以FIFO方式进行通信。同时,针对下一代高性能计算机(Raw)提出了一种流编译优化技术:首先,编译器采用数据分裂和融合相结合的方法,对计算结点进行分裂与融合,以增加计算与通信开销比;然后把处理过后的计算结点映射到各个处理核上,达到负载均衡,各处理核采用流水线的执行方式,处理核间采用显示的通信来实现数据传输。
[0004]StreamIt的流编译优化技术为流编程模型在多核处理器上的调度问题提出了一种解决方案。通过将计算任务分配到各个处理核上,实现了负载均衡,确保了计算任务在处理核上的并行执行。但是,存在以下缺陷:(I)调度到处理核上的各个计算和通信是分离的,在流水线中单独为其分配了独立的通信时间,因此增加了通信的开销;(2)没有考虑到处理核的底层存储分配优化问题和通信优化问题;(3)编译优化方法没有针对多核集群系统底层的体系架构特性进行优化。总之,对多核集群系统而言,它在提供强大计算能力的同时,也向程序员开放了其层次性的存储结构与软件通信机制。现有的流编译优化方法,并没有考虑到底层的体系架构,没有充分利用系统硬件资源如存储资源来提高程序的执行效率。

【发明内容】

[0005]本发明的目的在于提供一种面向多核集群的数据流编译优化方法,针对多核集群系统的架构,对数据流程序进行优化处理,较大程度地提高了数据流程序的执行性能。
[0006]本发明采用的优化方法以数据流编译器前端产生的中间表示一同步数据流图作为输入,对其依次进行任务划分与调度、层次性流水线调度、缓存优化三级处理,最后生成可执行代码。具体步骤如下:
[0007](I)确定计算任务与多核集群计算节点以及处理核映射的任务划分与调度步骤
[0008]数据流图中的结点代表计算任务,边代表计算任务间的通信。首先,根据集群中节点的数目对同步数据流图进行进程级任务划分,该子步骤采用Group任务划分策略,目标为最小化节点间通信开销最大化程序执行性能,划分时既要考虑负载均衡又要考虑通信开销最小化,将每个计算任务分配到的对应集群节点上。其次,根据每个集群节点上的计算任务,为每个计算任务分配到集群节点的处理核上进行线程级任务划分,该子步骤采用复制分裂算法,将负载大的计算任务进行分裂,目标是实现集群节点内部处理核上的负载均衡。
[0009](2)根据任务划分与调度结果构造集群节点间和集群节内核间的流水线调度的层次流水线调度步骤
[0010]同步流水线利用一个全局同步时钟保证流水线各个阶段上的执行任务同时完成,异步软件流水线各个子任务间采用数据驱动的方式执行。首先,对同步数据流图进行异步流水线调度,确定集群节点间的任务执行过程,该步骤将各个进程上的计算任务整体随机映射到集群计算节点上,完成进程与集群节点的映射;其次,根据集群节点内计算任务间的依赖关系,为每个计算任务(结点)以分配其在流水线中的阶段号,完成同步流水线构造;最后,利用以上两种信息,构造层次流水调度表。
[0011](3)根据所述多核处理器的结构特性、集群节点间的通信情况和数据流程序在多核处理器上的执行情况做缓存优化步骤
[0012]当计算任务(节点)在执行时,计算任务所在的处理核对缓存的使用会存在伪共享,对程序执行的性能产生较大的影响。
[0013]对X86架构的通用多核处理器进行分析,采用cache line行填充机制和稳态扩展技术相结合消除程序执行存在的伪共享,对缓存的使用进行优化。
[0014]本发明将数据流调度与多核集群系统的结构相关优化结合起来,实现了对数据流程序的三级优化过程,具体包括任务划分与调度、层次性流水线调度、缓存优化,提高了数据流程序在目标平台上的执行性能。具体而言,本发明具有以下优点:
[0015](I)提高了程序的并行性。通过对问题的形式化描述,本发明将数据流图调度到多核集群系统的处理核上抽象为一个贪心问题,从而为数据流程序构造了层次性的流水调度模型,将任务均映射到每个处理核上,实现低通信开销和负载均衡,提高了程序的并行性。
[0016](2)减小开销。本发明提出了一个同步与异步混合的层次流水线调度模型充分利用系统的计算与通信资源,同时,针对集群节点内部的缓存的使用进行了优化,提高数据访问的局部性和缓存利用率,增强程序的运行效率。
【专利附图】

【附图说明】
[0017]图1为本发明方法在数据流编译系统中的结构框架图;
[0018]图2为本发明实施例中数据流程序在集群节点内部复制分裂算法流程图;
[0019]图3为本发明实施例中数据流程序在集群上异步流水线执行示例图;
[0020]图4(a)为本发明实施例中同步软件流水调度中,任务划分、阶段赋值的示例图;
[0021]图4(b)为图4(a)所对应的软件流水执行过程示例图;[0022]图5 (a)为本发明实施例中数据流程序执行稳态扩展技术消除伪共享任务执行示意图;
[0023]图5(b)为图5(a)中的任务伪共享消除前示意图;
[0024]图5(c)为图5(a)中的任务伪共享消除后示意图。
【具体实施方式】
[0025]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0026]如图1所示为本实施例在流编译系统中的结构框架图,数据流程序经过数据
流编译器前端解析之后会生成一个中间表示-同步数据流图(Synchronous Data
Flow, SDF),随后依次经过任务划分与调度、层次性流水线调度、缓存优化和通信优化三级优化过程,最后生成经消 息传递接口(Message Passing Interface,MPI)封装的目标代码,完成编译。
[0027](I)确定计算任务与多核集群计算节点以及处理核映射的任务划分与调度步骤
[0028]该步骤包括两个子步骤:进程级任务划分和线程级任务划分。在多核集群系统中,由于不同的节点具有不同的网络地址,节点间需要通过网络进行通信,它的通信代价大,而节点内的通信属于机器内部通信,它的通信代价小,所以对数据流程序任务划分需要区分节点间和节点内核间的这些差异。对集群下不同层次的任务划分描述如下:进程级任务划分在保证节点间负载均衡的前提下最小化节点间通信开销,且划分结果间不出现环路;线程级任务划分在保证节点间负载均衡的前提下最小化同步开销,且尽可能保证数据局部性。具体步骤如下:
[0029](1.1)进程级任务划分。进程任务划分将确定计算单元与集群节点之间的映射,在执行时为了摊销数据流程序单位数据量的通信开销,进程间数据通信采用块通信机制,只有当缓冲区被填满或者强行刷新缓存时才会触发消息传递。为了防止程序执行时死锁,在进程级划分要避免划分间的数据依赖出现环路。针对多核集群的同步数据流图的进程级任务划分提出了 Group任务划分策略,它采用了贪心算法进行实现。Group任务划分引入group结构,group表示由同步数据流图中一个或多个计算单元组成的集合。初始时将同步数据流图每一个计算单元作为一个group对待,group间依赖关系与计算单元间一致。Group任务划分主要有四个阶段组成:
[0030](1.1.1)预处理阶段。该阶段针对同步数据流图中计算单元多输入多输出而设计,该阶段将多个计算单元融合成一个group,降低了 group内单个计算单元与其他group中的计算单元通信边的数目。
[0031](1.1.2)Group粗粒度阶段。该阶段对预处理后的group图进行粗化处理,将多个相邻的group融合成一个,在粗粒度时要避免group图中出现环路。一对group融合产生的收益称为粗化收益,计算公式如下所示:.commi SrcGroup' SnkGroup)
[0032]
【权利要求】
1.一种面向多核集群的数据流编译优化方法,其特征在于,包括以下步骤: 确定计算任务与多核集群计算节点以及处理核映射的任务划分与调度步骤; 根据任务划分与调度结果构造集群节点间和集群节内核间的流水线调度的层次流水线调度步骤; 根据所述多核处理器的结构特性、集群节点间的通信情况和数据流程序在多核处理器上的执行情况做缓存优化步骤。
2.根据权利要求1所述的面向多核集群的数据流流编译优化方法,其特征在于,所述的任务划分与调度步骤具体为: 首先,对同步数据流图进行进程级任务划分,确定每个计算任务分配到的对应集群节占.其次,对集群节点内的同步数据流图中的任务进行线程级任务划分,确定每个计算任务分配到的对应集群节点内的处理核。
3.根据权利要求2所述的面向多核集群的数据流流编译优化方法,其特征在于,所述任务划分通过将其转化为图划分问题,并根据进程级和线程级任务划分目标的差异分别利用Group划分策略和复制分裂策略对其进行求解而得到。
4.根据权利要求3所述的面向多核集群的数据流流编译优化方法,其特征在于,所述的进程级任务划分采用Group划分策略步骤具体为: 预处理阶段,将多个计算单元融合成一个group,降低了 group内单个计算单元与其他group中的计算单元通信边的数目; 粗粒度阶段,将多个相邻的group融合成一个; 初始划分阶段,将group映射到集群计算节点上,同时确定计算节点与集群节点之间的映射; 细粒度调整阶段,将初始划分完各划分上的边界节点进行调优,减少通信开销。
5.根据权利要求2至4任一项所述的面向多核集群的数据流流编译优化方法,其特征在于,所述的线程级任务划分步骤具体为: 首先,采用多层K路图划分算法对各个集群节点内部的计算单元进行初始划分; 其次,采用复制分裂算法对负载大的计算单元进行分裂,降低计算单元的粒度; 最后,重新使用多层K路图划分算法对经过分裂后的图进行划分,保证处理核上的负载均衡和良好的局部性。
6.根据权利要求1至5任一项所述的面向多核集群的数据流流编译优化方法,其特征在于,所述的层次流水线调度步骤具体为: 首先,对集群节点间采用异步流水线调度。 其次,对集群节点内部采用同步流水线调度。
7.根据权利要求6所述的面向多核集群的数据流流编译优化方法,其特征在于,所述进行的异步流水线调度的方法是采用生产者和消费者模型将进程级划分的结果随机分配到集群的各个节点上。
8.根据权利要求6或7所述的面向多核集群的数据流流编译优化方法,其特征在于,所述进行的同步流水线调度的具体过程如下: 首先,对进程内部的数据流图中的计算结点进行拓扑排序,形成拓扑序列;其次,对拓扑序列中的每个计算节点将其结点的阶段号初始化为O,然后,判断其与前驱结点是否在同一个集群节点上,如果在同一个集群节点上,判断其与前驱结点是否在同一个处理核上,如果在同一个处理核上,那么它与前驱节点的阶段相同,如果不在同一个处理核上,那么其阶段号比前驱结点的阶段号大1,如果不在同一个集群节点上,那么其阶段号与该前驱节点无关,通过遍历计算节点的拓扑序列,对所有结点进行阶段号赋值,构造集群节点内部的同步流水线调度表。
9.根据权利要求6至8任一项所述的面向多核集群的数据流流编译优化方法,其特征在于,所述进行缓存优化具体过程为: 首先,采用cache line填充机制消除集群节点内同步软件流水各阶段间同步造成的伪共孚; 其次,采用稳态扩 展技术消除计算单元数据传输造成的伪共享。
【文档编号】G06F9/50GK103970580SQ201410185945
【公开日】2014年8月6日 申请日期:2014年5月5日 优先权日:2014年5月5日
【发明者】于俊清, 张维维, 唐九飞, 何云峰, 管涛 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1