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

文档序号:9249161阅读:来源:国知局
否则执行步骤(4-1-5);
[0061](4-1-5)如果分配到CPU端的actor个数大于I或者存在工作量较大的状态为stateless的actor,根据下式计算出应用程序执行时所需要的CPU核数Nmktm:
[0062]Ncpucore = CPUTime/Max (GPUTime,CommTime)
[0063](4-1-6)如果所求得的CPU核数大于系统当前可用的核数,则设置所需的CPU核数为系统当前可用的核数,保证经过划分后的每个划分块均有对应的CPU核执行;
[0064](4-2) CPU端任务的均衡化。完成所需CPU核数的计算后,对状态为stateless且其工作量比较大的actor进行分裂操作,并完成各个计算结点与各CPU核的映射,即均衡化过程,该过程包括以下子步骤:
[0065](4-2-1)利用下式求得理论上分配给每个CPU核的最大工作量MaxTotalWork:
[0066]MaxTotalffork = CPUTotalffork/NCPUcore
[0067]其中,CPUTotalffork表示CPU端所有actor总的工作量…。^―表示计算所需的CPU核数;
[0068](4-2-2)遍历CPU端的状态为stateless的actor,根据工作量估计求出该actor的工作量大小,如果其工作量大于MaxTotalWork,则利用复制分裂算法对该actor进行复制分裂操作;
[0069](4-2-3)将新生成的actor与其模板结点的父结点和子结点连接以保证SDF的连通性;
[0070](4-2-4)采用贪心的思想,遍历CPU端actor并根据工作量估计计算出该actor的工作量,选择当前各自总工作量最小的CPU核,将该actor划分到当前总工作量最小的CPU核上,完成该actor与CPU核的映射。
[0071]步骤5阶段赋值
[0072]该步骤确定各结点被流水调度执行时的阶段号,从而实现软件流水调度,使结点计算和数据通信可以重叠执行。首先对SDF图进行拓扑排序,以满足数据的读写规则,然后依次遍历拓扑排序中的各actor,如果该actor与其父结点同在CPU端或同在GPU端,并且该actor与其父结点在相同的划分块中,那么该actor的阶段号与其父结点的阶段号相同;如果该actor与其父结点同在CPU端或同在GPU端,但是该actor与其父结点不在相同的划分块中,那么该actor阶段号等于其父结点阶段号加I ;如果该actor与其父结点不同在CPU端或GPU端,那么该actor阶段号等于其父结点阶段号加2,因为该actor与其父结点不同在CPU端或不同在GPU端则会产生通信,异构通信在软件流水调度过程中需要占用一个阶段号。
[0073]图5所示为本发明基于GPU/CPU混合架构的数据流程序阶段赋值结果示意图。先设定首结点A的阶段号为0,B与父结点A都分配到CPU端,但B与A不在相同的划分块中,故B的阶段号为A的阶段号加I ;(:与父结点B都被分配到CPU端,且在相同的划分块中,故C与B的阶段号相同,同为I ;D分配到GPU端,其父结点C分配到CPU端,而异构通信需要占用一个阶段号,故D阶段号为B的阶段号加2 ;E、F和G划分到GPU端,且与其父结点在相同的划分块中,故E、F和G的阶段号与D的阶段号相同,H和I的阶段号同理可得。
[0074]本发明基于GPU/CPU混合架构的数据流程序优化主要包括数据流程序存储访问优化和目标代码优化两部分内容。根据数据流程序各任务的通信特点,采用多种存储结构多种访问类型的存储优化方法,提高存储的访问效率;针对存在大量任务计算相同的情况,提出目标代码优化方法,生成目标模板类,大大减小目标代码的冗余量。
[0075]步骤6数据流程序存储访问优化
[0076]数据流程序存储访问优化根据任务的通信特点,提出了多种存储结构多种访问类型的优化方法,在本发明实施例中,采用三种存储结构:单倍缓冲、多倍缓冲和多缓冲,存储访问类型分四种类型:单倍缓冲直接访问、单倍缓冲循环访问、多倍缓冲循环访问和多缓冲并行访问,存储方式的选择跟actor的阶段号和有通信的actor间迭代执行是否有数据依赖密切相关。
[0077]图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为消费者。如果生产者和消费者的阶段号相同,二者处于同一划分中且连续两次迭代执行不存在数据的访问依赖性,那么生产者和消费者通信的数据存储采用单倍缓冲,访问类型采用单倍缓冲直接访问;如果生产者和消费者的阶段号相同且二者处于同一划分中,而二者连续两次迭代执行存在数据访问依赖关系,那么生产者和消费者通信的数据存储采用单倍缓冲,访问类型采用单倍缓冲循环访问;如果生产者和消费者的阶段号不同,且二者连续两次迭代执行存在数据访问依赖,那么生产者和消费者通信的数据存储采用多倍缓冲,访问类型采用多倍缓冲循环访问;如果生产者和消费者的阶段号不同且二者连续两次迭代执行不存在数据访问依赖性,那么生产者和消费者通信的数据存储采用多缓冲,访问类型采用多缓冲并行访问。
[0078]步骤7数据流程序目标代码优化
[0079]COStream数据流编程语言主要有stream、operator和composite三个语法结构组成,operator表示SDF图中最基本的计算单元actor,stream作为通信边的抽象连接SDF图中的actor,composite表示由一个或多个operator组成的可重用的数据流子图结构,是SDF图可复用子图的抽象。COStream数据流程序的目标代码主要包括actor对应类定义代码、actor的kernel执行代码、数据通信代码、同步流水线控制代码以及线程控制代码五部分内容。针对存在的大量actor计算任务相同的问题,提出目标代码优化方法,生成目标模板类,大大减小目标代码的冗余量,具体包括以下子步骤:
[0080](7-1)针对必须进行常量赋值的一些变量,例如COStream数据流程序中的数组results [N]中的变量 N,In [permutat1n [i] ].x 中的数组变量 permutat1n [i],数组变量permutat1n[i]在各operator中数值不同(operator为COStream的数据结构,表示一个计算结点actor)等,在编译过程中将这些变量换为对应的具体数值,即进行选择性常量传播;
[0081](7-2)采用单向链表的结构将operator中未进行常量传播的变量连接起来,并与该operator绑定;
[0082](7-3)依次遍历SDF图中的actor,如果该actor与目标模板结点集中所有结点的名字、参数个数和各参数对应的值均不同,则将该actor加入目标模板结点集中,目标模板结点集中结点的个数即为目标模板的个数;
[0083](7-4)对目标模板结点重命名,并完成SDF图中的actor与对应的模板结点的映射;
[0084](7-5)在创建SDF图中各actor的对象过程中,将相应operator绑定的未经过常量传播的变量作为构造函数的形参,对actor的各变量进行赋值,完成actor的实例化。
[0085]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种基于GPU/CPU混合架构的流程序多粒度划分与调度方法,其特征在于,包括: 步骤I引入扩大因子,将actor稳态执行次数整体扩大; 步骤2根据actor是否具有可并行性以及相应通信开销的大小将其分配到GPU端或CPU端上去运行; 步骤3根据actor连续迭代执行是否存在数据依赖性,将其水平分裂到各GPU端; 步骤4选择合适的CPU核数量,将CPU端任务均衡分配给各CPU核; 步骤5对SDF图进行拓扑排序以满足数据的读写规则,依次遍历拓扑排序中的各actor,确定各actor被流水调度执行时的阶段号; 步骤6根据各actor的通信特点,采用不同存储结构和不同访问类型进行数据流程序的存储访问优化; 步骤7根据各actor的计算特点,压缩计算相同的a
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1