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

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

Info

Publication number
CN104965761A
CN104965761A CN201510429763.2A CN201510429763A CN104965761A CN 104965761 A CN104965761 A CN 104965761A CN 201510429763 A CN201510429763 A CN 201510429763A CN 104965761 A CN104965761 A CN 104965761A
Authority
CN
China
Prior art keywords
actor
cpu
gpu
node
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510429763.2A
Other languages
English (en)
Other versions
CN104965761B (zh
Inventor
于俊清
陈文斌
何云峰
管涛
唐九飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN201510429763.2A priority Critical patent/CN104965761B/zh
Publication of CN104965761A publication Critical patent/CN104965761A/zh
Application granted granted Critical
Publication of CN104965761B publication Critical patent/CN104965761B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Multi Processors (AREA)

Abstract

本发明公开了一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,包括:根据数据流程序各个任务的计算特点以及任务之间的数据通信量大小,将各个任务分配到合适的计算平台上;利用GPU端任务的并行性将其均衡分裂到各个GPU,以避免GPU间高额的通信开销影响应用程序整体的执行性能;通过选择合适CPU核,将CPU端各任务均衡分配给各CPU核,以保证负载均衡并提高各CPU核的利用率;采用多种数据存储结构和多种访问类型的方法,以提高内存的访问效率;通过生成目标模板类和压缩目标结点的个数,降低目标代码的冗余量。本发明分别在CPU与GPU平台上实现了负载均衡,降低了通信开销,提高了数据的访问效率并降低了目标代码的冗余量,提高了数据流程序的执行性能。

Description

一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法
技术领域
本发明属于基于GPU/CPU混合架构系统平台技术领域,更具体地,涉及一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法。
背景技术
CPU多核系统的出现大大提高了相关领域应用的执行效率,特别是在数字媒体处理和科学计算等计算密集型的应用领域。而图形处理单元(Graphic Processing Unit,以下简称GPU)系统结构的不断升级促进了GPU计算的发展,使之不仅能高效地进行计算机图形的计算,而且在大规模数据的并行计算方面也具有很大的优势。与CPU多核系统相比,GPU具有核心处理单元多、线程粒度细、浮点运算能力强等特点,更适合应用于并行计算领域。基于GPU的高效并行计算主要利用混合架构中CPU与GPU协作计算的模式。根据CPU串行计算和内存读取的优势以及GPU强大的浮点计算能力,在混合架构进行计算过程中,CPU负责控制主程序的流程和串行计算,准备GPU计算时所需的数据并将其传给GPU,利用GPU进行高效的并行计算。通过GPU与CPU的协作计算,充分利用各计算资源的优势,有效地提高了应用程序的执行性能。目前面向GPU计算的应用程序编写都是利用CPU与GPU协作计算的模式,例如OpenCL、CUDA等。GPU/CPU混合架构系统主要用来提高具有高度并行性,异构通信量小,并且不具有并行性的计算任务的工作量比较小等特点的应用的执行效率。多CPU和多GPU协作计算被应用在多个方面,例如交互式物理仿真、镜头边界检测、财务应用计算等。
数据流编程语言(Data Flow Programming Language,DFPL)是一种面向领域的编程语言(Domain Specific Language,DSL),数据流程序以数据驱动的方式执行,并将任务计算与数据通信分开,很好地暴露出应用程序在任务级和数据级的可并行性。编写数据流程序时,程序员只需根据相关领域实际问题自身的特点进行数据流程序的编写,简化了相关领域的应用程序编程。在多CPU和多GPU这种混合架构下,GPU与GPU间的数据通信开销远远大于各计算单元的计算开销,任务划分的目标是充分发挥CPU逻辑控制与串行计算的优势和GPU高性能计算的优势,将适合GPU计算的任务分配到可用的GPU平台上,适合CPU计算的任务分配到CPU平台上,保证负载均衡和GPU间的数据通信开销尽可能的小,同时使GPU计算与通信的重叠度尽可能的高,以提高应用程序的执行性能。常见的静态任务划分方法有:贪心划分方法、亲和性划分方法、循环分发划分方法、基于图划分工具Metis和K路图划分方法。贪心划分方法是每次选择计算量最小的任务进行分配,但其忽略了各个设备间的通信量。亲和性划分方法是每次选择数据依赖比较大的计算任务(actor)划分到同一个计算单元上,以达到通信开销减小的目的,但这样划分很容易导致actor扎堆,使某个计算单元上的负载过大,该划分方法常用于有较少数量计算单元的任务划分。循环分发划分方法是将actor逐个划分到各计算单元,该划分方法没有考虑actor的工作量和通信量,当同步数据流(Synchronous Data Flow,SDF)图中每个actor计算量都比较均衡的情况比较适用该方法。Metis划分方法的目标是在满足一定负载均衡的条件下,尽可能的减少actor间的通信量,但是由于Metis划分方法的局部最优性,使得各个设备间的边界节点和节点间的通信边并没有得到充分的减少。K路图划分方法保证了负载均衡,同时考虑到GPU与GPU间高额的通信开销,使最终的每个划分块都是一个连通图,降低了通信开销,但其对分配到CPU端的计算结点没有进行优化处理。
在多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核上执行,也是需要解决的一大难点问题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,针对GPU/CPU混合架构下存在的大量数据并行、任务并行和流水线并行等问题,利用同步数据流图作为中间表示,设计并实现了一个基于GPU/CPU混合架构的数据流程序多粒度划分与调度方法,通过该方法有效提高了数据流程序在GPU/CPU混合架构下的执行性能。
本发明提供一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,包括以下步骤:
步骤1引入扩大因子,将actor稳态执行次数整体扩大;
步骤2根据actor是否具有可并行性以及相应通信开销的大小将其分配到GPU端或CPU端上去运行;
步骤3根据actor连续迭代执行是否存在数据依赖性,将其水平分裂到各GPU端;
步骤4选择合适的CPU核数量,将CPU端任务均衡分配给各CPU核;
步骤5对SDF图进行拓扑排序以满足数据的读写规则,依次遍历拓扑排序中的各actor,确定各actor被流水调度执行时的阶段号;
步骤6根据各actor的通信特点,采用不同存储结构和不同访问类型进行数据流程序的存储访问优化;
步骤7根据各actor的计算特点,压缩计算相同的actor的目标代码。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)根据任务的计算特点和通信量大小,对任务进行分类处理,充分利用CPU与GPU各自的优势,同时降低整体程序的通信量;
(2)提出了一种GPU端任务的水平分裂算法,利用GPU端任务的并行性将其均衡分裂到各GPU,以防止GPU与GPU间高额的通信开销影响数据流程序的整体性能;
(3)提出了一种CPU端离散任务均衡化算法,针对这些CPU端的离散结点,结合复制分裂算法,选择合适CPU核,采用贪心的思想,均衡地将各计算结点分成若干个划分并将各划分映射到相应的CPU核上,保证各CPU核的负载均衡并提高各CPU核的利用率;
(4)根据数据流程序的计算和通信特点,提出多种存储结构多种访问类型的存储访问优化方法,提高了存储的访问效率;
(5)针对存在的大量actor计算任务相同的问题,提出目标代码优化方法,生成目标模板类,大大减小目标代码的冗余量。
附图说明
图1为本发明基于GPU/CPU混合架构的流程序多粒度划分与调度方法的流程图;
图2为本发明基于GPU/CPU混合架构的数据流程序任务分类处理结果示意图;
图3为本发明基于GPU/CPU混合架构的数据流程序GPU端任务的水平分裂结果示意图;
图4为本发明基于GPU/CPU混合架构的数据流程序CPU端计算所需核数的确定流程图;
图5为本发明基于GPU/CPU混合架构的数据流程序阶段赋值结果示意图;
图6为本发明一种基于GPU/CPU混合架构的数据流程序多种存储结构及多种访问类型示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
图1所示为本发明基于GPU/CPU混合架构的流程序多粒度划分与调度方法的流程图,以COStream数据流程序作为输入,以GPU/CPU混合架构平台上可并行执行的C++与OpenCL相结合的目标代码作为输出。COStream数据流程序经过编译前端处理后生成同步数据流图,将同步数据流图作为中间表示,然后进行数据流程序预处理、任务的划分与调度以及存储访问优化和目标代码优化。
本发明针对测试程序并行粒度远远小于GPU可并行规模的问题,引入扩大因子,提高数据流程序的并行调度粒度;根据数据流程序任务的计算特点以及各任务间的通信情况,对任务进行分类处理,将各个任务依次分配到合理的计算平台上。
在本发明实施例中,COStream数据流程序的预处理过程是GPU/CPU混合架构下数据流程序任务划分与调度的准备阶段,该阶段包括两部分内容:扩大因子的引入和数据流程序的任务分类。具体包括以下步骤:
步骤1 引入扩大因子
为了充分利用GPU的计算资源,引入扩大因子,即actor稳态执行次数的整体扩大,增大各个actor的工作量,从而充分利用GPU的并行计算单元。扩大因子的上限由三个因素决定:主存大小(host memory)、GPU存储空间大小(device memory)和GPU缓冲区分配机制。具体包括以下子步骤:
(1-1)利用下式求得CPU端允许的扩大倍数N1的上限:
N1≤MCPU/MCPUSumneeded
其中,MCPU表示主存可用空间的大小;MCPUSumneeded表示CPU端所有任务未扩大前所需的存储空间总和;
(1-2)利用下式求得GPU端允许的扩大因子N2的上限:
N2≤MGPU/MGPUSumneeded
其中,MGPU表示GPU可用的存储空间;MGPUSumneeded表示GPU端所有任务未扩大前所需的存储空间总和;
(1-3)根据GPU缓冲区分配机制,利用下式求得N2的限制条件:
N2≤MGPUMaxbuffer/MGPUMaxneeded
其中,MGPUMaxbuffer表示GPU每次允许分配缓冲区的最大值;MGPUMaxneeded表示GPU端所有任务未扩大前各需存储空间的最大值;
(1-4)根据N1和N2的限制条件,选择合理的扩大因子,在本发明实施例中选取的扩大因子为38400,保证了GPU端任务有足够的计算量,充分利用GPU计算资源,同时,减少了CPU线程的同步次数,降低了应用程序整体的同步开销。
步骤2 数据流程序的任务分类
该步骤根据任务是否具有可并行性以及相应通信开销的大小将其分配到GPU或CPU上去运行,充分利用CPU与GPU各自的优势,同时降低整体程序的通信量。
图2所示为本发明基于GPU/CPU混合架构的数据流程序任务分类处理结果示意图,具体包括以下子步骤:
(2-1)依次判断SDF图中各actor的状态,actor有两种状态:有状态(stateful)和无状态(stateless)。状态为stateful的actor表示该actor连续两次迭代运算之间存在数据依赖,两次迭代运算不可并行执行,而状态为stateless的actor则与之相反,多次迭代运算之间互相独立,可并行执行。将状态为stateful的actor划分到CPU端,状态为stateless的actor划分到GPU端,完成计算任务的初步分类;
(2-2)考虑异构平台上CPU与GPU间的数据通信开销,调节边界actor。针对划分到GPU端的状态为stateless的actor,依次判断其父子结点,如果其父结点状态为stateful,并且其子结点的状态为stateful,那么将该状态为stateless的结点分配到CPU端,剩余的状态为stateless的结点则分配到GPU端。
步骤3 GPU端任务的水平分裂
本发明针对GPU与GPU间高额通信开销的问题,设计了数据流程序GPU端任务的水平分裂算法,根据GPU端任务连续迭代执行是否存在数据依赖性将其均衡分裂到各GPU,保证各GPU的负载均衡并避免GPU与GPU间高额的通信开销影响应用程序整体的执行性能。
图3所示为本发明基于GPU/CPU混合架构的数据流程序GPU端任务的水平分裂结果示意图,具体包括以下子步骤:
(3-1)针对GPU端任务间数据访问对前一次的运行结果无依赖性的应用,遍历分配到GPU端的各actor,修改各actor的稳态执行次数,并创建M个新actor(M为GPU的个数减1),将该actor复制给M个新创建的actor(称该actor为新创建的M个actor的模板结点,新创建的M个actor为该actor的复制结点)。如图3所示,任务分类后actor A和F分配到CPU端,actor B、C、D和E分配到GPU端,修改B的稳态执行次数,创建2个新actor(假设系统配有3个GPU),即actor B2和B3,将B复制给B2和B3,为了保证名称的统一性,图中将修改过稳态执行次数的B称为B1,称B1为B2和B3的模板结点,B2和B3为B1的复制结点;
(3-2)依次遍历每一个新创建actor的模板结点的父结点,如果该模板结点的父结点是GPU端actor,那么将该新创建的actor与其模板结点的父结点的相应复制结点连接起来,如图3(b)所示,将C2和D2的父结点设为B2,C3和D3的父结点设为B3,E2的父结点依次设为C2和D2,E3的父结点依次设为C3和D3;如果该模板结点的父结点是CPU端actor,那么将该新创建的actor与其模板结点的父结点直接连接起来,如图3(b)所示,actor A为CPU端结点,故将B2和B3的父结点都设为A,并将B2和B3依次加入A的子结点集中;
(3-3)依次遍历每一个新创建actor的模板结点的子结点,如果该子结点是GPU端actor,那么将该新创建的actor与其模板结点的子结点的相应复制结点连接起来,如图3(b)所示,将B2的子结点依次设为C2和D2,B3的子结点依次设为C3和D3,C2和D2的子结点均设为E2,C3和D3的子结点均设为E3;如果该模板结点的子结点是CPU端actor,那么将该新创建的actor与其模板结点的子结点直接连接起来,形成新的连通的SDF图,如图3(b)所示,将E2和E3的子结点均设为F,并将E2和E3加入F的父结点集中。
步骤4 CPU端离散任务的均衡划分
本发明根据CPU端任务的并行性以及各任务的工作量大小,设计了数据流程序CPU端离散任务的均衡化算法,选择合适CPU核数量,将CPU端任务均衡分配给各CPU核,保证各个CPU核的负载相对均衡,同时也提高各个CPU核的利用率。
传统的任务划分方法对任务分类处理后分配到CPU端的各个离散结点未进行划分处理,均由一个CPU核控制计算,如果该CPU核的工作量过大时就会影响整个程序的执行效率。CPU端离散任务均衡化算法针对这些CPU端的离散结点,选择合适CPU核,采用贪心划分方法的思想,均衡地将各计算结点分成若干个划分并将各划分映射到相应的CPU核上,保证各CPU核的负载均衡并提高各CPU核的利用率,该步骤分两个阶段完成:所需CPU核数的计算和均衡化过程。
(4-1)数据流程序所需CPU核数的计算。图4所示为本发明基于GPU/CPU混合架构的数据流程序所需CPU核数的计算流程图,该阶段具体包括以下子步骤:
(4-1-1)分别计算CPU端任务总的执行时间CPUTime、GPU端任务总的计算时间GPUTime以及数据流程序总的通信时间CommTime;
(4-1-2)判断CPUTime是否小于GPUTime和CommTime的最大值,是则选择CPU的核数为1,否则执行步骤(4-1-3);
(4-1-3)判断分配到CPU端的actor个数是否为1,是则执行步骤(4-1-4),否则执行步骤(4-1-5);
(4-1-4)判断该actor的状态是否为stateful,是则选择CPU的核数为1,否则执行步骤(4-1-5);
(4-1-5)如果分配到CPU端的actor个数大于1或者存在工作量较大的状态为stateless的actor,根据下式计算出应用程序执行时所需要的CPU核数NCPUcore
NCPUcore=CPUTime/Max(GPUTime,CommTime)
(4-1-6)如果所求得的CPU核数大于系统当前可用的核数,则设置所需的CPU核数为系统当前可用的核数,保证经过划分后的每个划分块均有对应的CPU核执行;
(4-2)CPU端任务的均衡化。完成所需CPU核数的计算后,对状态为stateless且其工作量比较大的actor进行分裂操作,并完成各个计算结点与各CPU核的映射,即均衡化过程,该过程包括以下子步骤:
(4-2-1)利用下式求得理论上分配给每个CPU核的最大工作量MaxTotalWork:
MaxTotalWork=CPUTotalWork/NCPUcore
其中,CPUTotalWork表示CPU端所有actor总的工作量;NCPUcore表示计算所需的CPU核数;
(4-2-2)遍历CPU端的状态为stateless的actor,根据工作量估计求出该actor的工作量大小,如果其工作量大于MaxTotalWork,则利用复制分裂算法对该actor进行复制分裂操作;
(4-2-3)将新生成的actor与其模板结点的父结点和子结点连接以保证SDF的连通性;
(4-2-4)采用贪心的思想,遍历CPU端actor并根据工作量估计计算出该actor的工作量,选择当前各自总工作量最小的CPU核,将该actor划分到当前总工作量最小的CPU核上,完成该actor与CPU核的映射。
步骤5 阶段赋值
该步骤确定各结点被流水调度执行时的阶段号,从而实现软件流水调度,使结点计算和数据通信可以重叠执行。首先对SDF图进行拓扑排序,以满足数据的读写规则,然后依次遍历拓扑排序中的各actor,如果该actor与其父结点同在CPU端或同在GPU端,并且该actor与其父结点在相同的划分块中,那么该actor的阶段号与其父结点的阶段号相同;如果该actor与其父结点同在CPU端或同在GPU端,但是该actor与其父结点不在相同的划分块中,那么该actor阶段号等于其父结点阶段号加1;如果该actor与其父结点不同在CPU端或GPU端,那么该actor阶段号等于其父结点阶段号加2,因为该actor与其父结点不同在CPU端或不同在GPU端则会产生通信,异构通信在软件流水调度过程中需要占用一个阶段号。
图5所示为本发明基于GPU/CPU混合架构的数据流程序阶段赋值结果示意图。先设定首结点A的阶段号为0,B与父结点A都分配到CPU端,但B与A不在相同的划分块中,故B的阶段号为A的阶段号加1;C与父结点B都被分配到CPU端,且在相同的划分块中,故C与B的阶段号相同,同为1;D分配到GPU端,其父结点C分配到CPU端,而异构通信需要占用一个阶段号,故D阶段号为B的阶段号加2;E、F和G划分到GPU端,且与其父结点在相同的划分块中,故E、F和G的阶段号与D的阶段号相同,H和I的阶段号同理可得。
本发明基于GPU/CPU混合架构的数据流程序优化主要包括数据流程序存储访问优化和目标代码优化两部分内容。根据数据流程序各任务的通信特点,采用多种存储结构多种访问类型的存储优化方法,提高存储的访问效率;针对存在大量任务计算相同的情况,提出目标代码优化方法,生成目标模板类,大大减小目标代码的冗余量。
步骤6 数据流程序存储访问优化
数据流程序存储访问优化根据任务的通信特点,提出了多种存储结构多种访问类型的优化方法,在本发明实施例中,采用三种存储结构:单倍缓冲、多倍缓冲和多缓冲,存储访问类型分四种类型:单倍缓冲直接访问、单倍缓冲循环访问、多倍缓冲循环访问和多缓冲并行访问,存储方式的选择跟actor的阶段号和有通信的actor间迭代执行是否有数据依赖密切相关。
图6所示为本发明基于GPU/CPU混合架构的数据流程序多种存储结构及多种访问类型示意图。A和B为两个actor,count表示actor的执行次数,push表示actor执行一次产生的数据量,pop表示actor执行一次消耗的数据量,peek表示actor执行一次需要访问的数据量,箭头W表示actor下一次写入数据的位置,箭头R表示actor下一次读取数据的位置,Memorysize表示A和B数据通信时暂存数据的存储空间大小。如图6所示,B的计算需要A计算的结果,则称A为生产者,B为消费者。如果生产者和消费者的阶段号相同,二者处于同一划分中且连续两次迭代执行不存在数据的访问依赖性,那么生产者和消费者通信的数据存储采用单倍缓冲,访问类型采用单倍缓冲直接访问;如果生产者和消费者的阶段号相同且二者处于同一划分中,而二者连续两次迭代执行存在数据访问依赖关系,那么生产者和消费者通信的数据存储采用单倍缓冲,访问类型采用单倍缓冲循环访问;如果生产者和消费者的阶段号不同,且二者连续两次迭代执行存在数据访问依赖,那么生产者和消费者通信的数据存储采用多倍缓冲,访问类型采用多倍缓冲循环访问;如果生产者和消费者的阶段号不同且二者连续两次迭代执行不存在数据访问依赖性,那么生产者和消费者通信的数据存储采用多缓冲,访问类型采用多缓冲并行访问。
步骤7 数据流程序目标代码优化
COStream数据流编程语言主要有stream、operator和composite三个语法结构组成,operator表示SDF图中最基本的计算单元actor,stream作为通信边的抽象连接SDF图中的actor,composite表示由一个或多个operator组成的可重用的数据流子图结构,是SDF图可复用子图的抽象。COStream数据流程序的目标代码主要包括actor对应类定义代码、actor的kernel执行代码、数据通信代码、同步流水线控制代码以及线程控制代码五部分内容。针对存在的大量actor计算任务相同的问题,提出目标代码优化方法,生成目标模板类,大大减小目标代码的冗余量,具体包括以下子步骤:
(7-1)针对必须进行常量赋值的一些变量,例如COStream数据流程序中的数组results[N]中的变量N,In[permutation[i]].x中的数组变量permutation[i],数组变量permutation[i]在各operator中数值不同(operator为COStream的数据结构,表示一个计算结点actor)等,在编译过程中将这些变量换为对应的具体数值,即进行选择性常量传播;
(7-2)采用单向链表的结构将operator中未进行常量传播的变量连接起来,并与该operator绑定;
(7-3)依次遍历SDF图中的actor,如果该actor与目标模板结点集中所有结点的名字、参数个数和各参数对应的值均不同,则将该actor加入目标模板结点集中,目标模板结点集中结点的个数即为目标模板的个数;
(7-4)对目标模板结点重命名,并完成SDF图中的actor与对应的模板结点的映射;
(7-5)在创建SDF图中各actor的对象过程中,将相应operator绑定的未经过常量传播的变量作为构造函数的形参,对actor的各变量进行赋值,完成actor的实例化。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,其特征在于,包括:
步骤1 引入扩大因子,将actor稳态执行次数整体扩大;
步骤2 根据actor是否具有可并行性以及相应通信开销的大小将其分配到GPU端或CPU端上去运行;
步骤3 根据actor连续迭代执行是否存在数据依赖性,将其水平分裂到各GPU端;
步骤4 选择合适的CPU核数量,将CPU端任务均衡分配给各CPU核;
步骤5 对SDF图进行拓扑排序以满足数据的读写规则,依次遍历拓扑排序中的各actor,确定各actor被流水调度执行时的阶段号;
步骤6 根据各actor的通信特点,采用不同存储结构和不同访问类型进行数据流程序的存储访问优化;
步骤7 根据各actor的计算特点,压缩计算相同的actor的目标代码。
2.如权利要求1所述的方法,其特征在于,所述步骤1包括以下子步骤:
(1-1)利用下式求得CPU端允许的扩大倍数N1的上限:
N1≤MCPU/MCPUSumneeded
其中,MCPU表示主存可用空间的大小;MCPUSumneeded表示CPU端所有任务未扩大前所需的存储空间总和;
(1-2)利用下式求得GPU端允许的扩大因子N2的上限:
N2≤MGPU/MGPUSumneeded
其中,MGPU表示GPU可用的存储空间;MGPUSumneeded表示GPU端所有任务未扩大前所需的存储空间总和;
(1-3)根据GPU缓冲区分配机制,利用下式求得N2的限制条件:
N2≤MGPUMaxbuffer/MGPUMaxneeded
其中,MGPUMaxbuffer表示GPU每次允许分配缓冲区的最大值;MGPUMaxneeded表示GPU端所有任务未扩大前各需存储空间的最大值;
(1-4)根据N1和N2的限制条件,选择合适的扩大因子。
3.如权利要求1所述的方法,其特征在于,所述步骤2包括以下子步骤:
(2-1)依次判断SDF图中各actor的状态,将状态为stateful的actor划分到CPU端,状态为stateless的actor划分到GPU端,其中,状态为stateful的actor表示该actor连续两次迭代运算之间存在数据依赖,两次迭代运算不可并行执行,状态为stateless的actor表示多次迭代运算之间互相独立,可并行执行;
(2-2)针对划分到GPU端的状态为stateless的actor,依次判断其父子结点,如果其父结点状态为stateful,并且其子结点的状态为stateful,那么将该状态为stateless的结点分配到CPU端,剩余的状态为stateless的结点则分配到GPU端。
4.如权利要求1所述的方法,其特征在于,所述步骤3包括以下子步骤:
(3-1)针对GPU端任务间数据访问对前一次的运行结果无依赖性的应用,遍历分配到GPU端的各actor,修改各actor的稳态执行次数,并创建M个新actor,其中M为GPU的个数减1,将该actor复制给M个新创建的actor,称该actor为新创建的M个actor的模板结点,新创建的M个actor为该actor的复制结点;
(3-2)依次遍历每一个新创建actor的模板结点的父结点,如果该父结点是GPU端actor,将该新创建的actor与其模板结点的父结点的相应复制结点连接起来;如果该模板结点的父结点是CPU端actor,将该新创建的actor与其模板结点的父结点直接连接起来;
(3-3)依次遍历每一个新创建actor的模板结点的子结点,如果该子结点是GPU端actor,将该新创建的actor与其模板结点的子结点的相应复制结点连接起来;如果该模板结点的子结点是CPU端actor,将该新创建的actor与其模板结点的子结点直接连接起来,形成新的连通的SDF图。
5.如权利要求1-4中任一项所述的方法,其特征在于,所述步骤4包括以下子步骤:
(4-1)计算数据流程序所需CPU核数量,包括以下子步骤:
(4-1-1)分别计算CPU端任务总的执行时间CPUTime、GPU端任务总的计算时间GPUTime以及数据流程序总的通信时间CommTime;
(4-1-2)判断CPUTime是否小于GPUTime和CommTime的最大值,是则选择CPU的核数为1,否则执行步骤(4-1-3);
(4-1-3)判断分配到CPU端的actor个数是否为1,是则执行步骤(4-1-4),否则执行步骤(4-1-5);
(4-1-4)判断该actor的状态是否为stateful,是则选择CPU的核数为1,否则执行步骤(4-1-5);
(4-1-5)如果分配到CPU端的actor个数大于1或者存在工作量较大的状态为stateless的actor,根据下式计算出应用程序执行时所需要的CPU核数NCPUcore
NCPUcore=CPUTime/Max(GPUTime,CommTime)
(4-1-6)如果所求得的CPU核数大于系统当前可用的核数,则设置所需的CPU核数为系统当前可用的核数;
(4-2)完成所需CPU核数量的计算后,对状态为stateless且其工作量比较大的actor进行分裂操作,并完成各个actor与各CPU核的映射。
6.如权利要求5所述的方法,其特征在于,所述步骤(4-2)包括以下子步骤:
(4-2-1)利用下式求得理论上分配给每个CPU核的最大工作量MaxTotalWork:
MaxTotalWork=CPUTotalWork/NCPUcore
其中,CPUTotalWork表示CPU端所有actor总的工作量;NCPUcore表示计算所需的CPU核数;
(4-2-2)遍历CPU端的状态为stateless的actor,根据工作量估计求出该actor的工作量大小,如果其工作量大于MaxTotalWork,则利用复制分裂算法对该actor进行复制分裂操作;
(4-2-3)将新生成的actor与其模板结点的父结点和子结点连接以保证SDF的连通性;
(4-2-4)采用贪心划分的思想,遍历CPU端actor并根据工作量估计计算出该actor的工作量,选择当前各自总工作量最小的CPU核,将该actor划分到当前总工作量最小的CPU核上,完成该actor与CPU核的映射。
7.如权利要求1-4中任一项所述的方法,其特征在于,所述步骤5中,如果该actor与其父结点同在CPU端或同在GPU端,并且在相同的划分块中,则该actor的阶段号与其父结点的阶段号相同;如果该actor与其父结点同在CPU端或同在GPU端,但在不同的划分块中,则该actor阶段号等于其父结点阶段号加1;如果该actor与其父结点不同在CPU端或GPU端,则该actor阶段号等于其父结点阶段号加2。
8.如权利要求1-4中任一项所述的方法,其特征在于,所述步骤6中,如果生产者和消费者的阶段号相同,二者处于同一划分中且连续两次迭代执行不存在数据的访问依赖性,则生产者和消费者通信的数据存储采用单倍缓冲,访问类型采用单倍缓冲直接访问,其中,如果B的计算需要A计算的结果,则称A为生产者,B为消费者;如果生产者和消费者的阶段号相同且二者处于同一划分中,而二者连续两次迭代执行存在数据访问依赖关系,则生产者和消费者通信的数据存储采用单倍缓冲,访问类型采用单倍缓冲循环访问;如果生产者和消费者的阶段号不同,且二者连续两次迭代执行存在数据访问依赖,则生产者和消费者通信的数据存储采用多倍缓冲,访问类型采用多倍缓冲循环访问;如果生产者和消费者的阶段号不同且二者连续两次迭代执行不存在数据访问依赖性,则生产者和消费者通信的数据存储采用多缓冲,访问类型采用多缓冲并行访问。
9.如权利要求1-4中任一项所述的方法,其特征在于,所述步骤7包括以下子步骤:
(7-1)针对必须进行常量赋值的变量进行选择性常量传播;
(7-2)采用单向链表的结构将operator中未进行常量传播的变量连接起来,并与该operator绑定,其中operator为COStream的数据结构,表示一个actor;
(7-3)依次遍历SDF图中的actor,如果该actor与目标模板结点集中所有结点的名字、参数个数和各参数对应的值均不同,则将该actor加入目标模板结点集中,目标模板结点集中结点的个数即为目标模板的个数;
(7-4)对所述目标模板结点重命名,并完成SDF图中的actor与对应的模板结点的映射;
(7-5)在创建SDF图中各actor的对象过程中,将相应operator绑定的未经过常量传播的变量作为构造函数的形参,对actor的各变量进行赋值,完成actor的实例化。
CN201510429763.2A 2015-07-21 2015-07-21 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法 Active CN104965761B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510429763.2A CN104965761B (zh) 2015-07-21 2015-07-21 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510429763.2A CN104965761B (zh) 2015-07-21 2015-07-21 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法

Publications (2)

Publication Number Publication Date
CN104965761A true CN104965761A (zh) 2015-10-07
CN104965761B CN104965761B (zh) 2018-11-02

Family

ID=54219797

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510429763.2A Active CN104965761B (zh) 2015-07-21 2015-07-21 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法

Country Status (1)

Country Link
CN (1) CN104965761B (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106358003A (zh) * 2016-08-31 2017-01-25 华中科技大学 一种基于线程级流水线的视频分析加速方法
CN106648859A (zh) * 2016-12-01 2017-05-10 北京奇虎科技有限公司 一种任务调度方法和装置
CN106815070A (zh) * 2016-12-30 2017-06-09 中国科学院计算技术研究所 一种用于图像分析的高性能计算框架方法及系统
CN107247628A (zh) * 2017-06-22 2017-10-13 华中科技大学 一种面向多核系统的数据流程序任务划分与调度方法
CN107329828A (zh) * 2017-06-26 2017-11-07 华中科技大学 一种面向cpu/gpu异构集群的数据流编程方法和系统
CN107341010A (zh) * 2017-06-26 2017-11-10 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN109542596A (zh) * 2018-10-22 2019-03-29 西安交通大学 一种基于OpenCL内核任务的调度框架
CN110245025A (zh) * 2019-05-20 2019-09-17 平安科技(深圳)有限公司 一种基于Actor模型的数据采集方法、装置及存储介质
CN110659278A (zh) * 2018-06-12 2020-01-07 上海郑明现代物流有限公司 基于cpu-gpu异构架构的图数据分布式处理系统
US10614541B2 (en) 2017-06-29 2020-04-07 Nvidia Corporation Hybrid, scalable CPU/GPU rigid body pipeline
CN111552478A (zh) * 2020-04-30 2020-08-18 上海商汤智能科技有限公司 用于生成cuda程序的设备、方法和存储介质
CN112085644A (zh) * 2019-06-12 2020-12-15 上海赜睿信息科技有限公司 多列数据排序方法、装置、可读存储介质和电子设备
CN112912865A (zh) * 2018-07-27 2021-06-04 浙江天猫技术有限公司 一种图数据存储方法、系统及电子设备
CN113128034A (zh) * 2021-04-07 2021-07-16 西安邮电大学 一种基于gpu的水下无线光信道并行仿真方法
US11263060B2 (en) 2019-11-21 2022-03-01 International Business Machines Corporation Dynamic distribution of loads across heterogeneous computing structures in computational rendering
CN114398167A (zh) * 2021-12-03 2022-04-26 武汉大学 一种针对cpu-gpu两级并行计算的自动负载均衡方法
US11347546B2 (en) 2019-03-15 2022-05-31 Shanghai Sensetime Intelligent Technology Co., Ltd Task scheduling method and device, and computer storage medium
CN114996198A (zh) * 2022-08-03 2022-09-02 中国空气动力研究与发展中心计算空气动力研究所 跨处理器数据传输方法、装置、设备及介质
CN117032999A (zh) * 2023-10-09 2023-11-10 之江实验室 一种基于异步运行时的cpu-gpu协同调度方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706741A (zh) * 2009-12-11 2010-05-12 中国人民解放军国防科学技术大学 一种基于负载平衡的cpu和gpu两级动态任务划分方法
CN102651030A (zh) * 2012-04-09 2012-08-29 华中科技大学 一种基于gpu多序列比对算法的社交网络关联搜索方法
CN103427844A (zh) * 2013-07-26 2013-12-04 华中科技大学 一种基于gpu和cpu混合平台的高速无损数据压缩方法
CN103632336A (zh) * 2013-12-17 2014-03-12 武汉大学 基于负载分配的遥感影像cpu/gpu协同处理方法
WO2015097022A1 (en) * 2013-12-23 2015-07-02 Deutsche Telekom Ag System and method for mobile augmented reality task scheduling

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706741A (zh) * 2009-12-11 2010-05-12 中国人民解放军国防科学技术大学 一种基于负载平衡的cpu和gpu两级动态任务划分方法
CN102651030A (zh) * 2012-04-09 2012-08-29 华中科技大学 一种基于gpu多序列比对算法的社交网络关联搜索方法
CN103427844A (zh) * 2013-07-26 2013-12-04 华中科技大学 一种基于gpu和cpu混合平台的高速无损数据压缩方法
CN103632336A (zh) * 2013-12-17 2014-03-12 武汉大学 基于负载分配的遥感影像cpu/gpu协同处理方法
WO2015097022A1 (en) * 2013-12-23 2015-07-02 Deutsche Telekom Ag System and method for mobile augmented reality task scheduling

Cited By (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106358003A (zh) * 2016-08-31 2017-01-25 华中科技大学 一种基于线程级流水线的视频分析加速方法
CN106358003B (zh) * 2016-08-31 2019-02-19 华中科技大学 一种基于线程级流水线的视频分析加速方法
CN106648859A (zh) * 2016-12-01 2017-05-10 北京奇虎科技有限公司 一种任务调度方法和装置
CN106815070A (zh) * 2016-12-30 2017-06-09 中国科学院计算技术研究所 一种用于图像分析的高性能计算框架方法及系统
CN106815070B (zh) * 2016-12-30 2020-06-19 北京哲源科技有限责任公司 一种用于图像分析的高性能计算框架方法及系统
CN107247628B (zh) * 2017-06-22 2019-12-20 华中科技大学 一种面向多核系统的数据流程序任务划分与调度方法
CN107247628A (zh) * 2017-06-22 2017-10-13 华中科技大学 一种面向多核系统的数据流程序任务划分与调度方法
CN107341010B (zh) * 2017-06-26 2019-12-13 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN107329828B (zh) * 2017-06-26 2019-10-08 华中科技大学 一种面向cpu/gpu异构集群的数据流编程方法和系统
CN107341010A (zh) * 2017-06-26 2017-11-10 华中科技大学 一种C/C++与COStream混合编程方法和可视化编译系统
CN107329828A (zh) * 2017-06-26 2017-11-07 华中科技大学 一种面向cpu/gpu异构集群的数据流编程方法和系统
US10614541B2 (en) 2017-06-29 2020-04-07 Nvidia Corporation Hybrid, scalable CPU/GPU rigid body pipeline
CN110659278A (zh) * 2018-06-12 2020-01-07 上海郑明现代物流有限公司 基于cpu-gpu异构架构的图数据分布式处理系统
CN112912865B (zh) * 2018-07-27 2024-06-07 浙江天猫技术有限公司 一种图数据存储方法、系统及电子设备
CN112912865A (zh) * 2018-07-27 2021-06-04 浙江天猫技术有限公司 一种图数据存储方法、系统及电子设备
CN109542596A (zh) * 2018-10-22 2019-03-29 西安交通大学 一种基于OpenCL内核任务的调度框架
CN109542596B (zh) * 2018-10-22 2023-09-12 西安交通大学 一种基于OpenCL内核任务的调度方法
US11347546B2 (en) 2019-03-15 2022-05-31 Shanghai Sensetime Intelligent Technology Co., Ltd Task scheduling method and device, and computer storage medium
CN110245025A (zh) * 2019-05-20 2019-09-17 平安科技(深圳)有限公司 一种基于Actor模型的数据采集方法、装置及存储介质
CN110245025B (zh) * 2019-05-20 2022-05-10 平安科技(深圳)有限公司 一种基于Actor模型的数据采集方法、装置及存储介质
CN112085644A (zh) * 2019-06-12 2020-12-15 上海赜睿信息科技有限公司 多列数据排序方法、装置、可读存储介质和电子设备
CN112085644B (zh) * 2019-06-12 2024-05-14 上海赜睿信息科技有限公司 多列数据排序方法、装置、可读存储介质和电子设备
US11263060B2 (en) 2019-11-21 2022-03-01 International Business Machines Corporation Dynamic distribution of loads across heterogeneous computing structures in computational rendering
CN111552478B (zh) * 2020-04-30 2024-03-22 上海商汤智能科技有限公司 用于生成cuda程序的设备、方法和存储介质
CN111552478A (zh) * 2020-04-30 2020-08-18 上海商汤智能科技有限公司 用于生成cuda程序的设备、方法和存储介质
CN113128034A (zh) * 2021-04-07 2021-07-16 西安邮电大学 一种基于gpu的水下无线光信道并行仿真方法
CN114398167A (zh) * 2021-12-03 2022-04-26 武汉大学 一种针对cpu-gpu两级并行计算的自动负载均衡方法
CN114398167B (zh) * 2021-12-03 2024-09-20 武汉大学 一种针对cpu-gpu两级并行计算的自动负载均衡方法
CN114996198A (zh) * 2022-08-03 2022-09-02 中国空气动力研究与发展中心计算空气动力研究所 跨处理器数据传输方法、装置、设备及介质
CN114996198B (zh) * 2022-08-03 2022-10-21 中国空气动力研究与发展中心计算空气动力研究所 跨处理器数据传输方法、装置、设备及介质
CN117032999A (zh) * 2023-10-09 2023-11-10 之江实验室 一种基于异步运行时的cpu-gpu协同调度方法及装置
CN117032999B (zh) * 2023-10-09 2024-01-30 之江实验室 一种基于异步运行时的cpu-gpu协同调度方法及装置

Also Published As

Publication number Publication date
CN104965761B (zh) 2018-11-02

Similar Documents

Publication Publication Date Title
CN104965761A (zh) 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法
Aldinucci et al. Fastflow: High‐Level and Efficient Streaming on Multicore
CN107329828B (zh) 一种面向cpu/gpu异构集群的数据流编程方法和系统
CN103858099B (zh) 用于执行应用的方法和系统、具有机器指令的电路
CN103530187B (zh) 为多处理器系统设计程序
Danelutto et al. Structured parallel programming with “core” fastflow
Vishkin Using simple abstraction to reinvent computing for parallelism
CN103377035A (zh) 针对粗颗粒度流应用的流水并行化方法
US20130067443A1 (en) Parallel Processing Development Environment Extensions
EP3189421A1 (en) Compiling graph-based program specifications
KR20220042424A (ko) 재구성가능 아키텍처들을 위한 컴파일러 플로우 로직
CN103970580A (zh) 一种面向多核集群的数据流编译优化方法
CN103488775A (zh) 一种用于大数据处理的计算系统及计算方法
JP2020013608A (ja) データ処理グラフのコンパイル
EP2601577A2 (en) A method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system
CN103970602A (zh) 一种面向x86多核处理器的数据流程序调度方法
CN110532072A (zh) 基于微内核操作系统的分布式流式数据处理方法及系统
WO2022134307A1 (zh) 一种可重构芯片的内存耦合编译方法及系统
Chan et al. Topology-aware performance optimization and modeling of adaptive mesh refinement codes for exascale
He et al. Fecaffe: Fpga-enabled caffe with opencl for deep learning training and inference on intel stratix 10
Huang et al. Concurrent CPU-GPU Task Programming using Modern C++
CN111090613B (zh) 一种基于图分割的低复杂度软硬件划分与调度方法
Moustafa et al. 3D cartesian transport sweep for massively parallel architectures with PARSEC
Chan et al. High-level abstractions for message-passing parallel programming
Andon et al. Programming high-performance parallel computations: formal models and graphics processing units

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant