CN108885546B - 一种基于异构系统的程序处理方法和装置 - Google Patents

一种基于异构系统的程序处理方法和装置 Download PDF

Info

Publication number
CN108885546B
CN108885546B CN201680084277.4A CN201680084277A CN108885546B CN 108885546 B CN108885546 B CN 108885546B CN 201680084277 A CN201680084277 A CN 201680084277A CN 108885546 B CN108885546 B CN 108885546B
Authority
CN
China
Prior art keywords
executable code
computing component
computing
component
program block
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.)
Active
Application number
CN201680084277.4A
Other languages
English (en)
Other versions
CN108885546A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN108885546A publication Critical patent/CN108885546A/zh
Application granted granted Critical
Publication of CN108885546B publication Critical patent/CN108885546B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

一种基于异构系统的程序处理方法和装置,该方法为:确定待编译的程序块;根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值;若所述资源占用率预测值小于设定阈值,则将所述程序块编译为所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行。该方法对未来计算组件的负载资源占用率情况进行预测,从而可将程序块编译成适合于执行效率较高的计算组件的可执行代码,并将编译后的可执行代码分配到该执行效率较高的计算组件上进行执行,从而缩短程序的整体执行时间。

Description

一种基于异构系统的程序处理方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于异构系统的程序处理方法和装置。
背景技术
异构系统由于其具有较好的灵活性以及高能效特性,在业界得到了广泛关注和应用。异构系统是由使用不同类型的指令集和体系架构的计算组件构成的计算机系统。常见的计算组件包括:中央处理器(英文:Central Processing Unit,简称:CPU)、图形处理器(英文:Graphic Processing Unit,简称:GPU)、协处理器、数字信号处理器(英文:DigitalSignal Processor,简称:DSP)、专用集成电路(英文:Application Specific IntegratedCircuit,简称:ASIC)以及现场可编程门阵列(英文:Field Programmable Gate Array,简称:FPGA)等。不同的计算组件具有迥异的计算特性。
异构系统可以将一个程序划分为可在不同计算组件上编译和执行的多个程序块,以实现加速和提升能效的目的。但目前将基于高级编程语言编写的程序或程序块编译为在不同计算组件上的可执行代码,以及执行编译后的可执行代码的过程有可能是非常耗时的。
因此,如何提升程序在异构系统上的处理效率成为一个重要课题。
发明内容
本申请提供一种基于异构系统的程序处理方法和装置,通过最大化地利用已有的异构系统的计算资源,以提升程序在异构系统上的处理效率。
本申请第一方面,提供了一种基于异构系统的程序处理方法,包括:
确定待编译的程序块;
根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值;
若所述资源占用率预测值小于设定阈值,则将所述程序块编译为所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行。
上述实现方式考虑到异构系统中计算组件的资源占用率具有非常明显的时间依赖性,而程序块的执行效率与计算组件的资源占用率有关,为了避免因分配的计算组件的资源占用率较高而导致执行速度慢的情况,可以在编译程序块之前,预测该程序块未来被执行时各计算组件的可用资源情况,从而将该程序块分配给未来执行该程序块时资源占用率较小的计算组件,从而通过提升每个程序块在异构系统上的执行效率,实现提升整个程序在异构系统上的处理效率的目的。
在一个可能的设计中,所述根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值,包括:
计算将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的第一编译时长;
将从计算所述第一编译时长起,经过所述第一编译时长后的时刻,作为完成将所述程序块编译为所述第一可执行代码时的结束时刻;
根据所述第一计算组件的历史负载信息,确定所述第一计算组件在所述结束时刻时的所述资源占用率预测值。
在一个可能的设计中,所述第一编译时长满足下述公式要求:
Tcompile=a0+a1×N+…+ai×Ni
其中,Tcompile为将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;ai为经过多次模拟试验得到的与所述第一计算组件相关的经验值。
在一个可能的设计中,在将所述程序块编译为所述第一可执行代码之后,还包括:
检测所述第一计算组件的资源占用率实际值;
根据所述资源占用率实际值,计算所述第一计算组件执行所述第一可执行代码需要的第一执行时长;
根据第二计算组件的历史负载信息,确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长;
若所述第一执行时长大于所述第二编译时长与所述第二执行时长之和,则将所述程序块重新编译为所述第二可执行代码,并将所述第二可执行代码分配给所述第二计算组件进行执行;
若所述第一执行时长小于所述第二编译时长与所述第二执行时长之和,则继续由所述第一计算组件执行所述第一可执行代码。
通过这种实现方式,可以避免因预测的第一计算组件的资源占用率与实际的资源占用率存在偏差,导致出现程序块的执行效率达不到理想值的情况,CPU可以根据所述第一计算组件当前实际的资源占用率情况,实时调整是否重新分配负责处理该程序块的计算组件。
在一个可能的设计中,所述第一执行时长满足下述公式要求:
Figure GPA0000250915170000041
其中,Timplement为所述第一计算组件执行所述第一可执行代码需要的所述第一执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;bj
Figure GPA0000250915170000042
为经过多次模拟试验得到的与所述第一计算组件相关的经验值;Preal为所述第一计算组件在所述程序块编译完成时的资源占用率实际值;
所述第二编译时长满足下述公式要求:
T′compile=a′0+a′1×N+…+a′i×Ni
其中,T′compile为将所述程序块编译为适用于所述第二计算组件所述第二可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;a′i为经过多次模拟试验得到的与所述第二计算组件相关的经验值;
所述第二执行时长满足下述公式要求:
Figure GPA0000250915170000051
其中,T′implement为所述第二计算组件执行所述第二可执行代码需要的所述第二执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;b′j
Figure GPA0000250915170000052
为经过多次模拟试验得到的与所述第二计算组件相关的经验值;Ppredict为所述第二计算组件在所述程序块编译完成时的资源占用率预测值。
在一个可能的设计中,在所述确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值之前,还包括:
获取执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息;
根据所述计算组件信息,筛选出执行次数排在第一位的所述第一计算组件;
在所述确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长之前,还包括:
根据所述计算组件信息,筛选出执行次数排在第二位的所述第二计算组件。
本申请第二方面,提供了一种基于异构系统的程序处理装置,所述这种具有实现上述方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块或单元。
一种可能的实现方式中,所述这种包括确定单元、计算单元和处理单元:
所述确定单元,用于确定待编译的程序块;
所述计算单元,用于根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值;
所述处理单元,用于若所述资源占用率预测值小于设定阈值,则将所述程序块编译为所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行。
另一种可能的实现方式中,所述装置包括存储器、CPU、除所述CPU之外的其它计算组件和总线系统,所述存储器、所述CPU和所述其它计算组件通过所述总线系统相连;
所述CPU和其它计算组件,用于根据所述CPU的调度执行程序块编译后得到的可执行代码;
所述存储器中存储一个或多个程序,所述一个或多个程序包括指令,所述CPU通过调用所述指令,执行上述第一方面的任意一种方法。
利用本申请提供的方案,对未来计算组件的负载资源占用率情况进行预测,从而可将程序块编译成适合于执行效率较高的计算组件的可执行代码,并将编译后的可执行代码分配到该执行效率较高的计算组件上进行执行,从而缩短程序的整体执行时间。
附图说明
图1为本申请提供的一种异构系统的结构示意图;
图2为本申请提供的一种基于异构系统的程序处理方法的流程图;
图3为本申请提供的一种对程序进行并行度挖掘的示意图;
图4为本申请提供的一种获取执行过程序块的计算组件信息的示意图;
图5为本申请提供的一种计算组件在编译完程序块时的资源占用率预测值的示意图;
图6为本申请提供的一种异构系统将程序块分配至不同的计算组件进行编译和执行的示意图;
图7为本申请提供的一种基于异构系统的程序处理装置的结构示意图;
图8为本申请提供的另一种基于异构系统的程序处理装置的结构示意图。
具体实施方式
以下,对本申请中的部分用语进行解释说明。
“程序块(英文:program module)”:即可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令,是大型程序指令的一个组成部分。
“编译执行”:将用源语言编写的源程序翻译转换为计算机可以识别的二进制语言的目标程序,即可执行代码,然后再让计算机去执行这个目标程序,得到计算结果的过程。程序编译的快慢主要与异构系统的软件资源有关,程序执行的快慢主要与异构系统的硬件资源有关。
“资源占用率”:计算组件的存储资源(一般指内存)或者计算资源的当前使用率,可通过计算组件自带的传感器和程序进行计算和估计。资源占用率用于表征计算组件的硬件资源的使用情况。
“并行簇”:没有数据依赖关系的程序块的集合,集合中的程序块可以并行执行;当程序块1的执行需要程序块2的执行结果作为其输入数据时,可以认为程序块1与程序块2之间存在数据依赖关系。
另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于描述目的,而不能理解为指示或暗示相对重要性或顺序。
组成异构系统的不同的计算组件具有迥异的计算特性。基于不同计算组件的不同特性,异构系统可以将程序划分成多个程序块,并将这多个程序块分配到不同的计算组件上并行处理。因此,相对于同构系统,程序在异构系统上的处理速度更快、功耗更小。
但某些程序由于其编程语言和代码的复杂性,需要的处理时长较长。例如,在CPU和FPGA组成的异构系统中,CPU将开放运算语言(英文:Open Computing Language,简称:OpenCL)版本的CIFAR 10神经网络编译为可在FPGA上运行的硬件代码用时约为12小时,而FPGA执行编译后的硬件代码的用时又与FPGA的资源占用率有关,FPGA的资源占用率越高,执行速度越慢。
考虑到计算组件的资源占用率具有非常明显的时间依赖性,例如,在某一时段内异构系统对CPU的使用率较高,而在另一时段内异构系统对GPU的使用率较高,本申请提出了一种基于异构系统的程序处理方法和装置,该方法在为程序块分配处理该程序块的计算组件时,预测该程序块未来被执行时各计算组件的可用资源情况,将该程序块分配给未来执行该程序块时资源占用率较小的计算组件,从而通过提升每个程序块在异构系统上的执行效率,实现提升整个程序在异构系统上的处理效率的目的。
下面结合说明书附图和各实施例对本发明技术方案进行说明。
本申请提供的技术方案可以应用于图1所示的异构系统,该异构系统包括CPU资源池(即至少一个CPU)、GPU资源池、FPGA资源池、DSP资源池、ASIC资源池、外部存储以及各个资源池自带的存储,其中,
CPU作为通用处理器,大部分的芯片面积主要用于设计复杂的多级分层存储系统、流水线管理和分支预测控制器等,从而具有较强的逻辑运算能力。
GPU基于单指令多数据(英文:Single Instruction Multiple Data,简称:SIMD),具有众多流处理器核,从而具有强大的并行计算能力。
FPGA具有丰富的可编程逻辑和低功耗特性,针对不同应用可低成本的实现定制化的并行加速。
ASIC以及DSP具有高能效的特性,但是往往产品开发周期较长。
本申请中,CPU、GPU、FPGA、ASIC及DSP等计算组件用于执行程序块编译后得到的可执行代码。而CPU还用于将程序划分成至少一个程序块,决策将哪一个程序块分配给哪一个计算组件进行处理,以及将该程序块编译成适用于该计算组件的可执行代码。
需要说明的是,图1所示的异构系统仅是一个示例,本申请涉及的异构系统除了必须包含CPU资源池以外,可以具有比图1所示出的更多或更少的其余的计算组件。
CPU将程序划分成至少一个程序块后,可以根据图2所示的方法,对每个程序块进行如下处理:
步骤201:CPU确定待编译的程序块。
步骤202:所述CPU根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,该第一计算组件的资源占用率预测值。
可选的,所述第一计算组件可以是从曾经执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息中,筛选出的执行次数排在第一位的计算组件。
所述计算类型可以有不同的划分粒度,例如,从函数层面,所有包括排序函数的程序块属于一种计算类型;从运算操作级层面,所有执行累加操作循环的程序块属于一种计算类型。
可选的,CPU确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时的所述第一计算组件的资源占用率预测值的过程,可以通过如下方式实现:
第一步,计算将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的第一编译时长。
可选的,所述第一编译时长Tcompile可以通过下述公式(1)所示的多项式拟合得到:
Tcompile=a0+a1×N+…+ai×Ni 公式(1)
其中,N表示所述程序块的操作数规模(或称算法复杂度)。例如,如果某个程序块用于对两个长度都为n的数组进行对应位相加,从而输出长度为n的新数组,则该程序块的操作数规模为n。又例如,如果某个程序块用于对n x n的二维数组中所有元素加1,则该程序块的操作数规模为n2
i表示拟合系数,i为大于0的整数。i越大,则公式(1)的拟合度越高,得到的Tcompile越接近将所述程序块编译为适用于所述第一计算组件的第一可执行代码的实际编译时长。
ai为经过多次模拟试验得到的与所述第一计算组件相关的经验值。所述模拟试验可以是在已知程序块的操作数规模的情况下,将该程序块编译为适用于所述第一计算组件的第一可执行代码,获取实际编译时长,将得到的实际编译时长和已知的程序块操作数规模作为一组参数;在收集到多组与所述第一计算组件相关的参数之后,将这多组参数代入上述公式(1),拟合出能使这多组参数均满足上述公式(1)的a0,a1,……和ai
第二步,将从计算所述第一编译时长起,经过所述第一编译时长后的时刻,作为完成将所述程序块编译为所述第一可执行代码时的结束时刻。
由于在实际应用中,计算某个计算组件在未来时刻的资源占用率预测值的过程基本上是没有时间开销的,因此,可以把所述CPU开始计算某程序块的编译时长的起始时刻,等同于所述CPU开始编译该程序块的起始时刻。
最后一步,根据所述第一计算组件的历史负载信息,确定所述第一计算组件在所述结束时刻时的资源占用率预测值。
CPU可以预先统计各个计算组件的历史负载信息,即各个计算组件在历史上的各个时间节点的资源占用率。考虑到历史负载信息的代表性,在满足拟合精度的统计次数的前提下,CPU只需维护近期一段时间内的历史负载信息,例如维护近期1年内各个计算组件的历史负载信息。
在预测某个计算组件在未来的某个时间节点的资源占用率时,CPU可以从历史负载信息中查询该计算组件在历史上的这个时间节点的资源占用率的所有取值,将该资源占用率的所有取值的平均值或最大概率值,作为预测的该计算组件在该时间节点的资源占用率。
步骤203:若所述资源占用率预测值小于设定阈值,则所述CPU将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行。
可选的,若预测的所述第一计算组件在所述程序块编译完成时的资源占用率预测值大于所述设定阈值,则所述CPU可以继续从曾经执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息中,筛选出执行次数次于所述第一计算组件的其它计算组件,计算该其它计算组件在所述程序块编译完成时的资源占用率预测值;如此重复,直至查找到对应的资源占用率预测值小于所述设定阈值的计算组件。若根据所述计算组件信息查询不到满足条件的计算组件,则CPU可以随机指定一计算组件,或是仍指定所述第一计算组件,来处理所述程序块。
可选的,若所述第一计算组件在所述程序块编译完成时的资源占用率预测值等于所述设定阈值,则所述CPU既可以将所述程序块编译为适合于所述第一计算组件的所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行,也可以为所述程序块重新指定另外的计算组件。
本申请将未来执行该程序块时计算组件的可用资源情况作为当前程序块的分配依据,可以充分利用异构系统的计算资源,以及提升程序块在异构系统上的执行效率。
进一步地,当完成将程序块编译为适合于所述第一计算组件的第一可执行代码之后,为了避免因预测的第一计算组件的资源占用率与实际的资源占用率存在偏差导致程序块的执行效率达不到理想值,CPU可以根据所述第一计算组件当前实际的资源占用率情况,判断是否将该程序块分配给其他计算组件处理,具体实现过程如下:
第一步,检测所述第一计算组件的资源占用率实际值。
第二步,根据所述资源占用率实际值,计算所述第一计算组件执行所述程序块编译后得到的所述第一可执行代码需要的第一执行时长。
可选的,所述第一执行时长Timplement可以通过下述公式(2)所示的多项式拟合得到:
Figure GPA0000250915170000121
其中,N表示所述程序块的操作数规模;i表示拟合系数,i为大于0的整数;bj
Figure GPA0000250915170000122
为经过多次模拟试验得到的与所述第一计算组件相关的经验值;Preal为所述第一计算组件在所述程序块编译完成时的资源占用率实际值。
第三步,根据第二计算组件的历史负载信息,确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长。
可选的,所述第二计算组件可以是从曾经执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息中,筛选出的执行次数排在第二位的计算组件。所述第二计算组件与所述第一计算组件属于不同的计算组件。
若将程序块重新分配给所述第二计算组件处理,则CPU需要将程序块重新编译为可在所述第二计算组件上运行的硬件代码,即第二可执行代码,因此在计算所述第二计算组件处理程序块需要的时间开销时,需要综合考虑编译程序块为第二可执行代码需要的时间开销以及所述第二计算组件执行第二可执行代码需要的时间开销。
可选的,若不存在所述第二计算组件,则可以不将所述程序块重分配给其他计算组件,仍指定所述第一计算组件继续执行所述第一可执行代码。
可选的,所述第二编译时长T′compile可以通过下述公式(3)所示的多项式拟合得到:
T′compile=a′0+a′1×N+…+a′i×Ni 公式(3)
其中,N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;a′i为经过多次模拟试验得到的与所述第二计算组件相关的经验值。
可选的,所述第二执行时长T′implement可以通过下述公式(4)所示的多项式拟合得到:
Figure GPA0000250915170000123
其中,N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;b′j
Figure GPA0000250915170000131
为经过多次模拟试验得到的与所述第二计算组件相关的经验值;Ppredict为所述第二计算组件在所述程序块编译完成时的资源占用率预测值。Ppredict的计算过程可以参考上述计算所述第一计算组件在所述程序块编译完成时的资源占用率预测值的过程。
最后一步,若所述第一执行时长大于所述第二编译时长与第二执行时长之和,说明在当前各个计算组件的实际资源占用率的情况下,所述第二计算组件执行完所述程序块的速度相比所述第一计算组件有可能更快,则可以将所述程序块重新编译为适用于所述第二计算组件的第二可执行代码,并分配给所述第二计算组件进行执行。若所述第一执行时长小于所述第二编译时长与所述第二执行时长之和,则继续由所述第一计算组件执行所述第一可执行代码。若所述第一执行时长等于所述第二编译时长与所述第二执行时长之和,则既可以继续由所述第一计算组件执行所述第一可执行代码,也可以将所述程序块重新编译为适用于所述第二计算组件的第二可执行代码,并分配给所述第二计算组件进行执行。
为了更清楚地说明本申请的技术方案,下面通过一个实施例对上述流程做进一步的说明,需要说明的是,此实施例仅仅是本申请的一个实施例,不构成对本申请的限定。
如图3所示,CPU将一个程序划分成至少一个程序块后,可以通过分析各个程序块之间的数据依赖关系,建立有向无环图(英文:Directed Acyclic Graph,简称:DAG)图,并将没有数据依赖关系的程序块划分成一个并行簇,同一个并行簇中的程序块可在不同的计算组件上并行执行,例如,图3中的程序块1和程序块2可并行执行,但由于程序块3和程序块1之间存在数据依赖关系,程序块3需要在程序块1执行完毕后才能执行。需要注意的是,程序块的编译顺序不受数据依赖关系的影响,即,所有的程序块都可并行编译。
并行簇有不同的划分方式,图3所示的并行簇的划分方式仅是一种示例,例如,可以将程序块1单独划分成一个并行簇,将程序块2和程序块3划分成一个并行簇。
现以图3中的程序块1和程序块2为例,说明CPU如何对任一个并行簇中的程序块进行处理。
CPU针对当前待编译的程序块1和程序块2,分别统计曾执行过程序块1和程序块2所属的计算类型编译得到的可执行代码的计算组件以及各计算组件的执行次数,并按照执行次数对计算组件进行排序。如图4所示,曾执行过程序块1所属的计算类型编译得到的可执行代码的计算组件只有CPU,曾执行过程序块2所属的计算类型编译得到的可执行代码的计算组件有CPU、GPU和FPGA。
针对程序块1,CPU直接将程序块1分配给唯一执行过其所属计算类型编译得到的可执行代码的CPU进行编译和执行。
针对程序块2,CPU根据公式(1)分别预测将程序块2编译为适合于GPU、FPGA和CPU的可执行代码需要的编译时长,结合预先拟合出的如图5所示的各计算组件在各个时间点的历史负载信息,分别得到GPU、FPGA和CPU在程序块2编译完成时的资源占用率预测值,即程序块2被编译成适合于GPU的可执行代码时的GPU的资源占用率预测值、程序块2被编译成适合于FPGA的可执行代码时的FPGA的资源占用率预测值、程序块2被编译成适合于CPU的可执行代码时的CPU的资源占用率预测值。由图5可见,GPU和CPU在程序块2编译完成时的资源占用率预测值超过用户定义的设定阈值,FPGA在程序块2编译完成时的资源占用率预测值低于用户定义的设定阈值,则CPU可以将程序块2编译为适用于执行次数次于CPU的FPGA的可执行代码,当程序块2编译完成后,CPU根据当前FPGA的资源占用率实际值,预测和对比程序块2在当前的计算组件FPGA和候选的计算组件CPU、GPU上完成执行所需要的时间开销。若FPGA所需要的时间开销较短,则无需作调整,继续由FPGA执行编译后得到的可执行代码。若FPGA所需要的时间开销较长,则将程序块2重新编译为适用于CPU和GPU中需要的时间开销较短的计算组件的可执行代码,并分配进行执行。
依次类推,图3中的其它程序块也可以按照上述方式处理,CPU可将程序块编译为适用于不同的计算组件的可执行代码,并分配进行执行,如图6所示。
基于本申请上述提供的基于异构系统的程序处理方法,本申请提供一种基于异构系统的程序处理装置700,如图7所示,所述装置700包括:
确定单元701,用于确定待编译的程序块。
计算单元702,用于根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值。
处理单元703,用于若所述资源占用率预测值小于设定阈值,则将所述程序块编译为所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行。
可选的,所述计算单元702,在根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时的所述第一计算组件的资源占用率预测值时,具体用于:计算将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的第一编译时长;将从计算所述第一编译时长起,经过所述第一编译时长后的时刻,作为完成将所述程序块编译为所述第一可执行代码时的结束时刻;根据所述第一计算组件的历史负载信息,确定所述第一计算组件在所述结束时刻时的所述资源占用率预测值。
可选的于,所述计算单元702得到的所述第一编译时长满足下述公式要求:
Tcompile=a0+a1×N+…+ai×Ni
其中,Tcompile为将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;ai为经过多次模拟试验得到的与所述第一计算组件相关的经验值。
可选的,所述装置700还可以包括检测单元;
所述检测单元,用于在所述处理单元703将所述程序块编译为所述第一可执行代码之后,检测所述第一计算组件的资源占用率实际值。
相应的,所述计算单元702还可以用于,根据所述资源占用率实际值,计算所述第一计算组件执行所述第一可执行代码需要的第一执行时长;根据第二计算组件的历史负载信息,计算将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长。
相应的,所述处理单元703还可以用于,若所述第一执行时长大于所述第二编译时长与所述第二执行时长之和,则将所述程序块重新编译为所述第二可执行代码,并将所述第二可执行代码分配给所述第二计算组件进行执行;若所述第一执行时长小于所述第二编译时长与所述第二执行时长之和,则继续由所述第一计算组件执行所述第一可执行代码。
可选的,所述计算单元702得到的所述第一执行时长满足下述公式要求:
Figure GPA0000250915170000161
其中,Timplement为所述第一计算组件执行所述第一可执行代码需要的所述第一执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;bj
Figure GPA0000250915170000162
为经过多次模拟试验得到的与所述第一计算组件相关的经验值;Preal为所述第一计算组件在所述程序块编译完成时的资源占用率实际值;
所述计算单元702得到的所述第二编译时长满足下述公式要求:
T′compile=a′0+a′1×N+…+a′i×Ni
其中,T′compile为将所述程序块编译为适用于所述第二计算组件所述第二可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;a′i为经过多次模拟试验得到的与所述第二计算组件相关的经验值;
所述计算单元702得到的所述第二执行时长满足下述公式要求:
Figure GPA0000250915170000171
其中,T′implement为所述第二计算组件执行所述第二可执行代码需要的所述第二执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;b′j
Figure GPA0000250915170000172
为经过多次模拟试验得到的与所述第二计算组件相关的经验值;Ppredict为所述第二计算组件在所述程序块编译完成时的资源占用率预测值。
可选的,所述装置700还可以包括筛选单元;
所述筛选单元,用于在所述计算单元702确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时、所述第一计算组件的资源占用率预测值之前,获取执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息,并根据所述计算组件信息,筛选出执行次数排在第一位的所述第一计算组件;以及,在所述计算单元702确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长和所述第二计算组件执行所述第二可执行代码需要的第二执行时长之前,根据所述计算组件信息,筛选出执行次数排在第二位的所述第二计算组件。
本实施例中未尽之细节可参考上述图2所示方法中的描述,在此不再赘述。
需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
基于上述提供的基于异构系统的程序处理方法,本申请还提供一种基于异构系统的程序处理装置800,如图8所示,所述装置800包括存储器801、CPU 802、除所述CPU 802之外的其它计算组件803和总线系统804,所述存储器801、所述CPU 802和所述其它计算组件803通过所述总线系统804相连。
所述CPU 802和其它计算组件803,用于根据所述CPU 802的调度执行程序块编译后得到的可执行代码;
所述存储器801中存储一个或多个程序,所述一个或多个程序包括指令,所述CPU802通过调用所述指令,执行上述任意一种情况下的基于异构系统的程序处理方法。
综上所述,本申请提供的技术方案通过预测程序块的编译时长和执行时长,以及结合计算组件的历史负载信息,可以对未来计算组件的负载资源占用率情况进行预测,从而可将程序块编译成适合于执行效率较高的计算组件的可执行代码,并将编译后的可执行代码分配到该执行效率较高的计算组件上进行执行,从而缩短程序的整体执行时间。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (11)

1.一种基于异构系统的程序处理方法,其特征在于,包括:
确定待编译的程序块;
根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值;
若所述资源占用率预测值小于设定阈值,则将所述程序块编译为所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行;
其中,所述根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值,包括:
计算将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的第一编译时长;
将从计算所述第一编译时长起,经过所述第一编译时长后的时刻,作为完成将所述程序块编译为所述第一可执行代码时的结束时刻;
根据所述第一计算组件的历史负载信息,确定所述第一计算组件在所述结束时刻时的所述资源占用率预测值。
2.如权利要求1所述的方法,其特征在于,所述第一编译时长满足下述公式要求:
Tcompile=a0+a1×N+…+ai×Ni
其中,Tcompile为将所述程序块编译为所述第一可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;ai为经过多次模拟试验得到的与所述第一计算组件相关的一个经验值,a0为经过多次模拟试验得到的与所述第一计算组件相关的另一个经验值。
3.如权利要求1-2中任一项所述的方法,其特征在于,在将所述程序块编译为所述第一可执行代码之后,还包括:
检测所述第一计算组件的资源占用率实际值;
根据所述资源占用率实际值,计算所述第一计算组件执行所述第一可执行代码需要的第一执行时长;
根据第二计算组件的历史负载信息,确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长;
若所述第一执行时长大于所述第二编译时长与所述第二执行时长之和,则将所述程序块编译为所述第二可执行代码,并将所述第二可执行代码分配给所述第二计算组件进行执行;
若所述第一执行时长小于所述第二编译时长与所述第二执行时长之和,则继续由所述第一计算组件执行所述第一可执行代码。
4.如权利要求3所述的方法,其特征在于,所述第一执行时长满足下述公式要求:
Figure FDA0002936303260000011
其中,Timplement为所述第一计算组件执行所述第一可执行代码需要的所述第一执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;bj
Figure FDA0002936303260000012
为经过多次模拟试验得到的与所述第一计算组件相关的经验值;Preal为所述第一计算组件在所述程序块编译完成时的资源占用率实际值;
所述第二编译时长满足下述公式要求:
T′compile=a′0+a′1×N+…+a′i×Ni
其中,T′compile为将所述程序块编译为所述第二可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;a′i为经过多次模拟试验得到的与所述第二计算组件相关的一个经验值,a′0为经过多次模拟试验得到的与所述第二计算组件相关的另一个经验值;
所述第二执行时长满足下述公式要求:
Figure FDA0002936303260000021
其中,T′implement为所述第二计算组件执行所述第二可执行代码需要的所述第二执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;b′j
Figure FDA0002936303260000022
为经过多次模拟试验得到的与所述第二计算组件相关的经验值;Ppredict为所述第二计算组件在所述程序块编译完成时的资源占用率预测值。
5.如权利要求3所述的方法,其特征在于,在所述确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值之前,还包括:
获取执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息;
根据所述计算组件信息,筛选出执行次数排在第一位的所述第一计算组件;
在所述确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长之前,还包括:
根据所述计算组件信息,筛选出执行次数排在第二位的所述第二计算组件。
6.一种基于异构系统的程序处理装置,其特征在于,包括:
确定单元,用于确定待编译的程序块;
计算单元,用于根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值;
处理单元,用于若所述资源占用率预测值小于设定阈值,则将所述程序块编译为所述第一可执行代码,并将所述第一可执行代码分配给所述第一计算组件进行执行;
其中,所述计算单元,在根据第一计算组件的历史负载信息,确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时,所述第一计算组件的资源占用率预测值时,具体用于:
计算将所述程序块编译为适用于所述第一计算组件的所述第一可执行代码需要的第一编译时长;
将从计算所述第一编译时长起,经过所述第一编译时长后的时刻,作为完成将所述程序块编译为所述第一可执行代码时的结束时刻;
根据所述第一计算组件的历史负载信息,确定所述第一计算组件在所述结束时刻时的所述资源占用率预测值。
7.如权利要求6所述的装置,其特征在于,所述计算单元得到的所述第一编译时长满足下述公式要求:
Tcompile=a0+a1×N+…+ai×Ni
其中,Tcompile为将所述程序块编译为所述第一可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;ai为经过多次模拟试验得到的与所述第一计算组件相关的一个经验值,a0为经过多次模拟试验得到的与所述第一计算组件相关的另一个经验值。
8.如权利要求6-7中任一项所述的装置,其特征在于,所述装置还包括检测单元;
所述检测单元,用于在所述处理单元将所述程序块编译为所述第一可执行代码之后,检测所述第一计算组件的资源占用率实际值;
所述计算单元还用于,根据所述资源占用率实际值,计算所述第一计算组件执行所述第一可执行代码需要的第一执行时长;根据第二计算组件的历史负载信息,计算将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长,以及所述第二计算组件执行所述第二可执行代码需要的第二执行时长;
所述处理单元还用于,若所述第一执行时长大于所述第二编译时长与所述第二执行时长之和,则将所述程序块编译为所述第二可执行代码,并将所述第二可执行代码分配给所述第二计算组件进行执行;若所述第一执行时长小于所述第二编译时长与所述第二执行时长之和,则继续由所述第一计算组件执行所述第一可执行代码。
9.如权利要求8所述的装置,其特征在于,所述计算单元得到的所述第一执行时长满足下述公式要求:
Figure FDA0002936303260000031
其中,Timplement为所述第一计算组件执行所述第一可执行代码需要的所述第一执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;bj
Figure FDA0002936303260000034
为经过多次模拟试验得到的与所述第一计算组件相关的经验值;Preal为所述第一计算组件在所述程序块编译完成时的资源占用率实际值;
所述计算单元得到的所述第二编译时长满足下述公式要求:
T′compile=a′0+a′1×N+…+a′i×Ni
其中,T′compile为将所述程序块编译为所述第二可执行代码需要的编译时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;a′i为经过多次模拟试验得到的与所述第二计算组件相关的一个经验值,a′0为经过多次模拟试验得到的与所述第二计算组件相关的另一个经验值;
所述计算单元得到的所述第二执行时长满足下述公式要求:
Figure FDA0002936303260000032
其中,T′implement为所述第二计算组件执行所述第二可执行代码需要的所述第二执行时长;N为所述程序块的操作数规模;i为拟合系数,i为大于0的整数;b′j
Figure FDA0002936303260000033
为经过多次模拟试验得到的与所述第二计算组件相关的经验值;Ppredict为所述第二计算组件在所述程序块编译完成时的资源占用率预测值。
10.如权利要求8所述的装置,其特征在于,所述装置还包括筛选单元;
所述筛选单元,用于在所述计算单元确定在完成将所述程序块编译为适用于所述第一计算组件的第一可执行代码时、所述第一计算组件的资源占用率预测值之前,获取执行过所述程序块所属的计算类型编译得到的可执行代码的计算组件信息,并根据所述计算组件信息,筛选出执行次数排在第一位的所述第一计算组件;以及,在所述计算单元确定将所述程序块编译为适用于所述第二计算组件的第二可执行代码需要的第二编译时长和所述第二计算组件执行所述第二可执行代码需要的第二执行时长之前,根据所述计算组件信息,筛选出执行次数排在第二位的所述第二计算组件。
11.一种基于异构系统的程序处理装置,其特征在于,包括存储器、中央处理器CPU、除所述CPU之外的其它计算组件和总线系统,所述存储器、所述CPU和所述其它计算组件通过所述总线系统相连;
所述CPU和所述其它计算组件,用于根据所述CPU的调度执行程序块编译后得到的可执行代码;
所述存储器中存储一个或多个程序,所述一个或多个程序包括指令,所述CPU通过调用所述指令,执行如权利要求1至5任一项所述的方法。
CN201680084277.4A 2016-04-08 2016-04-08 一种基于异构系统的程序处理方法和装置 Active CN108885546B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2016/078877 WO2017173662A1 (zh) 2016-04-08 2016-04-08 一种基于异构系统的程序处理方法和装置

Publications (2)

Publication Number Publication Date
CN108885546A CN108885546A (zh) 2018-11-23
CN108885546B true CN108885546B (zh) 2021-07-20

Family

ID=60000162

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680084277.4A Active CN108885546B (zh) 2016-04-08 2016-04-08 一种基于异构系统的程序处理方法和装置

Country Status (2)

Country Link
CN (1) CN108885546B (zh)
WO (1) WO2017173662A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110018831B (zh) * 2019-04-04 2022-11-08 中科寒武纪科技股份有限公司 程序处理方法、装置及计算机可读存储介质
CN112839238B (zh) * 2019-11-22 2023-03-24 腾讯科技(深圳)有限公司 投屏播放方法、装置和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101441569B (zh) * 2008-11-24 2012-05-30 中国人民解放军信息工程大学 基于异构可重构体系结构面向任务流的编译方法
CN104423994B (zh) * 2013-09-03 2018-05-11 华为技术有限公司 一种代码生成方法、编译器、调度方法、装置及调度系统
CN104424009B (zh) * 2013-09-06 2017-10-17 华为技术有限公司 OpenCL程序编译方法和编译器
GB2521367A (en) * 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems

Also Published As

Publication number Publication date
WO2017173662A1 (zh) 2017-10-12
CN108885546A (zh) 2018-11-23

Similar Documents

Publication Publication Date Title
Konstantinidis et al. A quantitative roofline model for GPU kernel performance estimation using micro-benchmarks and hardware metric profiling
EP2707797B1 (en) Automatic load balancing for heterogeneous cores
US9665474B2 (en) Relationships derived from trace data
US8707314B2 (en) Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US9436512B2 (en) Energy efficient job scheduling in heterogeneous chip multiprocessors based on dynamic program behavior using prim model
Khalid et al. Troodon: A machine-learning based load-balancing application scheduler for CPU–GPU system
KR20120068572A (ko) 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법
JP6763072B2 (ja) データ処理グラフのコンパイル
Quan et al. A scenario-based run-time task mapping algorithm for mpsocs
US9396095B2 (en) Software verification
Sioutas et al. Schedule synthesis for halide pipelines on gpus
CN108885546B (zh) 一种基于异构系统的程序处理方法和装置
Helal et al. AutoMatch: An automated framework for relative performance estimation and workload distribution on heterogeneous HPC systems
Uhrie et al. Automated parallel kernel extraction from dynamic application traces
US20120192168A1 (en) Compiler device
JP2016143378A (ja) 並列化コンパイル方法、並列化コンパイラ、及び、電子装置
Papadimitriou et al. Multiple-tasks on multiple-devices (MTMD): exploiting concurrency in heterogeneous managed runtimes
Krishna et al. Optimizing graph algorithms in asymmetric multicore processors
KR102022972B1 (ko) 이종 멀티 프로세싱 시스템 환경 기반 런타임 관리장치 및 방법
JP2016143377A (ja) 並列化コンパイル方法、並列化コンパイラ、及び、電子装置
JP2021039666A (ja) コア割当装置及びコア割当方法
Liang et al. Register and thread structure optimization for GPUs
Han et al. Genetic algorithm based parallelization planning for legacy real-time embedded programs
Shao et al. Map-reduce inspired loop parallelization on CGRA
CN113886057B (zh) 异构众核上基于剖析技术以及数据流信息的动态资源调度方法

Legal Events

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