首页 / 专利库 / 人工智能 / 机器学习 / 分析学习 / 一种基于OpenCL内核任务的调度框架

一种基于OpenCL内核任务的调度框架

阅读:0发布:2021-05-31

专利汇可以提供一种基于OpenCL内核任务的调度框架专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于OpenCL 内核 任务的调度 框架 。该框架包括经LLVM编译器对OpenCL内核任务进行特征提取与特征选择,得到内核代码的编译时静态特征与运行时特征;在特征提取过程中,使用Greedy Feature Selection 算法 选出最重要的几个特征,避免过拟合现象;然后将选择出来的特征使用 机器学习 中的静态分类器预测CPU与GPU的任务划分比例;最后使用调度算法对获得的任务划分比例与平台可利用设备信息,对任务进行实际的调度,本发明完成了上述功能的设计细节、实现算法和编码工作,实现了在异构系统中通过机器学习与调度算法结合,实现对计算资源的最大化利用的一种自动化调度,提高异构系统资源利用率。,下面是一种基于OpenCL内核任务的调度框架专利的具体信息内容。

1.一种基于OpenCL内核任务的调度框架,其特征在于,该框架中对于输入的每个OpenCL内核任务,在编译阶段生成其二进制文件,并得到AST抽象语法树,通过LLVM编译器从AST抽象语法树中分析抽取OpenCL内核静态代码特征,再经运行阶段得到动态代码特征,其中为了避免出现过拟合现象,使用Greedy Feature Selection算法对选出来的特征进行排序,选出最重要的几个特征,然后利用机器学习的SVM分类器预测得到任务划分比例,比例值是处于0到10之间的整数,最后将输入的OpenCL内核任务按照预测得到的划分比例值以Baseline调度算法调度到实际可用的设备CPU或GPU上,但对于有明显倾向的任务,比如得到的划分比例是9,表明该任务倾向于在GPU上执行,就按照添加了阈值机制的BIAS算法调度到具体的设备上。
2.根据权利要求1所述的一种基于OpenCL内核任务的调度框架,其特征在于,所述的通过LLVM编译器从AST抽象语法树中分析抽取OpenCL内核静态代码特征,是基于Clang和LLVM完成的,将特征抽取分为编译阶段特征抽取与运行时阶段特征抽取,在编译阶段特征抽取中,OpenCL内核程序通过Clang生成一棵AST抽象语法树,遍历AST,抽取代码静态特征,如:
浮点运算操作、定点运算操作、内存访问操作、OpenCL内建函数;在运行时阶段,抽取运行时特征,诸如问题大小特征,主机与内存之间的数据转换、全局工作项数目。
3.根据权利要求1所述的一种基于OpenCL内核任务的调度框架,其特征在于,所述的为了避免出现过拟合现象,使用Greedy Feature Selection算法对选出来的特征进行排序,选出最重要的几个特征,过程为所有的特征集为S,单个特征s∈S,已选择的特征集F,给F定义一个最小的错误mse,从S中抽取一个s,加入到F中,训练新的F,若mse减小,则确定将该特征加入F,并由mse值对其F中的特征进行排序,其中用SVM(support vector machine)完成这个贪心算法的训练。
4.根据权利要求1所述的一种基于OpenCL内核任务的调度框架,其特征在于,所述的基于机器学习的分类器预测得到任务划分比例,将选出来的几个重要特征作为输入,使用静态分类器,预测得到任务划分比例p值,p代表计算量数据空间的分配,代表任务在CPU/GPU上执行的比例,如,0代表完全在CPU上执行,10代表完全在GPU上执行,0与10之间的p值代表在CPU-GPU上同时执行。
5.根据权利要求1所述的一种基于OpenCL内核任务的调度框架,其特征在于,所述的基于Baseline调度算法,该算法中定义了三种任务队列C、G、M,分别表示任务只在CPU或者GPU或者单个CPU与GPU之间执行,在算法执行过程中,若两种设备类型都处于空闲状态,就从等待队列Q中选择一个任务,将其调度模式改为CPU-GPU混合模式后执行调度;若只有一个设备可用,从队列Q中选择一个任务,将调度模式改为在空闲GPU或在CPU上调度执行。
6.根据权利要求1所述的一种基于OpenCL内核任务的调度框架,其特征在于,所述的添加了阈值机制的BIAS算法,通过定义阈值使具有明显偏向特征的任务,即偏向在CPU或GPU上执行,避免跨设备共同执行的多余开销,不按照划分比例执行,直接调度到单类设备上执行,根据实验经验设置阈值上界和阈值下界,当系统中两种设备都可用时,先将任务的执行模式设置为CPU和GPU共同执行,之后根据阈值的上下界确定实际使用的调用模式,若其中一个任务的划分比例小于等于阈值下界,将其完全调度到CPU上执行;当其划分比例比例大于等于阈值上界,将其全调度到GPU上执行,当系统中只有一个设备可用时,以Baseline算法执行。

说明书全文

一种基于OpenCL内核任务的调度框架

技术领域

[0001] 本发明属于计算机应用领域,具体涉及一种在异构系统中使用机器学习方法实现任务划分的任务调度框架。

背景技术

[0002] 在近十年以来,各大处理器厂商热切关注高性能计算领域,尝试研发最新最前沿的计算加速卡。英特尔、英伟达、AMD公司开发的GPU、FPGA等加速卡被广泛应用于各个领域。异构计算技术在上世纪80年代就已经产生,具有高性能、可扩展性好的特点。另外,在目前的加速卡市场火热、人工智能技术的发展下,异构计算已经成为了并行计算与分布式计算领域中的研究热点之一。
[0003] 对于计算密集型的应用,由多CPU和多GPU组成的异构计算平台提供了更高的性能,现如今已经成为主流计算架构,在分子物理和生物医学领域都被广泛地应用。
[0004] 目前市场广泛接受的并行编程语言中,相对于只可以应用于英伟达GPU加速卡的CUDA语言,OpenCL则可以应用于不同类型、不同品牌的设备之间,具有良好的可移植性和跨平台特征,得到了主流处理器厂家如AMD、Intel等的大支持,OpenCL提供了丰富的API以方便程序员在异构系统中编写数据并行的程序,OpenCL正在成为异构处理器的性能调优利器。但想要更充分利用目标设备中PE(Processing Elements)的计算资源和编写更有效的代码,要求程序员必须熟悉目标设备的底层架构,这加重了程序员的负担和经验要求。
[0005] 所以,为了能充分利用异构系统的资源,减轻异构编程人员的编程负担与经验要求,实现一个基于OpenCL编程语言使设备之间自动完成划分调度的任务调度框架具有十分重要的现实意义。
[0006] 通过研究发现,要实现对于任务的自动划分与调度,减少异构编程人员的工作量,需要将任务调度与机器学习的方法相结合。
[0007] 综合以上分析,我们可以设计出该任务调度框架的特征提取方法,基于机器学习的预测划分方法与任务调度方法。其中,特征提取方法包括特征的提取与避免训练结果过拟合的特征选择。

发明内容

[0008] 本发明的目的在于提供一种基于OpenCL内核任务的调度框架。该框架包括经LLVM编译器对OpenCL内核任务进行特征提取与特征选择,得到内核代码的编译时静态特征与运行时特征;在特征提取过程中,使用Greedy Feature Selection算法选出最重要的几个特征,避免过拟合现象;然后将选择出来的特征使用机器学习中的静态分类器预测CPU与GPU的任务划分比例;最后使用调度算法对获得的任务划分比例与平台可利用设备信息,对任务进行实际的调度,如说明书附图1所示。本发明完成了上述功能的设计细节、实现算法以及编码工作。本发明实现了在异构系统中通过机器学习与调度算法结合,实现对计算资源的最大化利用的一种自动化调度,提高异构系统资源利用率,并且该调度框架具有充分的灵活性,可移植性和可扩展性。
[0009] 为了实现上述目的,本发明采用如下技术方案:
[0010] 一种基于OpenCL内核任务的调度框架,采用如下技术方案:
[0011] 该框架中对于输入的每个OpenCL内核任务,在编译阶段生成其二进制文件,并得到AST抽象语法树,通过LLVM编译器从AST抽象语法树中分析抽取OpenCL内核静态代码特征,再经运行阶段得到动态代码特征,其中为了避免出现过拟合现象,使用Greedy Feature Selection算法对选出来的特征进行排序,选出最重要的几个特征,然后利用机器学习的SVM分类器预测得到任务划分比例,比例值是处于0到10之间的整数,最后将输入的OpenCL内核任务按照预测得到的划分比例值以Baseline调度算法调度到实际可用的设备CPU或GPU上,但对于有明显倾向的任务,比如得到的划分比例是9,表明该任务倾向于在GPU上执行,就按照添加了阈值机制的BIAS算法调度到具体的设备上。
[0012] 基于LLVM编译器抽取OpenCL内核程序特征的过程,是基于Clang和LLVM完成的,在特征抽取过程中,将特征抽取分为编译阶段特征抽取与运行阶段特征抽取。在编译阶段特征抽取中,OpenCL内核程序通过Clang生成一棵AST抽象语法树,遍历AST,抽取代码静态特征,如:浮点运算操作、定点运算操作、内存访问操作、OpenCL内建函数。在运行时阶段,抽取运行时特征,诸如问题大小特征,主机与内存之间的数据转换、全局工作项数目等。
[0013] 针对特征提取过程中,为了避免出现过拟合现象,使用Greedy Feature Selection算法对选出来的特征进行排序,选出最重要的几个特征,过程为所有的特征集为S,单个特征s∈S,已选择的特征集F,给F定义一个最小的错误mse,从S中抽取一个s,加入到F中,训练新的F,若mse减小,则确定将该特征加入F,并由mse值对其F中的特征进行排序,其中用SVM(support vector machine)完成这个贪心算法的训练。
[0014] 基于机器学习算法预测划分比例,将得到的特征值作为输入,使用静态分类器,预测得到任务划分比例p值。p代表计算量数据空间的分配,代表任务在CPU/GPU上执行的比例,如,0代表完全在CPU上执行,10代表完全在GPU上执行,0与10之间的p值代表在CPU-GPU上同时执行。
[0015] 基于Baseline调度算法,该算法中定义了三种任务队列C、G、M,分别表示任务只在CPU或者GPU或者单个CPU与GPU之间执行。在Baseline调度算法执行过程中,若两种设备类型都处于空闲状态,就从等待队列Q中选择一个任务,将其调度模式改为CPU-GPU混合模式后执行调度;若只有一个设备可用,从队列Q中选择一个任务,将调度模式改为在空闲GPU或在CPU上调度执行。
[0016] 对于添加了阈值机制的BIAS算法,通过定义阈值使具有明显偏向特征的任务,即偏向在CPU或GPU上执行,避免跨设备共同执行的多余开销,不按照划分比例执行,直接调度到单类设备上执行,根据实验经验设置阈值上界和阈值下界,当系统中两种设备都可用时,先将任务的执行模式设置为CPU和GPU共同执行,之后根据阈值的上下界确定实际使用的调用模式,若其中一个任务的划分比例小于等于阈值下界,将其完全调度到CPU上执行;当其划分比例比例大于等于阈值上界,将其全调度到GPU上执行,当系统中只有一个设备可用时,以Baseline算法执行。
[0017] 本发明包括经LLVM编译器对OpenCL内核任务进行特征提取与特征选择,得到内核代码的编译时静态特征与运行时特征;在特征提取过程中,使用Greedy Feature Selection算法选出最重要的几个特征,避免过拟合现象;然后将选择出来的特征使用机器学习中的静态分类器预测CPU与GPU的任务划分比例;最后使用调度算法对获得的任务划分比例与平台可利用设备信息,对任务进行实际的调度,本发明完成了上述功能的设计细节、实现算法和编码工作,实现了在异构系统中通过机器学习与调度算法结合,实现对计算资源的最大化利用的一种自动化调度,提高异构系统资源利用率。

附图说明

[0018] 图1是本发明一种基于OpenCL内核任务的调度整体框架示意图。
[0019] 图2是本发明一种基于OpenCL内核任务的具体实现调度示意图。
[0020] 图3是本发明一种基于OpenCL内核任务的调度框架中内核任务训练图。
[0021] 图4是本发明一种基于OpenCL内核任务的调度框架中内核任务调度部署图。
[0022] 图5是本发明一种基于OpenCL内核任务调度中抽取特征的种类图。
[0023] 图6是本发明一种基于OpenCL内核任务调度中的特征排序图。

具体实施方式

[0024] 本发明目的在于提供一个适用于CPU/GPU异构环境,自动进行任务划分预测与任务调度的调度框架,该框架包括两个阶段和三个部分,编译阶段和调度阶段,特征选取,任务划分预测和调度算法三个部分,如说明书附图1所示。该框架可以实现在异构环境下自动进行任务调度,达到提高异构平台资源利用率,减轻并行编程开发人员工作负担与经验要求的目的。
[0025] 为了实现上述目的,本发明的一种基于OpenCL内核任务的调度框架采用如下技术方案:
[0026] 该OpenCL内核任务的调度框架基于OpenCL并行编程语言进行开发,使用Clang和LLVM编译器进行特征提取阶段的工作,使用静态分类器对任务划分进行预测,使用Bias调度算法对任务进行实际调度,整个发明的具体实现调度图参见说明书附图2。
[0027] 整个框架主要有两个阶段训练阶段和部署阶段。训练阶段主要目的是建立任务划分预测模型。对输入的内核任务通过代码分析器,得到静态代码特征,将得到的特征值存入数据库,编译阶段产生的IR(intermediate representation)传入到后端,用于运行时产生多设备OpenCL代码,产生的特征值输入到训练器进行训练,训练过程参加说明书附图3。在部署阶段,一个新输入的OpenCL程序输入到分析器进行优化操作,当程序被执行时,抽取得到的运行时特征值被输入到前一步的训练模型中,将静态特征与运行时特征相结合预测产生最佳任务划分比例,最后将任务按照划分比例调度到硬件设备上,部署阶段参加说明书附图4。
[0028] 本发明进一步的改进在于:使用Clang与LLVM对特征进行提取。在该方法中使用Clang作为LLVM的前端。
[0029] 所述特征提取方法中在编译阶段,使用OpenCL语言描述的内核程序经过Clang生成抽象语法树AST(abstract syntax tree),通过遍历抽象语法树,抽取内核代码的静态特征,建立AnalyseFunction()函数,通过switch-case语句得到不同种类的特征个数。抽取的内核代码特征有:浮点运算操作特征、定点运算操作特征、内存访问操作特征、OpenCL内建函数特征等。
[0030] 所述特征提取方法在运行阶段,抽取问题大小特征:主机和内存之间的数据转换、全局工作项数目特征。抽取的静态以及运行时特征的种类参见说明书附图5。
[0031] 本发明进一步的改进在于:为了避免机器学习训练过程中的过拟合现象,采用基于Greedy Feature Selection算法,选择出最重要的几个特征,以避免过拟合现象,加快了后续预测任务划分机器学习方法训练的速度,其中使用了SVM(support vector machine)用于实现Greedy Feature Selection的训练过程。Greedy Feature Selection算法步骤如下:
[0032] 1:S←non empty set of all features
[0033] 2: mse←∞;improved←true
[0034] 3:while improved>0do
[0035] 4:improved←false
[0036] 5:for all s∈S do
[0037] 6:model←trainedModel({s}∪F)
[0038] 7:msetmp←evaluate(model)
[0039] 8:if msetmp
[0040] 9:mse←msetmp
[0041] 10:f←s
[0042] 11:improved←true
[0043] 12:end if
[0044] 13:end for
[0045] 14:if improved then
[0046] 15:S←S\{f}
[0047] 16:F←F∪{f}
[0048] 17:end if
[0049] 18:end while
[0050] 所有的特征集为S,单个特征s∈S,已选择的特征集F,给F定义一个最小的错误mse,从S中抽取一个s,加入到F中,训练新的F,若mse减小,则确定将该特征加入F,并由mse值对其F中的特征进行排序。最终选择得到的F参见说明书附图6。
[0051] 所述基于机器学习算法预测划分比例的方法中,将前面得到的代码特征输入静态分类器,预测得到划分比例p值。所使用的静态分类器中定义了一个函数F(P)=表示程序P的一系列静态代码特征,其中每一个fi表示在编译阶段从程序P中抽取出来的特征feature。得到的划分等级用来将一个计算任务按比例划分成两部分,分别分配到CPU和GPU上执行。
[0052] 本发明进一步的改进在于:分类器函数 输入的是存入数据库的代码特征值,输出的是划分等级,即 划分等级rt={0,1,2,3,…,10}表示程序P计算量数据空间的分配,(100-i*10)%在CPU上执行,剩下的在GPU上执行。所以,0代表完全在CPU上执行,10代表完全在GPU上执行,混合比例在CPU-GPU上执行。
[0053] 所述调度算法中结合预测得到每个任务的划分比例与可供利用的设备两个信息,作为用户定义的调度算法的输入参数,最终将每个任务调度到具体设备上执行。具体步骤如下:
[0054] 1:compute_requirement(K),host_initialize(nCPU,mGPU)
[0055] 2:input_datainitialize(K),initialize_queues(K)
[0056] 3:while queue set Q is not empty do
[0057] 4:Update nCPU,mGPU,rCPU,rGPU
[0058] 5:if nCPU>0 or mGPU>0 then k,U←select(Q,nCPU,mGPU)
[0059] 6:if nCPU>rCPU and mGPU>rGPU then
[0060] 7:
[0061] 8:dispatch_multiple(nC,mG,k,U)
[0062] 9:else
[0063] 10:dispatch(k,U)
[0064] 其中,输入是用K表示。定义nCPU,mGPU分别表示设备CPU和GPU可用的个数,定义rCPU,rGPU分别表示被请求的设备CPU和GPU个数,并在每次调度阶段的一开始更新这些数据。步骤1和2为初始化阶段,每个调度算法都会先执行这两步。步骤3至10描述的是初始化阶段完成后,调度框架分配任务到可用的设备上执行的过程。
[0065] 所述步骤3至10的具体过程为:在系统中只有一个设备可用时,调度器将只分配一个任务到设备上。使用回调函数notify_callback()更新nCPU和mGPU的值,提供设备可用信息;当nCPU>0或mGPU>0,且队列Q不为空时,调度器调用选择函数select(),返回一个任务t,这个任务的分配模式为U∈{cpu,gpu,partitioned},按照该任务的U进行分配执行;系统中有多个设备可用,即nCPU>rCPU且mGPU>rGPU时,按步骤6至8多个设备并行调度执行;若不满足nCPU>rCPU且mGPU>rGPU的条件,任务被调度到单个设备上执行。
[0066] 本发明进一步的改进在于:由于在GPU和CPU之间进行通信等操作会有一定的开销,对于有些任务不完全按照预测值执行效率会更高。所以按照实际经验与调研结果设置阈值,使用基于Baseline算法改进的BIAS调度算法:如果有一个任务有很大程度倾向于适合在CPU或GPU上执行的特点,达到阈值的上限,就不需要再对它进行划分,直接调度到单个设备CPU或GPU上。所述BIAS算法具体步骤如下:
[0067] 1:procedure SELECT(Q,nCPU,mGPU)
[0068] 2:if pending_task is non-empty then return pending_task
[0069] 3:if nCPU>0 and mGPU>0 then
[0070] 4:k1←Q.M.pop(),k2←Q.M.pop()
[0071] 5:if k1.r>=uth and k2.r<=lth then
[0072] 6:pending_task←{k2,cpu},k←k1,U←gpu
[0073] 7:else if k1.r<=lth and k2.r>=uth then
[0074] 8:pending_task←{k1,cpu},k←k2,U←gpu
[0075] 9:else if nCPU>0then
[0076] 10:k←Q.C.top(),U←cpu
[0077] 11:else
[0078] 12:k←Q.G.top(),U←gpu
[0079] 13:return{k,U}
[0080] 所述BIAS算法中根据实验经验设置上界uth为8,下界lth设置为2。在BIAS算法中定义的pending_task,表示一个任务的分配模式。当系统中两种设备都可用时,设置任务调度模式为M。之后根据阈值的上下界调uth和lth(uth,lth∈{1,…,9})确定实际使用的调用模式。若其中一个任务的划分比例小于等于下界lth,或是比例大于等于上界uth,将其分配模式U设置为单类设备。当系统中只有一个设备可用时,以Baseline算法执行。
[0081] 所述Baseline算法中含有三种任务队列C,G,M,分别表示任务只在CPU或者GPU或者单个CPU与GPU之间执行,即Q==<[0,1),[1,10),[10,10]>。具体实现步骤伪代码如下:
[0082] 1:procedure SELECT(Q,nCPU,mGPU)
[0083] 2:if nCPU>0 and mGPU>0 then k←Q.M.top(),U←partition
[0084] 3:else if nCPU>0 then k←Q.C.top(),U←cpu
[0085] 4:else if mGPU>0then k←Q.G.top(),U←gpu
[0086] 5:return{k,U}
[0087] 所述Baseline算法具体步骤中若两种设备类型都处于空闲状态,从等待队列Q中调用函数select()选择一个任务,将其模式U设置为M后调度执行;若只有一个设备可用,从队列Q中调用函数select()选择一个任务,将模式U设置为C或G后调度执行。
[0088] 本发明进一步的改进在于:在Baseline算法的基础上添加了BIAS算法,若有一个任务很大程度上倾向于在CPU或GPU上执行,就不需要对它进行划分,以BIAS算法可以直接调度到单类设备CPU或GPU上,这样解决了Baseline等待时间上的问题。具体调度过程参见说明书附图2。
[0089] 本发明是一种适应当今计算平台发展现状的技术发明,对于异构平台有较好的可移植性,本发明可能产生的经济效益将取决于推广的范围和应用程度,如果能够很好地利用,将异构平台的推广以及利用将有非常重要的作用,对国民经济的发展起到强有力的推动效果,将产生较好的经济效益。所以该发明创造将会对未来技术市场的走向能起到很重要的作用。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈