一种面向x86多核处理器的数据流程序调度方法

文档序号:6545601阅读:186来源:国知局
一种面向x86多核处理器的数据流程序调度方法
【专利摘要】本发明公开了一种面向多核系统的数据流编译优化方法,包括:确定计算任务与处理器核映射的任务划分和构造软件流水线调度;根据所述多核处理器的结构特性和数据流程序在多核处理器上的执行情况做核间缓存(Cache)优化步骤。本发明的方法将数据流并行调度与多核架构的缓存结构相关优化结合起来,充分发挥了多核处理器的高并行性,而且针对多核系统的层次性缓存结构和缓存原理,优化了计算任务对通信缓冲区的访问,进一步提高了目标程序的吞吐率。
【专利说明】—种面向X86多核处理器的数据流程序调度方法
【技术领域】
[0001]本发明属于计算机编译【技术领域】,具体涉及一种面向X86多核处理器的数据流程序调度方法。
【背景技术】
[0002]随着半导体技术的发展,多/众核平台作为新的计算平台,它为各类应用提供了强大的并行计算能力,但它也将如何充分挖掘程序的并行性以及如何充分利用资源等问题暴露给了编程人员。数据流编程模型提供了一种可行的方法来开发多核架构的并行性。多媒体处理领域的主流应用像视频/图像处理、绘图、信号和网络等激发了像Streamlt, Brook, CUDA, SPUR和Cg等流编程语言。在数据流编程模型中,目标应用被表示为一个数据流图,图中的顶点表示计算任务,而顶点间的有向边表现计算任务间的通信。采用数据流编程模型,开发人员只要实现领域相关的算法,而数据流程序的调度工作主要由第三方开发的编译优化系统完成。
[0003]面向多核平台的数据流程序调度的核心是提高多核处理器计算资源的利用率。它的实现依赖于两个关键技术:并行调度与缓存优化。
[0004]多核并行调度的负载均衡性直接关系到多核处理器的利用率。虽然数据流程序存在任务并行性、数据并行性和流水并行性,但是并行调度算法必须考虑各个并行控制流之间的同步开销、通信开销以及并行粒度是否适用于目标系统,并确保各个处理器核间的任务负载均衡。软件流水调度被认为是能够充分利用数据流程序特有并行性实现高吞吐率的有效方法。软件流水调度需要完成数据流程序计算任务的划分,然而常用任务分配策略都没有充分利用数据流程序的特有并行性。Manjunath等人采用计算单元的水平分裂策略,充分利用了数据流程序的数据并行性优化划分结果的负载均衡。另外,为了满足数据流程序计算任务间的数据依赖关系,软件流水调度需要在时间维度上指定计算任务间的相对计算顺序。阶段赋值算法根据任务划分结果和计算任务间的数据依赖性为目标程序构造软件流水线调度。软件流水调度策略虽然充分利用了数据流程序的流水并行性,但是必须为计算单元分配通信缓冲区,提高了存储消耗。Jongsoo等人提出Team调度算法解决该问题,根据计算任务的计算通信开销对目标程序的计算任务进行分组,以组为单位进行划分和调度。
[0005]对于多核共同竞争主存访问带宽的多核平台,缓存优化的有效性在很大程度上决定了程序的性能。首先,根据缓存系统的原理,局部性高的程序缓存命中率更高。但是当前的编译器无法提供复杂的基于缓存优化的转换,因而缓存优化工作变成了程序员的负担。Janis等人提出了一种基于数据复用距离(Data Reuse Distance,DRD)分析技术进行缓存优化。DRD分析方法将缓存存储器模拟为一个栈,如果对同一数据两次访问时刻点之间访问的数据大小超过缓存存储容量,则表示缓存未命中。Yunlia等人扩展了在传统单核处理器平台上程序的DRD分析方法,提出了并发复用距离方法。另外,缓存系统是以缓存行为单位进行缓存的,底层系统必须采用诸如MESI协议保证核间缓存行的一致性。当映射到同一个缓存行的不同变量被多个处理器核并发访问时,多个处理器核更新同一缓存行,这就会导致缓存伪共享的发生。缓存伪共享不仅加重了处理器核对总线带宽的竞争,而且将导致缓存行数据的更新,降低缓存系统的利用率,严重降低系统的性能。
[0006]虽然面向多核处理器的数据流程序任务调度与缓存优化取得了很大的进步,但是还有许多问题需要克服。一方面,任务划分能够保证处理器核间的负载均衡,但是并没有充分利用数据流程序的局部性特征,不但使得缓存系统的利用率低,而且程序在运行时并行粒度太小,同步开销的比重过大。另一方面,多核并行调度时不同核间会相互干扰,如何利用数据流程序中计算任务间的通信信息实现核间优化也是当前所缺乏的。

【发明内容】

[0007]本发明的目的在于提供一种面向多核处理器的数据流程序调度方法,其目的在于通过优化并行调度的负载均衡和并行粒度,并针对多核处理器的缓存特征进行缓存优化,解决多核处理器并行调度与主存访问延迟问题。
[0008]本发明采用的优化方法以数据流编译器前端产生的中间表示一同步数据流图作为输入,对其依次进行任务划分与调度和核间缓存优化两级处理,最后生成可执行代码。具体步骤如下:
[0009](I)确定计算任务与处理器核映射的任务划分与调度步骤
[0010]数据流图中的结点代表计算任务,边代表计算任务间的通信。首先,根据目标程序的计算量和通信量对数据流程序进行扩大调度,从而提高程序的局部性和并行粒度。然后,针对通信量大的相邻计算单元进行融合操作,减少通信开销。最后,利用计算任务的数据并行性,采用迭代水平分裂算法改进负载均衡,并构造软件流水调度。
[0011](2)根据所述多核处理器的结构特性和数据流程序在多核处理器上的执行情况做核间缓存(Cache)优化步骤
[0012]针对缓存一致性要求,对于滑动窗口机制和翻转窗口机制分别进行了缓存伪共享消除,从而减少了多核并行调度时相互间的干扰。另外根据划分结果的通信分布和层次性缓存结构特征,实现了逻辑线程到物理核的映射,提高了缓存利用率。
[0013]本发明将数据流并行调度与多核架构的缓存结构相关优化结合起来,实现了对数据流程序的两级优化过程,具体包括任务划分与调度、核间缓存优化,提高了数据流程序在目标平台上的执行性能。具体而言,本发明具有以下优点:
[0014](I)减少同步和通信开销。通过对数据流程序进行预处理,本发明充分利用了数据流程序的任务局部性特征,并减少相邻计算任务间的通信开销,提高了多核处理器核的利用率。
[0015](2)提高了程序的并行性。通过将数据流图的任务划分问题转换为通用图划分问题,并利用数据流程序计算任务的数据并行性,优化了计算任务到处理器核的映射,提高了程序的并行性。
[0016](3)提高了缓存系统的利用率。本发明针对目标系统的缓存结构特征,不但减少了多核并行调度时的干扰以避免缓存伪共享,而且通过线程映射提高了共享缓存的利用率。
【专利附图】

【附图说明】
[0017]图1为本发明方法在数据流编译系统中的结构框架图;[0018]图2为本发明实施例中数据流程序在多核平台上任务划分与调度算法流程图;
[0019]图3(a)为本发明实施例中同步数据流图经过任务划分和阶段赋值示例图;
[0020]图3 (b)为图3 (a)对应的软件流水执行过程示例图。
【具体实施方式】
[0021]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0022]如图1所示为本实施例在流编译系统中的结构框架图,数据流程序经过数据流编译器前端解析之后会生成一个中间表示一同步数据流图,随后依次经过任务划分与调度和核间缓存优化两级优化过程,最后生成目标代码,完成编译。
[0023](I)确定计算任务与处理器核映射的任务划分与调度步骤
[0024]该步骤包括两个子步骤:数 据流图预处理和构造软件流水调度。通过预处理减少通信和同步开销对程序的影响,使得构造软件流水调度阶段以多核的负载均衡为主要目标。具体步骤如下:
[0025](1.1)预处理。对数据流图进行预处理,包括两个子步骤:确定扩大调度因子和融合相邻计算单元。扩大调度用于提高目标程序运行时的局部性和并行粒度,而融合相邻计算单元是为了减少多核间的通信开销。
[0026]该步骤具体过程如下:
[0027](1.1.1)确定扩大调度因子。扩大调度指的是以相同的扩大因子,成倍扩大每个计算单元稳态调度阶段计算的次数。
[0028]首先,扩大调度倍数下限的计算公式为:
[0029]
【权利要求】
1.一种面向多核的数据流编译优化方法,其特征在于,包括: 确定计算任务与处理器核映射的任务划分与调度步骤; 根据所述多核处理器的结构特性和数据流程序在多核处理器上的执行情况做核间缓存(Cache)优化步骤。
2.根据权利要求1所述的面向多核的数据流编译优化方法,其特征在于,所述任务划分与调度的步骤具体为: 首先,对输入数据流程序进行预处理,包括扩大调度和融合相邻计算单元;其中扩大调度用于提高目标程序运行时的局部性和并行粒度,融合相邻计算单元用于减少多核间的通信开销; 其次,对预处理后的数据流程序构造软件流水调度,包括任务划分与阶段赋值,其中任务划分用于确定计算单元被调度的处理器核,阶段赋值用于确定计算单元调度的时间顺序。
3.根据权利要求2所述的面向多核的数据流编译优化方法,其特征在于,所述扩大调度的具体步骤为: 首先,扩大调度倍数下 的确定。计算公式为:
,、TotaICal x ratio l< >--
N X Fsync 其中,TotalCal为目标程序稳态调度总的计算量,N为并行处理器核个数,Wsync为目标系统N个处理器核的同步开销,ratio为计算通信比的阈值,用于减少同步开销对并行调度性能的影响; 其次,扩大调度倍数上限的确定,计算公式为:
, N X LI QichcS i/c x usage k <-—
7blal( bmin 其中,CommTotal为目标程序稳态调度计算单元间总的通信量,N为处理器核个数,LlCacheSize为目标系统N个处理器核LI缓存的总量,usage为目标系统LI数据缓存中缓冲区所占比例的阈值,用于限定多处理器的缓存用于缓存计算单元间通信缓存区数据的大小; 最后,根据上述确定的扩大调度倍数的范围,选择该范围内为2的幂的最大整数作为计算单元扩大调度的倍数。
4.根据权利要求2或3所述的面向多核的数据流编译优化方法,其特征在于,所述融合相邻计算单元的具体步骤为: 如果目标程序中的两个相邻计算单元都是单输入单输出且无状态的,统计融合操作后相邻计算单元总的计算量BothWork和减少的通信开销BothComm,当计算通信比BothWork/BothComm小于设定阈值时,则对其进行融合操作。
5.根据权利要求2至4任一项所述的面向多核的数据流编译优化方法,其特征在于,所述任务划分的具体步骤为: 首先,根据目标程序的同步数据流图构造划分图G,其中顶点的权值表示计算负载,边的权值表示通信数据量的大小,并标记节点的可分裂次数; 其次,迭代优化策略改进任务划分结果,使用通用图划分算法对图G进行任务划分,每次选择计算负载最大的可分裂计算单元进行水平分裂,并且记录水平分裂信息和当前的最优划分结果,重复该迭代过程,直至线程间计算负载相对均衡; 最后,撤销不必要的分裂操作,根据迭代优化得到的划分结果,合并由同一个计算单元分裂而得但却被划分到同一子集上的计算单元。
6.根据权利要求2至5任一项所述的面向多核的数据流编译优化方法,其特征在于,所述阶段赋值的具体步骤为: 首先,构造目标同步数据流图的拓扑排序算法构造其拓扑序列; 其次,按照拓扑序列遍历图中的顶点,对每个顶点查看其输入顶点的阶段值和被划分的处理器核编号,如果输入顶点与该顶点被划分到同一处理器核上,该顶点的阶段值必须不小于输入顶点;否则,该顶点的阶段值必须至少比输入顶点的阶段值大I。
7.根据权利要求1至6任一项所述的面向多核的数据流编译优化方法,其特征在于,所述的缓存优化方法的具体步骤为: 首先,消除核间缓存伪共享; 其次,完成逻辑线程到物理核的映射。
8.根据权利要求7所述的面向多核的数据流编译优化方法,其特征在于,所述消除核间缓存伪共享具体为: 对于滑动窗口机制,采用临时缓冲区和共享缓冲区相结合的方法,数据生产者首先将数据写入临时缓冲区,调度完成后再将临时缓冲区数据拷贝到共享缓冲区;数据消费者首先将共享缓冲区中的数据拷贝到临时缓冲区,调度时访问临时缓冲区, 对于翻转窗口机制,采用二维数组管理通信数据,其最高维的大小由计算任务的阶段差决定,而使用填充方法扩充最低维大小为缓冲的整数倍,并且保证缓冲区在内存中以缓存行的大小对齐的要求分配。
9.根据权利要求7或8所述的面向多核的数据流编译优化方法,其特征在于,所述的逻辑线程到物理核的映射的具体步骤为: 首先,根据任务划分结果和目标程序的同步数据流图,统计各个逻辑线程之间相邻计算单元的通信数据量大小; 其次,针对目标系统的层次性缓存拓扑结构,使用贪心算法依次选择将相互间通信量最大的逻辑线程,映射到共享同一缓存的物理核上。
【文档编号】G06F9/50GK103970602SQ201410185971
【公开日】2014年8月6日 申请日期:2014年5月5日 优先权日:2014年5月5日
【发明者】于俊清, 李鹤, 唐九飞, 何云峰, 管涛 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1