CN101706741B - 一种基于负载平衡的cpu和gpu两级动态任务划分方法 - Google Patents

一种基于负载平衡的cpu和gpu两级动态任务划分方法 Download PDF

Info

Publication number
CN101706741B
CN101706741B CN200910227185A CN200910227185A CN101706741B CN 101706741 B CN101706741 B CN 101706741B CN 200910227185 A CN200910227185 A CN 200910227185A CN 200910227185 A CN200910227185 A CN 200910227185A CN 101706741 B CN101706741 B CN 101706741B
Authority
CN
China
Prior art keywords
cpu
task
gpu
gsplit
value
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.)
Expired - Fee Related
Application number
CN200910227185A
Other languages
English (en)
Other versions
CN101706741A (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.)
National University of Defense Technology
Original Assignee
National University of Defense 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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN200910227185A priority Critical patent/CN101706741B/zh
Publication of CN101706741A publication Critical patent/CN101706741A/zh
Application granted granted Critical
Publication of CN101706741B publication Critical patent/CN101706741B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种基于负载平衡的CPU和GPU两级动态任务划分方法,要解决的技术问题在于:实现CPU和GPU之间、CPU多核之间的任务负载平衡。技术方案是为CPU和GPU之间以及CPU多核之间的任务划分建立两个数据库,记录任务的划分比例,其中CPU与GPU之间的任务划分比例根据问题规模确定,且在整个应用程序执行过程中根据CPU和GPU的实测性能自动调整任务划分的比例,实现任务划分的负载平衡。采用本发明既能保证CPU和GPU的任务负载平衡,提高科学计算程序利用GPU加速的性能,又能平衡CPU每个核之间的任务负载,提高多核CPU的性能。

Description

一种基于负载平衡的CPU和GPU两级动态任务划分方法
技术领域
本发明涉及使用图形处理单元GPU(Graphics Processing Unit,)加速科学计算的优化方法,尤指一种基于负载平衡的CPU和GPU两级动态任务划分方法。 
背景技术
GPU过去通常用于图形图像应用领域,随着GPU硬件技术的不断发展以及编程模型的发展,GPU强大的计算能力受到越来越多的重视,大量的科学计算程序都采用GPU加速其关键代码段,获得了良好的加速比。同时随着CPU多核时代的到来,CPU的计算能力也在不断增强,如果在GPU进行运算的同时,CPU也参与运算,将获得更好的加速比。这种CPU+GPU异构系统的混合编程方法负载平衡是关键,如果划分的任务不平衡,则将造成CPU或GPU中一方先完成,需要等待另一方任务完成,造成CPU或GPU空转,使得整个任务完成时间延迟,从而降低了并行效率。 
科学计算领域使用GPU加速是将整个应用程序划分为多个CPU执行区和多个GPU加速区,CPU执行区的任务一般为应用程序的入口和出口、为GPU加速区准备数据、获取GPU加速区的数据以及处理一些不适合在GPU上运行的任务,GPU加速区一般为数据密集型的并行任务,执行时间占据整个应用程序的主要部分。一般GPU加速区由GPU单独执行,此时CPU空闲。随着多核CPU的出现,CPU的计算能力越来越强,为了利用空闲的CPU,出现了将GPU加速区任务在GPU和CPU上进行划分然后并行执行的方法,目前这些方法已经比较成熟。不同的科学计算问题有不同的划分方法。例如矩阵乘运算Cm×k=Am×n×Bn×k,即矩阵Am×n乘以矩阵Bn×k,结果存在矩阵Cm×k中。这样的运算可以划分为两个矩阵乘:Cm0×k=Am0×n×Bn×k和Cm1×k=Am1×n×Bn×k,其中m0+m1=m,Cm0×k和Cm1×k组合成为Cm×k。其中的一个矩阵乘在GPU上执行,另一个在CPU上执行。为了充分发挥多核CPU的性能,GPU加速区中CPU负担的那部分任务将进一步划分,每个CPU核负担一部分任务,划分方法与GPU与CPU间的划分方法相同。问题的关键是如何确定划分的比例,划分比例将直接影响GPU与CPU、CPU各核之间的任务量,任务的不平衡会大大降低并行效率。目前,GPU与CPU之间的任务划分比例通常按照GPU和CPU的理论或实测性能静态确定,Massimiliano Fatica的论文“Accelerating Linpack with CUDA on heterogenous clusters”,Proceedings of 2nd Workshop on General PurposeProcessing on Graphics Processing Units,GPGPU 2009,Washington,DC,USA,March 8,2009,pp.46-51给出了一个划分比例:η=Ggpu/(Ggpu+Gcpu),即划分到GPU上的任务占总任务的比例为η,划分到CPU上的任务占总任务的比例为1-η,公式中Ggpu指GPU的实测性能,Gcpu指CPU的实测性能,单位都是Gflops(109次浮点运算每秒)。CPU核之间由于是同构关系,它们的任务划分采用平均分配方法,即每个核负担的任务量相同。但是这种静态的任务划分方法难以达到GPU与CPU、CPU各核之间的负载平衡。 
CPU与GPU之间采用静态方法进行任务划分难以达到负载平衡的原因有两个。第一,每个任务的问题规模各不相同,而GPU性能对问题规模十分敏感。问题规模与具体任务相关,指任务中需要处理的数据总量的相对值,可以有不同的度量。例如在矩阵乘(Am×n×Bn×k)中可以使用 
Figure G2009102271859D00021
也可以使用计算量m×n×k×2×10-9(单位:GFLOPS,109次浮点运算)进行度量,在粒子碰撞模拟应用中可以使用模拟区域内的粒子数进行度量。第二,GPU性能受其他因素的影响较大,性能波动范围大。如GPU与系统内存之间的通讯通过PCI-E总线传输,而CPU至GPU的PCI-E总线速度在实际测试中变化范围可达2.5GB/秒至5.0GB/秒。 
CPU各核之间采用平均分配方法难以达到负载平衡的原因是:在CPU+GPU的异构平台上各CPU核之间的处理能力有所不同,存在较大差异,可以分成三类。第一类CPU核只包含一个CPU核,主要负责与GPU进行数据传输,为了不影响GPU的运算,基本上不参与计算任务;第二类CPU核是与第一类CPU核具有共享cache的CPU核,包含一个或多个CPU核,它们的计算能力受第一类核的影响较大;第三类CPU核是除第一类和第二类以外剩余的CPU核,与前两类核不共享cache,受前两类核的影响较小。如果平均分配任务,势必会造成计算能力强的核任务不足而空闲,计算能力弱的核执行时间更长,而整个任务的完成时间以最后完成的CPU核为准,最终降低了CPU的整体性能。 
综上所述,目前在CPU+GPU的异构平台上,使用GPU加速科学计算程序虽然有很多成功的方法,但仍存在下面两个问题: 
1.CPU与GPU间的任务划分比例采用静态方法指定,造成CPU与GPU任务负载不平衡。 
2.CPU核间的任务划分比例采用平均分配方法,造成CPU核间任务负载不平衡。 
目前针对上述问题,本领域技术人员都在探索如何找到一个动态任务划分方法,在任 务运行时自动调整CPU与GPU、CPU各核之间的任务划分比例,达到整体负载平衡。 
发明内容
本发明要解决的技术问题在于:针对CPU和GPU之间、CPU核之间的任务负载不平衡问题,提出一种两级动态任务划分方法,实现CPU和GPU之间、以及CPU多核之间的任务负载平衡,提高科学计算程序利用GPU加速的性能。 
本发明的技术方案为:为CPU和GPU之间以及CPU多核之间的任务划分建立两个数据库,记录任务的划分比例,其中CPU与GPU之间的任务划分比例根据问题规模确定,在整个应用程序执行过程中根据CPU和GPU的实测性能自动调整任务划分的比例,实现任务划分的负载平衡。 
采用Gsplit值定义GPU所分配的任务占整个CPU和GPU并行任务的比例。采取按问题规模取值的方法解决Gsplit值随问题规模变化的问题,同时根据实测性能不断更新Gsplit值,从而达到GPU与CPU间任务负载平衡。使用数据库定义多个问题规模范围的Gsplit值,用于区分落在不同问题规模范围内的Gsplit值。初始的多个Gsplit值是根据问题规模、CPU计算峰值、GPU计算峰值估计得到的,在反复的任务运行过程中,根据实测的CPU和GPU的实际计算能力不断更新各自问题规模下的Gsplit值,本次更新的Gsplit值又作为下一次CPU和GPU并行任务划分的依据。 
对于划分为CPU完成的那部分任务,进一步在各CPU核之间进行任务划分。如前所述,由于CPU和GPU协同计算,各个CPU核的计算能力并不相同,存在较大差异,进行静态任务划分不能充分挖掘各自的计算能力获得好的负载平衡。同时,由于CPU各核的性能受问题规模影响较少,无需根据问题规模调整任务的划分比例。用Csplit值定义CPU各核所分配的任务占整个CPU并行任务的比例。具体方法如下:为每个参与任务的CPU核建立任务划分比例的数据库,设参与任务的CPU核数为N,将每个CPU核对应的Csplit值初始化为1/N,即初始状态下所有CPU计算任务平均分配到每个CPU核上。并行执行任务,同时统计各自完成的时间从而获得各CPU核的实测性能。在反复的任务运行过程中,根据实测的CPU核的实际计算能力不断更新任务划分的比例值,本次更新的值又作为下一次CPU核并行任务划分的依据。 
具体技术方案为: 
第一步、构建并初始化CPU-GPU间任务划分比例数据库DB1,DB1记录M组不同问题规模下的Gspliti,i为整数且i∈[0,M-1],M为正整数,取值范围为50~200。记录过多的问题规模会造成数据库内容过多,查找和更新数据库将耗费更多时间。另外,相近的问题规模对应其的Gsplit值也相近,记录太多的问题规模也无必要。但是另一方面,记录过少的问题规模将不能反映Gsplit值的变化趋势,使得根据此数据库取得的Gsplit值不能获得很好的效果。构建数据库DB1的具体步骤如下: 
1.1 DB1包含M组问题规模的Gsplit值,其形式为{(F0,Gsplit0),(F1,Gsplit1),...,(FM-1,GsplitM-1)},其中Fi=g(i),Gspliti∈[0,1],Fi为记录的问题规模,g(i)为记录的问题规模的分布函数,是一个单调递增函数,表示DB1第i项记录的问题规模为g(i),Gspliti表示问题规模F落在[Fi,Fi+1)范围内的并行任务块应采取的任务划分比例因子,即比例为Gspliti的任务划分在GPU上执行,比例为1-Gspliti的任务划分在CPU上执行。当F≥FM-1时,任务划分比例因子取值GsplitM-1。函数g(i)一般情况下可采用等间距分布函数g(i)=a+b×i,其中a,b为常量。定义具体任务的问题规模范围[Fmin,Fmax],Fmin≤Fmax,Fmin指问题规模的下界,Fmax指问题规模的上界,当任务确定后,它们的值通过分析任务算法和流程计算获得,或者通过模拟执行的方法统计获得。根据Fmin和Fmax的值计算出a,b的值:a=Fmin,b=(Fmax-Fmin)/(M-1)。 
1.2 初始化Gspliti值。 
Figure DEST_PATH_GSB00000830928400011
i∈[0,(M-1)],Pcpu为参与运算的CPU核的理论峰值性能,Pgpu为GPU的理论峰值性能。 
第二步、构建并初始化CPU核间的任务划分比例数据库DB2,记录参与执行任务的各CPU核所占CPU总任务的比例。DB2为向量形式{Csplit0,Csplit1,…,CsplitN-1},其中N为参与执行任务的CPU核数。Cspliti的初值为1/N,j∈[0,(N-1)]。 
第三步、启动应用程序。与通常应用程序运行相同。 
第四步、执行应用程序CPU执行区代码。与通常应用程序运行相同,完全在CPU上执行。 
第五步、进入GPU加速区入口,计算此次并行任务的问题规模F和总的计算量S,计算量S为并行任务中的所有定点、浮点运算数目之和,F通过分析任务算法计算获得,S通过分析任务算法计算获得或使用工具模拟任务的整个执行过程并进行统计获得。 
第六步、根据数据库DB1的值进行CPU、GPU的任务划分。搜索DB1,若F满足 F∈[Fi,Fi+1),取得第i项中的Gspliti值;若F≥FM-1,Gspliti取值为GsplitM-1。将占总任务的比例值为Gspliti的任务划分到GPU,GPU上的计算量为Sgpu=S×Gspliti,将占总任务的比例值为1-Gspliti的任务划分到CPU上,CPU上的计算量为Scpu=S-S×Gspliti。 
第七步、根据数据库DB2的值进行CPU核之间的任务划分。针对CPU上的每个核j,搜索数据库DB2,取得第j项中的Csplitj值。划分CPU核上的任务,方法是将占总CPU任务的比例值为Csplitj的任务分给第j个核,第j个核的计算量为Scpu[j]=(S-S×Gspliti)×Csplitj。 
第八步、执行GPU加速区的并行任务,即将划分好的GPU任务和CPU各核上的任务并行执行,同时记录各自任务的执行时间。 
第九步、同步GPU加速区的并行任务。等待各任务执行完毕,搜集各任务的执行时间(Tgpu,Tc[0],Tc[1],…,Tc[N-1]),其中Tgpu表示GPU上任务完成的时间,Tc[j],j∈[0,N-1]表示第j个CPU核上任务完成的时间。Tcpu=MAX(Tc[0],Tc[1],…,Tc[N-1])为CPU上的并行任务总的完成时间。 
第十步、更新数据库DB1。GPU的实测性能为 P gpu Δ = S gpu / T gpu = S × Gsplit i / T gpu , CPU的实测性能为 P cpu Δ = S cpu / T cpu = ( S - S × Gsplit i ) / MAX ( T c [ 0 ] , T c [ 1 ] , . . . , T c [ N - 1 ] ) . 调整第六步根据问题规模F得到的Gspliti值,方法是计算 Gsplit Δ i = P gpu Δ P cpu Δ + P gpu Δ , 用Gspliti Δ值覆盖数据库DB1中对应的Gspliti值。 
第十一步、更新数据库DB2。每个CPU核的实测性能为  P cpu [ j ] Δ = S cpu [ j ] / T c [ j ] = ( S - S × Gsplit i ) × Csplit j / T c [ j ] , j ∈ [ 0 , N - 1 ] , 计算每个CPU核负担的任务比例 Csplit j Δ = P cpu [ j ] Δ / Σ k = 0 N - 1 P cpu [ k ] Δ . 用向量{Csplit0 Δ,Csplit1 Δ,…,CsplitN-1 Δ}覆盖数据库DB2中的向量{Csplit0,Csplit1,…,CsplitN-1}。 
第十二步、判断应用程序是否结束,若结束,即应用程序中所有的任务执行完毕,则结束应用程序;若未结束,跳转至第四步。 
与现有技术相比,采用本发明可达到以下技术效果: 
1.大规模科学计算程序执行过程中,根据不同的问题规模选择最合适的任务分配比例值Gsplit,Gsplit值在应用程序运行时不断的自动修正,保证了CPU和GPU的任务负载平衡; 
2.由于CPU各个核的计算能力差异,采用动态任务划分方法自动调整每个核的任务比例值Csplit,充分挖掘每个核的计算能力,平衡每个核之间的任务负载,提高了多核CPU的性能。 
附图说明
图1是本发明总体流程图; 
图2是数据库DB1记录的不同问题规模下任务划分比例的初值,以及应用程序运行后自动调整得到的划分比例对比图。 
图3是数据库DB2记录的不同CPU核上任务划分比例的初值,以及应用程序运行后自动调整得到的划分比例对比图。 
图4是本发明方法与背景技术中的静态划分方法程序性能的比较图。 
具体实施方式
图1是本发明总体流程图。本发明包括以下步骤: 
第一步、构建并初始化CPU-GPU间任务划分比例数据库DB1,DB1记录M组不同问题规模下的Gspliti,i∈[0,M-1]值。 
第二步、构建并初始化CPU核间的任务划分比例数据库DB2,记录参与执行任务的各CPU核所占CPU总任务的比例。 
第三步、启动应用程序。 
第四步、执行应用程序CPU执行区代码。 
第五步、进入GPU加速区入口,计算此次并行任务的问题规模F和总的计算量S,计算量S包括并行任务中的所有定点、浮点运算。 
第六步、根据数据库DB1的值进行CPU、GPU的任务划分。 
第七步、根据数据库DB2的值进行CPU核之间的任务划分。 
第八步、执行GPU加速区的并行任务。 
第九步、同步GPU加速区的并行任务。 
第十步、更新数据库DB1。 
第十一步、更新数据库DB2。 
第十二步、判断应用程序是否结束,若结束,即应用程序中所有的任务执行完毕,则结束应用程序;若未结束,跳转至第四步。 
为了检验CPU、GPU的动态任务划分效果,国防科大计算机学院在CPU+GPU的混合结构上进行了实验验证,具体配置为CPU:Intel Xeon 5450,四核,频率3.0 GHz,双精度浮点计算理论峰值48Gflops;GPU加速器:ATI RADEON HD 4870×2,为了增加稳定性测试时使用了单卡,其核心频率由750MHz降为625MHz,双精度浮点计算理论峰值200Gflops;在该平台上采用AMD CAL编程模型实现了双精度浮点稠密矩阵乘加的GPU加速。测试的应用程序为HPLinpack2.0,程序的核心是使用LU分解方法求解稠密矩阵线性方程组,矩阵数据为随机生成的双精度浮点值。应用程序的主要输入参数为:N=46000,NB=1216,P=Q=1。GPU加速区为矩阵乘加运算(Am×n×Bn×k+Cm×n),问题规模使用计算量m×n×k×2×10-9(单位:GFLOPS,109次浮点运算)进行度量,通过分析任务的算法得到问题规模范围为[0,4900]。 
测试时使用CPU中的一个核与GPU进行通讯,不参与运算,剩余的三个核参与任务分配,总的峰值性能为(48/4)×3=36Gflops。根据背景技术中介绍的静态划分方法,GPU所占总任务的比例为200/(200+36)=84.75%。采用本发明进行划分时,步骤如下: 
第一步、构建并初始化CPU-GPU间任务划分比例数据库DB1,DB1记录了50组不同问题规模下的Gspliti,i∈[0,49]值。具体步骤如下: 
1.1 定义包含50组问题规模的Gsplit值的任务划分比例数据库DB1,{(F0,Gsplit0),(F1,Gsplit1),...,(F49,Gsplit49)},其中Fi=g(i),Gspliti∈[0,1],i∈[0,49]。g(i)=a+b×i,根据问题规模范围[0,4900]确定Fmin=0,Fmax=4900。根据公式a=Fmin,b=(Fmax-Fmin)/(M-1)得到a=0,b=100,即g(i)=100×i。最终定义的DB1 为{(0,Gsplit0),(100,Gsplit1),(200,Gsplit2),...,(4900,Gsplit49)} 
1.2 初始化Gspliti值。参与运算的CPU核的理论峰值性能Pcpu为36Gflops,GPU的理论峰值性能Pgpu为200Gflops。根据公式 Gsplit i = P gpu P cpu + P gpu 得到  Gsplit i = 200 36 + 200 = 0.8475 , i∈[0,49]。 
第二步、构建并初始化CPU核间的任务划分比例数据库DB2,记录参与执行任务的各CPU核所占CPU总任务的比例。参与执行任务的CPU核数N为3,平均分配任务,初始化DB2为向量形式{0.3333,0.3333,0.3334}。 
第三步、启动应用程序。 
第四步、执行应用程序CPU执行区代码。 
第五步、进入GPU加速区入口,计算此次任务的问题规模F和总的计算量S。GPU加速区任务为矩阵乘加运算Am×n×Bn×k+Cm×n,m,n,k为传给本任务的参数,问题规模F使用计算量m×n×k×2×10-9度量,计算量S=F。 
第六步、根据数据库DB1的值进行CPU、GPU的任务划分。搜索DB1,取得第i项中的Gspliti值,满足F∈[Fi,Fi+1);或者当F≥F49时,Gspliti取值Gsplit49。将占总任务的比例值为Gspliti的任务划分到GPU,GPU上的计算量为Sgpu=S×Gspliti,将占总任务的比例值为1-Gspliti的任务划分到CPU上,CPU上的计算量为Scpu=S-S×Gspliti。 
第七步、根据数据库DB2的值进行CPU核之间的任务划分。针对CPU上的每个核j∈[0,2],搜索数据库DB2,取得第j项中的Csplitj值。划分CPU核上的任务,方法是将占总CPU任务的比例值为Csplitj的任务分给第j个核,第j个核的计算量为Scpu[j]=(S-S×Gspliti)×Csplitj。 
第八步、执行GPU加速区的并行任务。将划分好的GPU任务和CPU各核上的任务并行执行,同时记录各自任务的执行时间。 
第九步、同步GPU加速区的并行任务。等待各任务执行完毕,搜集各任务的执行时间(Tgpu,Tc[0],Tc[1],Tc[2])。 
第十步、更新数据库DB1。GPU的实测性能为 P gpu Δ = S gpu / T gpu = S × Gsplit i / T gpu , CPU的实测性能为 P cpu Δ = S cpu / T cpu = ( S - S × Gsplit i ) / MAX ( T c [ 0 ] , T c [ 1 ] , T c [ 2 ] ) . 计算  Gsplit Δ i = P gpu Δ P cpu Δ + P gpu Δ , 用Gspliti Δ值覆盖数据库DB1中对应的Gspliti值。 
第十一步、更新数据库DB2。每个CPU核的实测性能为  P cpu [ j ] Δ = S cpu [ j ] / T c [ j ] = ( S - S × Gsplit i ) × Csplit j / T c [ j ] , j ∈ [ 0 , 2 ] , 计算每个CPU核负担的任务比例 Csplit j Δ = P cpu [ j ] Δ / Σ k = 0 N - 1 P cpu [ k ] Δ . 用向量{Csplit0 Δ,Csplit1 Δ,Csplit2 Δ}覆盖数据库DB2中的向量{Csplit0,Csplit1,Csplit2}。 
第十二步、判断应用程序是否结束,若结束,即应用程序中所有的任务执行完毕,则结束应用程序;若未结束,跳转至第四步。 
图2是国防科大所做上述实验中数据库DB1记录的不同问题规模下任务划分比例的 初值,以及应用本发明后自动调整得到的划分比例对比图。横坐标是问题规模F的分布,单位GFLOPS。纵坐标是GPU任务所占的比例值。对于任意一个问题规模F,GPU任务所占的比例值初始值均为0.8475,采用本发明后,应用程序会自动调整这个比例,达到任务的负载平衡。最终得到的比例值与初始值有所不同,并且随问题规模变化。 
图3是数据库DB2记录的不同CPU核上任务划分比例的初值,以及应用程序运行后自动调整得到的划分比例对比图。横坐标是CPU核的编号,纵坐标是CPU核所占CPU总任务的比例。最终每个核的划分比例有所不同,分别为{0.3412,0.3290,0.3298}。 
图4是本发明方法与背景技术中的静态划分方法程序性能的比较图。横坐标表示使用背景技术的静态划分方法和使用本发明的动态划分方法;纵坐标为测量的应用程序性能,单位为Gflops(109次浮点运算每秒),由HPLinpack输出文件得到。使用本发明时应用程序运行时间为389.25秒,性能为166.7Gflops;使用静态划分方法时应用程序执行时间为435.96秒,性能为148.8Gflops。使用本发明方法获得的性能提升约为12.03%。 

Claims (4)

1.一种基于负载平衡的CPU和GPU两级动态任务划分方法,所述GPU是指图形处理单元,其特征在于包括以下步骤:
第一步、构建并初始化CPU-GPU间任务划分比例数据库DB1,DB1记录M组不同问题规模下的Gspliti,i∈[0,M-1],M为正整数;构建DB1的具体步骤是:
1.1 DB1的形式为{(F0,Gsplit0),(F1,Gsplit1),...,(FM-1,GsplitM-1)},其中Fi=g(i),Gspliti∈[0,1],Fi为记录的问题规模,g(i)为记录的问题规模的分布函数,是一个单调递增函数,DB1第i项记录的问题规模为g(i),Gspliti表示问题规模F落在[Fi,Fi+1)范围内的并行任务块应采取的任务划分比例因子,即比例为Gspliti的任务划分在GPU上执行,比例为1-Gspliti的任务划分在CPU上执行;
1.2 初始化Gspliti值, 
Figure DEST_PATH_FSB00000830928300011
Pcpu为参与运算的CPU核的理论峰值性能,Pgpu为GPU的理论峰值性能;
第二步、构建并初始化CPU核间的任务划分比例数据库DB2,记录参与执行任务的各CPU核所占CPU总任务的比例,DB2为向量形式{Csplit0,Csplit1,…,CsplitN-1},其中N为参与执行任务的CPU核数,Cspliti的初值为1/N,j∈[0,(N-1)];
第三步、启动应用程序;
第四步、执行应用程序CPU执行区代码;
第五步、进入GPU加速区入口,计算此次并行任务的问题规模F和总的计算量S,计算量S为并行任务中的所有定点、浮点运算数目之和,F通过分析任务算法计算获得,S通过分析任务算法计算获得或使用工具模拟任务的整个执行过程并进行统计获得;
第六步、根据数据库DB1的值进行CPU、GPU的任务划分:搜索DB1,若F满足F∈[Fi,Fi+1),取得第i项中的Gspliti值;将占总任务的比例值为Gspliti的任务划分到GPU,GPU上的计算量为Sgpu=S×Gspliti,将占总任务的比例值为1-Gspliti的任务划分到CPU上,CPU上的计算量为Scpu=S-S×Gspliti
第七步、根据数据库DB2的值进行CPU核之间的任务划分:针对CPU上的每个核j,搜索数据库DB2,取得第j项中的Csplitj值,划分CPU核上的任务,方法是将占总 CPU任务的比例值为Csplitj的任务分给第j个核,第j个核的计算量为Scpu[j]=(S-S×Gspliti)×Csplitj
第八步、执行GPU加速区的并行任务,即将划分好的GPU任务和CPU各核上的任务并行执行,同时记录各自任务的执行时间;
第九步、同步GPU加速区的并行任务:等待各任务执行完毕,搜集各任务的执行时间(Tgpu,Tc[0],Tc[1],…,Tc[N-1]),其中Tgpu表示GPU上任务完成的时间,Tc[j],j∈[0,N-1]表示第j个CPU核上任务完成的时间,Tcpu=MAX(Tc[0],Tc[1],…,Tc[N-1])为CPU上的并行任务总的完成时间;
第十步、更新数据库DB1:GPU的实测性能为
Figure F2009102271859C00021
CPU的实测性能为
Figure F2009102271859C00022
调整第六步根据问题规模F得到的Gspliti值,方法是计算
Figure F2009102271859C00023
用Gspliti Δ值覆盖数据库DB1中对应的Gspliti值;
第十一步、更新数据库DB2:每个CPU核的实测性能为 计算每个CPU核负担的任务比例
Figure F2009102271859C00025
用向量{Csplit0 Δ,Csplit1 Δ,…,CsplitN-1 Δ}覆盖数据库DB2中的向量{Csplit0,Csplit1,…,CsplitN-1};
第十二步、判断应用程序是否结束,若结束,即应用程序中所有的任务执行完毕,则结束应用程序;若未结束,跳转至第四步。
2.如权利要求1所述的一种基于负载平衡的CPU和GPU两级动态任务划分方法,其特征在于当问题规模F≥FM-1时,任务划分比例因子Gspliti取值为GsplitM-1
3.如权利要求1所述的一种基于负载平衡的CPU和GPU两级动态任务划分方法,其特征在于函数g(i)采用等间距分布函数g(i)=a+b×i,其中a,b为常量,a=Fmin,b=(Fmax-Fmin)/(M-1),Fmin指问题规模的下界,Fmax指问题规模的上界,任务的问题规模范围为[Fmin,Fmax],Fmin≤Fmax,当任务确定后,Fmin和Fmax的值通过分析任务算法和流程计算获得,或者通过模拟执行的方法统计获得。
4.如权利要求1所述的一种基于负载平衡的CPU和GPU两级动态任务划分方法,其特征在于M取值范围为50~200。 
CN200910227185A 2009-12-11 2009-12-11 一种基于负载平衡的cpu和gpu两级动态任务划分方法 Expired - Fee Related CN101706741B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910227185A CN101706741B (zh) 2009-12-11 2009-12-11 一种基于负载平衡的cpu和gpu两级动态任务划分方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910227185A CN101706741B (zh) 2009-12-11 2009-12-11 一种基于负载平衡的cpu和gpu两级动态任务划分方法

Publications (2)

Publication Number Publication Date
CN101706741A CN101706741A (zh) 2010-05-12
CN101706741B true CN101706741B (zh) 2012-10-24

Family

ID=42376967

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910227185A Expired - Fee Related CN101706741B (zh) 2009-12-11 2009-12-11 一种基于负载平衡的cpu和gpu两级动态任务划分方法

Country Status (1)

Country Link
CN (1) CN101706741B (zh)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9645854B2 (en) * 2010-12-15 2017-05-09 Advanced Micro Devices, Inc. Dynamic work partitioning on heterogeneous processing devices
US20120198458A1 (en) * 2010-12-16 2012-08-02 Advanced Micro Devices, Inc. Methods and Systems for Synchronous Operation of a Processing Device
CN102135949B (zh) * 2011-03-01 2013-06-19 浪潮(北京)电子信息产业有限公司 基于图形处理器的计算网络系统、方法及装置
US8695008B2 (en) * 2011-04-05 2014-04-08 Qualcomm Incorporated Method and system for dynamically controlling power to multiple cores in a multicore processor of a portable computing device
CN102184125B (zh) * 2011-06-02 2013-11-13 首都师范大学 异构多核环境下基于程序行为在线分析的负载均衡方法
CN102436545B (zh) * 2011-10-13 2015-02-18 苏州东方楷模医药科技有限公司 一种基于gpu加速的化学结构多样性分析方法
CN102426544A (zh) * 2011-11-04 2012-04-25 浪潮(北京)电子信息产业有限公司 任务分配方法和系统
CN103713314B (zh) * 2012-09-28 2017-05-03 中国石油化工股份有限公司 一种叠前时间偏移并行处理方法
CN102929723B (zh) * 2012-11-06 2015-07-08 无锡江南计算技术研究所 基于异构众核处理器的并行程序段划分方法
CN103064657B (zh) * 2012-12-26 2016-09-28 深圳中微电科技有限公司 单个处理器上实现多应用并行处理的方法及装置
CN103164839B (zh) * 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
CN103425234B (zh) * 2013-07-30 2015-12-02 海信集团有限公司 动态调节图像处理性能的方法及显示终端
CN104635258B (zh) * 2013-11-06 2017-06-13 中国石油天然气集团公司 一种应用cpu‑gpu平台进行地震波逆时偏移成像方法
CN104267940A (zh) * 2014-09-17 2015-01-07 武汉狮图空间信息技术有限公司 一种基于cpu+gpu的地图切片的快速生成方法
CN104281494B (zh) * 2014-09-26 2017-05-10 清华大学 一种基于插值算法面向计算通信联合优化的负载均衡方法
CN104298564B (zh) * 2014-10-15 2017-05-17 中国人民解放军国防科学技术大学 一种动态均衡异构计算系统负载的方法
CN105808339B (zh) * 2014-12-29 2019-05-17 华为技术有限公司 大数据并行计算方法及装置
CN104615516B (zh) * 2015-02-06 2019-01-29 中国人民解放军国防科学技术大学 面向GPDSP的大规模高性能Linpack测试基准实现的方法
CN104836970B (zh) * 2015-03-27 2018-06-15 北京联合大学 基于gpu实时视频处理的多投影融合方法和系统
CN104965761B (zh) * 2015-07-21 2018-11-02 华中科技大学 一种基于gpu/cpu混合架构的流程序多粒度划分与调度方法
CN105468439B (zh) * 2015-11-19 2019-03-01 华东师范大学 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行方法
CN105589778A (zh) * 2016-01-12 2016-05-18 浪潮电子信息产业股份有限公司 一种linux系统下自动计算CPU浮点运算理论值的方法
CN107025225B (zh) * 2016-01-30 2018-12-14 华为技术有限公司 一种终端数据库的并行执行方法和装置
US10579350B2 (en) 2016-02-18 2020-03-03 International Business Machines Corporation Heterogeneous computer system optimization
CN107122243B (zh) * 2017-04-12 2018-07-24 浙江远算云计算有限公司 用于cfd仿真计算的异构集群系统及计算cfd任务的方法
CN108965364B (zh) * 2017-05-22 2021-06-11 杭州海康威视数字技术股份有限公司 资源配置方法、装置及系统
US10228972B2 (en) * 2017-06-22 2019-03-12 Banuba Limited Computer systems and computer-implemented methods for dynamically adaptive distribution of workload between central processing unit(s) and graphics processing unit(s)
CN107515736B (zh) * 2017-07-01 2021-01-15 广州深域信息科技有限公司 一种在嵌入式设备上加速深度卷积网络计算速度的方法
CN109388428B (zh) * 2017-08-11 2021-05-04 华为技术有限公司 图层遍历方法、控制装置及数据处理系统
CN109871848B (zh) * 2017-12-01 2022-01-25 北京搜狗科技发展有限公司 一种移动终端的文字识别方法及装置
CN109871352A (zh) * 2017-12-01 2019-06-11 北京搜狗科技发展有限公司 一种协同计算方法及装置
CN109992403B (zh) * 2017-12-30 2021-06-01 中国移动通信集团福建有限公司 多租户资源调度的优化方法、装置、终端设备及存储介质
CN109254846B (zh) * 2018-08-01 2022-06-03 国电南瑞科技股份有限公司 基于两级调度的cpu与gpu协同计算的动态调度方法及系统
CN109213601B (zh) * 2018-09-12 2021-01-01 华东师范大学 一种基于cpu-gpu的负载均衡方法及设备
CN111754381A (zh) 2019-03-26 2020-10-09 华为技术有限公司 图形渲染方法、装置和计算机可读存储介质
CN110069527B (zh) * 2019-04-22 2021-05-14 电子科技大学 一种面向数据库的gpu和cpu异构加速方法
CN110333933A (zh) * 2019-07-01 2019-10-15 华南理工大学 一种hpl计算模型仿真方法
CN110750358B (zh) * 2019-10-18 2023-06-23 上海交通大学苏州人工智能研究院 一种超算平台资源利用率分析方法
CN116048742B (zh) * 2022-05-30 2023-11-07 荣耀终端有限公司 一种数据处理方法及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1538296A (zh) * 2003-02-18 2004-10-20 图形处理单元的多线程内核
CN101441615A (zh) * 2008-11-24 2009-05-27 中国人民解放军信息工程大学 面向任务流的高效能立体并行柔性可重构计算架构模型

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1538296A (zh) * 2003-02-18 2004-10-20 图形处理单元的多线程内核
CN101441615A (zh) * 2008-11-24 2009-05-27 中国人民解放军信息工程大学 面向任务流的高效能立体并行柔性可重构计算架构模型

Also Published As

Publication number Publication date
CN101706741A (zh) 2010-05-12

Similar Documents

Publication Publication Date Title
CN101706741B (zh) 一种基于负载平衡的cpu和gpu两级动态任务划分方法
Nylons et al. Fast n-body simulation with cuda
Khaleghzadeh et al. A novel data-partitioning algorithm for performance optimization of data-parallel applications on heterogeneous HPC platforms
CN102393839B (zh) 并行数据处理系统及方法
CN104636821A (zh) 基于动态惯性权重粒子群的火电机组负荷优化分配方法
CN108595728A (zh) 一种蜂窝材料的铺层等效有限元模型构建方法
CN103246541A (zh) 自动并行化多级并行代价评估方法
CN111860867B (zh) 一种混合异构系统的模型训练方法、系统及相关装置
CN104615584B (zh) 面向gpdsp的大规模三角线性方程组求解向量化计算的方法
CN114201287B (zh) 一种基于cpu+gpu异构平台协同处理数据的方法
CN104111875B (zh) 云数据中心新增任务数动态控制装置、系统及方法
CN103076627A (zh) 一种速度模型平滑优化方法
CN106096183B (zh) 一种基于特征线法的多重并行方法
CN110147284A (zh) 基于二维长短期记忆神经网络的超级计算机工作负载预测方法
CN112131638B (zh) 大跨屋盖结构的风致动力特性类型判定方法及终端设备
CN102722472A (zh) 一种复数矩阵的优化方法
CN111651208A (zh) 面向异构众核并行计算机的模态并行计算方法及系统
CN102254245A (zh) 电力系统调度日计划分时段并行安全稳定校核方法
CN104793922A (zh) 一种大整数乘法Comba算法基于OpenMP的并行实现方法
Lastovetsky et al. Model-based optimization of MPDATA on Intel Xeon Phi through load imbalancing
CN107608786A (zh) 一种基于gpu和分布式计算的高层建筑群震害分析方法
CN105608291A (zh) 预应力混凝土桥梁调束快速方法
Gao et al. Revisiting thread configuration of SpMV kernels on GPU: A machine learning based approach
Hu et al. Fast and Scalable Gate-Level Simulation in Massively Parallel Systems
CN103530183A (zh) 大规模异构计算系统中任务计算量具有随机性的调度方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20121024

Termination date: 20171211