一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法

文档序号:9249161阅读:985来源:国知局
一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法
【技术领域】
[0001]本发明属于基于GPU/CPU混合架构系统平台技术领域,更具体地,涉及一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法。
【背景技术】
[0002]CPU多核系统的出现大大提高了相关领域应用的执行效率,特别是在数字媒体处理和科学计算等计算密集型的应用领域。而图形处理单元(Graphic Processing Unit,以下简称GPU)系统结构的不断升级促进了 GPU计算的发展,使之不仅能高效地进行计算机图形的计算,而且在大规模数据的并行计算方面也具有很大的优势。与CPU多核系统相比,GPU具有核心处理单元多、线程粒度细、浮点运算能力强等特点,更适合应用于并行计算领域。基于GPU的高效并行计算主要利用混合架构中CPU与GPU协作计算的模式。根据CPU串行计算和内存读取的优势以及GPU强大的浮点计算能力,在混合架构进行计算过程中,CPU负责控制主程序的流程和串行计算,准备GPU计算时所需的数据并将其传给GPU,利用GTO进行高效的并行计算。通过GPU与CPU的协作计算,充分利用各计算资源的优势,有效地提高了应用程序的执行性能。目前面向GPU计算的应用程序编写都是利用CPU与GPU协作计算的模式,例如OpenCL、CUDA等。GPU/CPU混合架构系统主要用来提高具有高度并行性,异构通信量小,并且不具有并行性的计算任务的工作量比较小等特点的应用的执行效率。多CPU和多GPU协作计算被应用在多个方面,例如交互式物理仿真、镜头边界检测、财务应用计算等。
[0003]数据流编程语言(Data Flow Programming Language,DFPL)是一种面向领域的编程语言(Domain Specific Language,DSL),数据流程序以数据驱动的方式执行,并将任务计算与数据通信分开,很好地暴露出应用程序在任务级和数据级的可并行性。编写数据流程序时,程序员只需根据相关领域实际问题自身的特点进行数据流程序的编写,简化了相关领域的应用程序编程。在多CPU和多GPU这种混合架构下,GPU与GPU间的数据通信开销远远大于各计算单元的计算开销,任务划分的目标是充分发挥CPU逻辑控制与串行计算的优势和GPU高性能计算的优势,将适合GPU计算的任务分配到可用的GPU平台上,适合CPU计算的任务分配到CPU平台上,保证负载均衡和GPU间的数据通信开销尽可能的小,同时使GTO计算与通信的重叠度尽可能的高,以提高应用程序的执行性能。常见的静态任务划分方法有:贪心划分方法、亲和性划分方法、循环分发划分方法、基于图划分工具Metis和K路图划分方法。贪心划分方法是每次选择计算量最小的任务进行分配,但其忽略了各个设备间的通信量。亲和性划分方法是每次选择数据依赖比较大的计算任务(actor)划分到同一个计算单元上,以达到通信开销减小的目的,但这样划分很容易导致actor扎堆,使某个计算单元上的负载过大,该划分方法常用于有较少数量计算单元的任务划分。循环分发划分方法是将actor逐个划分到各计算单元,该划分方法没有考虑actor的工作量和通信量,当同步数据流(Synchronous Data Flow, SDF)图中每个actor计算量都比较均衡的情况比较适用该方法。Metis划分方法的目标是在满足一定负载均衡的条件下,尽可能的减少actor间的通信量,但是由于Metis划分方法的局部最优性,使得各个设备间的边界节点和节点间的通信边并没有得到充分的减少。K路图划分方法保证了负载均衡,同时考虑到GPU与GPU间高额的通信开销,使最终的每个划分块都是一个连通图,降低了通信开销,但其对分配到CPU端的计算结点没有进行优化处理。
[0004]在多CPU和多GPU混合架构平台上,利用混合架构的系统结构特点以及数据流程序本身存在的并行性,来提高程序的执行性能,需要解决以下三大问题。第一,在多CPU和多GPU混合架构系统平台上,GPU与GPU不能直接的进行数据的传输,只能通过GPU先传输给CPU,再由CPU把相应的数据传输给另一个接收数据的GPU,这种通信方式将会带来巨大的通信开销。如何把GPU端的任务划分给多个GPU并且使各个GPU的负载相对均衡,GPU与GPU间的通信尽可能的小,计算与通信的重叠度尽可能的高,是目前所有研宄者面临的一个大问题;第二,GPU的并行计算规模比较大,如果分配给GPU的任务数量很少或者每个任务的工作量比较小,将会导致GPU的系统资源没有很好的利用,应用程序的执行性能明显低于相同程序在CPU上的执行性能。如何把GPU端的任务调度到相应的计算单元去执行,挖掘应用程序自身存在的并行性,更好的利用GPU高效的并行计算能力以及存储资源,也是需要解决的一个问题;第三,CPU与GPU的系统结构不同,二者的计算能力也不同。CPU端任务在进行任务划分的过程中,既要保证CPU端各个核的负载均衡,也要保证划分完成后CPU端每个核的计算与GPU端的计算以及异构平台间的数据通信的重叠度更高,以减小应用程序整体的同步开销。而针对不同的应用程序,划分到GPU端任务的工作量会根据输入条件而发生变化,如何在GPU端工作量动态变化的条件下,自适应的确定所需的CPU核数,将CPU端的任务均衡地调度到CPU核上执行,也是需要解决的一大难点问题。

【发明内容】

[0005]针对现有技术的以上缺陷或改进需求,本发明提供一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,针对GPU/CPU混合架构下存在的大量数据并行、任务并行和流水线并行等问题,利用同步数据流图作为中间表示,设计并实现了一个基于GPU/CPU混合架构的数据流程序多粒度划分与调度方法,通过该方法有效提高了数据流程序在GPU/CPU混合架构下的执行性能。
[0006]本发明提供一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,包括以下步骤:
[0007]步骤I引入扩大因子,将actor稳态执行次数整体扩大;
[0008]步骤2根据actor是否具有可并行性以及相应通信开销的大小将其分配到GPU端或CPU端上去运行;
[0009]步骤3根据actor连续迭代执行是否存在数据依赖性,将其水平分裂到各GPU端;
[0010]步骤4选择合适的CPU核数量,将CPU端任务均衡分配给各CPU核;
[0011]步骤5对SDF图进行拓扑排序以满足数据的读写规则,依次遍历拓扑排序中的各actor,确定各actor被流水调度执行时的阶段号;
[0012]步骤6根据各actor的通信特点,采用不同存储结构和不同访问类型进行数据流程序的存储访问优化;
[0013]步骤7根据各actor的计算特点,压缩计算相同的actor的目标代码。
[0014]总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
[0015](I)根据任务的计算特点和通信量大小,对任务进行分类处理,充分利用CPU与GPU各自的优势,同时降低整体程序的通信量;
[0016](2)提出了一种GPU端任务的水平分裂算法,利用GPU端任务的并行性将其均衡分裂到各GPU,以防止GPU与GPU间高额的通信开销影响数据流程序的整体性能;
[0017](3)提出了一种CPU端离散任务均衡化算法,针对这些CPU端的离散结点,结合复制分裂算法,选择合适CPU核,采用贪心的思想,均衡地将各计算结点分成若干个划分并将各划分映射到相应的CPU核上,保证各CPU核的负载均衡并提高各CPU核的利用率;
[0018](4)根据数据流程序的计算和通信特点,提出多种存储结构多种访问类型的存储访问优化方法,提高了存储的访问效率;
[0019](5)针对存在的大量actor计算任务相同的问题,提出目标代码优化方法,生成目标模板类,大大减小目标代码的冗余量。
【附图说明】
[0020]图1为本发明基于GPU/CPU混合架构的流程序多粒度划分与调度方法的流程图;
[0021]图2为本发明基于GPU/CPU混合架构的数据流程序任务分类处理结果示意图;
[0022]图3为本发明基于GPU/CPU混合架构的数据流程序GPU端任务的水平分裂结果示意图;
[0023]图4为本发明基于GPU/CPU混合架构的数据流程序CPU端计算所需核数的确定流程图;
[0024]图5为本发明基于GPU/CPU混合架构的数据流程序阶段赋值结果示意图;
[0025]图6为本发明一种基于GPU/CPU混合架构的数据流程序多种存储结构及多种访问类型示意图。
【具体实施方式】
[0026]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1