首页 / 专利库 / 电脑零配件 / 计算机系统 / 硬件 / 中央处理器 / 一种代码生成方法、编译器、调度方法、装置及调度系统

一种代码生成方法、编译器、调度方法、装置及调度系统

阅读:625发布:2024-02-29

专利汇可以提供一种代码生成方法、编译器、调度方法、装置及调度系统专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种代码生成方法、编译器、调度方法、装置及调度系统。本发明实施例生成的代码是应用于异构系统的可执行代码,异构系统包括 加速 处理器和 中央处理器 。本发明实施例代码生成方法包括:编译器获取加速处理器资源的信息以及中央处理器资源的信息以生成可运行平台列表;编译器从第一用户代码中识别出可加速代码;编译器在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;编译器对第二用户代码进行编译得到可执行代码。本发明实施例生成的可执行代码在执行的时候可以自动实现处理器的合理调度。,下面是一种代码生成方法、编译器、调度方法、装置及调度系统专利的具体信息内容。

1.一种代码生成方法,其特征在于,应用于调度系统,所述调度系统中包括异构系统、编译器,所述代码为可执行代码,所述可执行代码应用于异构系统,所述异构系统包括加速处理器和中央处理器,所述方法包括:
所述编译器获取所述加速处理器资源的信息以及所述中央处理器资源的信息以生成可运行平台列表,并根据所述加速处理器资源的信息从第一用户代码中识别出可加速代码,所述可运行平台列表中包含所有加速处理器及中央处理器;
所述编译器在所述可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
所述编译器对所述第二用户代码进行编译得到可执行代码,其中,所述可执行代码中包含将所述钩子函数与所述异常处理函数编译得到的可执行用户代码,以及将所述可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,所述第一可加速分支代码用于在所述可运行平台列表中的加速处理器上执行,所述第二可加速分支代码用于在所述可运行平台列表中的中央处理器上执行,所述嵌入钩子函数与异常处理函数的目的是:使得在所述可执行代码被执行的过程中,执行到所述钩子函数时,利用所述异常处理函数中的条件控制代码为所述第一可加速分支代码及所述第二可加速分支代码选择目标处理器。
2.如权利要求1所述的方法,其特征在于,所述编译器在生成可运行平台列表之前,还包括:
调用运行代价评估函数对所述加速处理器及所述中央处理器进行运行代价评估。
3.如权利要求2所述的方法,其特征在于,所述编译器对所述第二用户代码进行编译得到可执行代码之前还包括:
所述编译器在所述加速处理器中选取运行代价小于预置数值的预定数目的加速处理器生成亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
所述第一可加速分支代码用于在所述亲属性列表中的加速处理器上执行。
4.一种调度方法,其特征在于,应用于调度系统,所述调度系统包括调度装置、异构系统,所述异构系统包括加速处理器及中央处理器,所述方法包括:
所述调度装置加载并执行编译器生成的可执行代码,所述可执行代码中包含所述编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及所述编译器将可加速代码编译得到的用于在所述加速处理器上执行的第一可加速分支代码以及用于在所述中央处理器上执行的第二可加速分支代码;
所述调度装置在执行到所述钩子函数时,产生异常;
所述调度装置调用所述异常处理函数,根据所述异常处理函数中的条件控制代码调用进程调度接口,利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器,所述可运行平台列表中包含所有加速处理器及中央处理器;
所述调度装置调用所述目标处理器,以利用所述目标处理器执行所述第一可加速分支代码及所述第二可加速分支代码。
5.如权利要求4所述的方法,其特征在于,所述调度装置利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器的方法包括:
所述调度装置从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器。
6.如权利要求5所述的方法,其特征在于,所述进程调度接口中还包括亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
所述调度装置从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为目标处理器,包括:
所述调度装置从所述进程调度接口的亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作为执行所述第一可加速分支代码的目标处理器,从所述进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的中央处理器作为执行所述第二可加速分支代码的目标处理器。
7.一种编译器,其特征在于,用于生成可执行代码,所述可执行代码应用于异构系统,所述异构系统包括加速处理器和中央处理器,所述编译器包括:
获取单元,用于获取所述加速处理器资源的信息以及所述中央处理器资源的信息;
生成单元,用于根据所述获取单元获取的所述加速处理器资源的信息以及所述中央处理器资源的信息生成可运行平台列表,所述可运行平台列表中包含所有加速处理器及中央处理器;
识别单元,用于根据所述获取单元获取的加速处理器资源的信息从第一用户代码中识别出可加速代码;
嵌入单元,用于在所述可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
编译单元,用于对所述第二用户代码进行编译得到可执行代码,其中,所述可执行代码中包含将所述钩子函数与所述异常处理函数编译得到的可执行用户代码,以及将所述可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,所述第一可加速分支代码用于在所述可运行平台列表中的加速处理器上执行,所述第二可加速分支代码用于在所述可运行平台列表中的中央处理器上执行,所述嵌入钩子函数与异常处理函数的目的是:使得在所述可执行代码被执行的过程中,执行到所述钩子函数时,利用所述异常处理函数中的条件控制代码为所述第一可加速分支代码及所述第二可加速分支代码选择目标处理器。
8.如权利要求7所述的编译器,其特征在于,所述编译器还包括:
评估单元,用于调用运行代价评估函数对所述加速处理器及所述中央处理器进行运行代价评估。
9.如权利要求8所述的编译器,其特征在于,所述生成单元还用于:
在所述加速处理器中选取运行代价小于预置数值的预定数目的加速处理器生成亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
所述第一可加速分支代码用于在所述亲属性列表中的加速处理器上执行。
10.一种调度装置,其特征在于,用于调度异构系统,所述异构系统包括加速处理器及中央处理器,所述装置包括:
执行单元,用于加载并执行编译器生成的可执行代码,所述可执行代码中包含所述编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及所述编译器将可加速代码编译得到的用于在所述加速处理器上执行的第一可加速分支代码以及用于在所述中央处理器上执行的第二可加速分支代码;
异常产生单元,用于在执行到所述钩子函数时,产生异常;
第一调用单元,用于调用所述异常处理函数,根据所述异常处理函数中的条件控制代码调用进程调度接口,利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器,所述可运行平台列表中包含所有加速处理器及中央处理器;
第二调用单元,用于调用所述目标处理器,以利用所述目标处理器执行所述第一可加速分支代码及所述第二可加速分支代码。
11.如权利要求10所述的调度装置,其特征在于,所述第一调用单元利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器的方法包括:
所述第一调用单元从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器。
12.如权利要求 11所述的调度装置,其特征在于,所述进程调度接口中还包括亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
所述第一调用单元从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器,包括:
所述第一调用单元从所述进程调度接口的亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作为执行所述第一可加速分支代码的目标处理器,从所述进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的中央处理器作为执行所述第二可加速分支代码的目标处理器。
13.一种调度系统,其特征在于,包括:如权利要求7所述的编译器,如权利要求10所述的调度装置,至少一个加速处理器及至少一个中央处理器。

说明书全文

一种代码生成方法、编译器、调度方法、装置及调度系统

技术领域

[0001] 本发明实施例涉及计算机技术领域,尤其涉及一种代码生成方法、编译器、调度方法、装置及调度系统。

背景技术

[0002] 当前提高系统计算能的主流方法是利用多核系统。包含有多种不同类型处理器的多核系统称为异构系统,异构系统一般由通用处理器和专用加速处理器构成。异构系统具有如下优势:一方面,通用处理器处理标量计算,提供通用的计算能力,使得异构系统可以适应多方面的应用;另一方面,专用加速处理器面向某些特定的领域可以提供强大的计算性能,且能效比较高,使得异构系统比同构系统拥有更高的性能和效能。
[0003] 对于异构系统来说,最重要的问题有两方面:一是如何使用专用加速处理器,二是如何使得系统整体的计算性能最高。因为专用加速处理器与通用处理器,如传统中央处理器(Central Processing Unit,CPU)有着不同的体系架构,因此专用加速处理器的指令集与传统CPU的指令集是不兼容的,即运行在CPU上的代码无法直接运行在专用加速处理器上,因此,无法使用针对CPU的开发工具来开发专用加速处理器。而要使异构系统的计算性能最高,就必须充分利用各处理器的计算能力,由于各处理器在功能和性能差异很大,因此要充分利用各处理器的计算能力,就必须了解各类处理器的特点,然后将任务合理的分配到各处理器上。
[0004] 现有技术提供的用于异构系统的编程方式,开发者在程序中需要明确指定程序段将运行在哪种处理器上,即任务的分配由开发者完成。开放计算语言(Open Computing Language,OpenCL)是该方案的一种典型实现,它为异构系统编程提供了一个开放的框架标准。开发者可以使用OpenCL提供的语言来编写将要运行在各处理器上的程序,然后调用OpenCL提供的用于控制系统的应用程序编程接口(Application Programming Interface,API)来指定哪部分程序将运行在哪种处理器上,并通过两阶段编译将这些程序转化为对应处理器上可执行的代码,最后利用控制系统的API调用可执行代码在相应的处理器上运行。
[0005] 从上面的描述中可以看到,现有技术提供的用于异构系统的编程方式,需要开发者自己解决系统资源调度问题,这要求开发者对硬件比较熟悉,并且调度方案事先指定,程序中已经指定了哪些程序在哪种设备上执行,系统无法根据当前状态进行合理调度。因此当指定的设备处于忙碌状态时该程序也无法运行在其他空闲的设备上,造成了系统资源的浪费。

发明内容

[0006] 本发明实施例提供了一种代码生成方法、编译器、调度方法、装置及调度系统,使得生成的可执行代码在执行的时候可以自动实现处理器的合理调度。
[0007] 本发明实施例第一方面提供的代码生成方法,应用于调度系统,所述调度系统中包括异构系统、编译器,所述代码为可执行代码,所述可执行代码应用于异构系统,所述异构系统包括加速处理器和中央处理器,所述方法包括:
[0008] 所述编译器获取所述加速处理器资源的信息以及所述中央处理器资源的信息以生成可运行平台列表,并根据所述加速处理器资源的信息从第一用户代码中识别出可加速代码,所述可运行平台列表中包含所有加速处理器及中央处理器;
[0009] 所述编译器在所述可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
[0010] 所述编译器对所述第二用户代码进行编译得到可执行代码,其中,所述可执行代码中包含将所述钩子函数与所述异常处理函数编译得到的可执行用户代码,以及将所述可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,所述第一可加速分支代码用于在所述可运行平台列表中的加速处理器上执行,所述第二可加速分支代码用于在所述可运行平台列表中的中央处理器上执行,所述嵌入钩子函数与异常处理函数的目的是:使得在所述可执行代码被执行的过程中,执行到所述钩子函数时,利用所述异常处理函数中的条件控制代码为所述第一可加速分支代码及所述第二可加速分支代码选择目标处理器。
[0011] 结合本发明实施例的第一方面,在本发明实施例的第一方面的第一种实施方式中,所述编译器在生成可运行平台列表之前,还包括:调用运行代价评估函数对所述加速处理器及所述中央处理器进行运行代价评估。
[0012] 结合本发明实施例第一方面的第一种实施方式,在本发明实施例的第一方面的第二种实施方式中,所述编译器对所述第二用户代码进行编译得到可执行代码之前还包括:所述编译器在所述加速处理器中选取运行代价小于预置数值的预定数目的加速处理器生成亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
[0013] 所述第一可加速分支代码用于在所述亲属性列表中的加速处理器上执行。
[0014] 本发明实施例的第二方面提供了一种调度方法,应用于调度系统,所述调度系统包括调度装置、异构系统,所述异构系统包括加速处理器及中央处理器,所述方法包括:
[0015] 所述调度装置加载并执行编译器生成的可执行代码,所述可执行代码中包含所述编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及所述编译器将可加速代码编译得到的用于在所述加速处理器上执行的第一可加速分支代码以及用于在所述中央处理器上执行的第二可加速分支代码;
[0016] 所述调度装置在执行到所述钩子函数时,产生异常;
[0017] 所述调度装置调用所述异常处理函数,根据所述异常处理函数中的条件控制代码调用进程调度接口,利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器,所述可运行平台列表中包含所有加速处理器及中央处理器;
[0018] 所述调度装置调用所述目标处理器,以利用所述目标处理器执行所述第一可加速分支代码及所述第二可加速分支代码。
[0019] 结合本发明实施例的第二方面,在本发明实施例的第二方面的第一种实施方式中,所述调度装置利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器的方法包括:所述调度装置从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器。
[0020] 结合本发明实施例的第二方面的第一种实施方式,在本发明实施例的第二方面的第二种实施方式中,所述进程调度接口中还包括亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
[0021] 所述调度装置从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为目标处理器,包括:
[0022] 所述调度装置从所述进程调度接口的亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作为执行所述第一可加速分支代码的目标处理器,从所述进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的中央处理器作为执行所述第二可加速分支代码的目标处理器。
[0023] 本发明实施例的第三方面提供了一种编译器,用于生成可执行代码,所述可执行代码应用于异构系统,所述异构系统包括加速处理器和中央处理器,所述编译器包括:
[0024] 获取单元,用于获取所述加速处理器资源的信息以及所述中央处理器资源的信息;
[0025] 生成单元,用于根据所述获取单元获取的所述加速处理器资源的信息以及所述中央处理器资源的信息生成可运行平台列表,所述可运行平台列表中包含所有加速处理器及中央处理器;
[0026] 识别单元,用于根据所述获取单元获取的加速处理器资源的信息从第一用户代码中识别出可加速代码;
[0027] 嵌入单元,用于在所述可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
[0028] 编译单元,用于对所述第二用户代码进行编译得到可执行代码,其中,所述可执行代码中包含将所述钩子函数与所述异常处理函数编译得到的可执行用户代码,以及将所述可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,所述第一可加速分支代码用于在所述可运行平台列表中的加速处理器上执行,所述第二可加速分支代码用于在所述可运行平台列表中的中央处理器上执行,所述嵌入钩子函数与异常处理函数的目的是:使得在所述可执行代码被执行的过程中,执行到所述钩子函数时,利用所述异常处理函数中的条件控制代码为所述第一可加速分支代码及所述第二可加速分支代码选择目标处理器。
[0029] 结合本发明实施例的第三方面,在本发明实施例的第三方面的第一种实施方式中,所述编译器还包括:评估单元,用于调用运行代价评估函数对所述加速处理器及所述中央处理器进行运行代价评估。
[0030] 结合本发明实施例的第三方面的第一种实施方式,在本发明实施例的第三方面的第二种实施方式中,所述生成单元还用于:在所述加速处理器中选取运行代价小于预置数值的预定数目的加速处理器生成亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
[0031] 所述第一可加速分支代码用于在所述亲属性列表中的加速处理器上执行。
[0032] 本发明实施例的第四方面提供了一种调度装置,用于调度异构系统,所述异构系统包括加速处理器及中央处理器,所述装置包括:
[0033] 执行单元,用于加载并执行编译器生成的可执行代码,所述可执行代码中包含所述编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及所述编译器将可加速代码编译得到的用于在所述加速处理器上执行的第一可加速分支代码以及用于在所述中央处理器上执行的第二可加速分支代码;
[0034] 异常产生单元,用于在执行到所述钩子函数时,产生异常;
[0035] 第一调用单元,用于调用所述异常处理函数,根据所述异常处理函数中的条件控制代码调用进程调度接口,利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器,所述可运行平台列表中包含所有加速处理器及中央处理器;
[0036] 第二调用单元,用于调用所述目标处理器,以利用所述目标处理器执行所述第一可加速分支代码及所述第二可加速分支代码。
[0037] 结合本发明实施例的第四方面,在本发明实施例的第四方面的第一种实施方式中,所述第一调用单元利用所述进程调度接口的可运行平台列表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器的方法包括:所述第一调用单元从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器。
[0038] 结合本发明实施例第四方面的第一种实施方式,在本发明实施例的第四方面的第二种实施方式中,所述进程调度接口中还包括亲属性列表,所述亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;
[0039] 所述第一调用单元从所述进程调度接口的所述可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器,包括:
[0040] 所述第一调用单元从所述进程调度接口的亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作为执行所述第一可加速分支代码的目标处理器,从所述进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的中央处理器作为执行所述第二可加速分支代码的目标处理器。
[0041] 本发明实施例的第五方面提供了一种调度系统,所述调度系统包括本发明实施例第三方面所提供的编译器;以及本发明实施例第四方面提供的调度装置;以及至少一个加速处理器和至少一个中央处理器。
[0042] 从以上技术方案可以看出,本发明实施例具有以下优点:
[0043] 本发明实施例中,编译器获取加速处理器及中央处理器资源的信息以生成可运行平台列表,并根据加速处理器资源的信息从第一用户代码中识别出可加速代码,然后在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;最后对第二用户代码进行编译得到可执行代码,其中,可执行代码中包含将钩子函数与异常处理函数编译得到的可执行用户代码,以及将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,第一可加速分支代码用于在可运行平台列表中的加速处理器上执行,第二可加速分支代码用于在可运行平台列表中的中央处理器上执行,嵌入钩子函数与异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器,因而,本发明实施例中生成的可执行代码在被执行的时候可以根据实际情况自动实现处理器的合理调度,简化了开发者的工作,且合理地利用了系统资源。附图说明
[0044] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0045] 图1为本发明实施例中代码生成方法一个实施例示意图;
[0046] 图2为本发明实施例中代码生成方法另一实施例示意图;
[0047] 图3为本发明实施例中调度方法一个实施例示意图;
[0048] 图4为本发明实施例中调度方法另一实施例示意图;
[0049] 图5为本发明实施例中编译器一个实施例示意图;
[0050] 图6为本发明实施例中调度装置一个实施例示意图;
[0051] 图7为本发明实施例中编译器另一实施例示意图;
[0052] 图8为本发明实施例中调度装置另一实施例示意图;
[0053] 图9为本发明实施例中调度系统一个实施例示意图。

具体实施方式

[0054] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0055] 本发明实施例提供了一种代码生成方法、编译器、调度方法、装置及调度系统。本发明实施例生成的可执行代码在执行的时候可以自动实现处理器的合理调度。
[0056] 请参阅图1,图1示出了本发明实施例中代码生成方法一个实施例,本实施例的代码生成方法应用于调度系统,调度系统中包含异构系统、编译器。本实施例生成的代码是可应用于异构系统的可执行代码,其中,异构系统可包括加速处理器及中央处理器。本实施例方法包括:
[0057] 101、编译器获取加速处理器资源的信息及中央处理器资源的信息;
[0058] 编译器调用系统知识库,从系统知识库中获取当前系统的硬件资源信息,该硬件资源信息主要包括加速处理器资源的信息及中央处理器资源的信息。
[0059] 102、编译器生成可运行平台列表;
[0060] 编译器根据所识别出的加速处理器资源的信息及中央处理器资源的信息生成可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器。
[0061] 103、编译器从第一用户代码中识别出可加速代码;
[0062] 编译器根据所获取的加速处理器资源的信息从第一用户代码中识别出可加速代码,可加速代码编译后可以在加速处理器及中央处理器上运行。
[0063] 104、编译器在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
[0064] 钩子函数的主要作用是产生异常,而异常处理函数主要用于解决钩子函数产生的异常,异常处理函数中包含条件控制代码。编译器在识别出可加速代码后在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码,所以第二用户代码中含有钩子函数、异常处理函数及可加速代码。
[0065] 105、编译器对第二用户代码进行编译得到可执行代码。
[0066] 其中,编译得到的可执行代码中含有可执行用户代码,第一可加速分支代码及第二可加速分支代码。可执行用户代码是由第二用户代码中的钩子函数及异常处理函数编译得到的,第一可加速分支代码及第二可加速分支代码均是由第二用户代码中的可加速代码编译得到的,第一可加速分支代码主要用于在可运行平台列表中的加速处理器上执行,第二可加速分支代码主要用于在可运行平台列表中的中央处理器上执行。
[0067] 另外,步骤104中在可加速代码前嵌入钩子函数与异常处理函数是为了在可执行代码被执行的过程中,执行到钩子函数时,产生异常,然后利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器,因而,本实施例生成的可执行代码在执行的时候可以自动调用合适的处理器,不需要开发者事先解决系统资源调度问题。
[0068] 另外,需要说明的是,本实施中提到的第一用户代码中不仅含有可加速代码,也含有非可加速代码,非可加速代码的编译方法可采用现有技术中的任意一种方法。本实施例所嵌入的钩子函数及异常处理函数仅对可加速代码起作用,本实施例的主要目的是对可加速代码进行编译,以使得编译之后得到的可执行代码在执行的过程中,执行到钩子函数时,可以利用异常处理函数中的条件控制代码自动为编译后的可加速代码(第一可加速分支代码及第二可加速分支代码)选择目标处理器。
[0069] 本实施例中,编译器在对可加速代码编译前,在可加速代码前嵌入钩子函数与异常处理函数形成第二用户代码,然后对第二用户代码进行编译得到可执行代码。而嵌入钩子函数与异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器。因而,本实施例中生成的可执行代码在被执行的时候可以根据实际情况自动实现处理器的合理调度,简化了开发者的工作,且合理地利用了系统资源。
[0070] 为便于理解,下面以一具体实施例对本发明实施例中代码生成方法进行描述,请参阅图2,本实施例中的代码生成方法仍应用于调度系统,调度系统中包含异构系统、编译器。本实施例生成的代码仍是可应用于异构系统的可执行代码,其中,异构系统可包括加速处理器及中央处理器。本实施例方法包括:
[0071] 201、编译器获取加速处理器资源的信息及中央处理器资源的信息;
[0072] 编译器调用系统知识库,从系统知识库中获取当前系统的硬件资源信息,该硬件资源信息主要包括加速处理器资源的信息及中央处理器资源的信息。
[0073] 202、编译器调用运行代价评估函数对加速处理器及中央处理器进行运行代价评估;
[0074] 编译器从第一用户代码中任意选取一段代码,将该代码进行编译,此处可将编译后的代码称为测试代码。编译器将这段测试代码分别放在加速处理器及中央处理器上运行,同时调用运行代价评估函数对加速处理器及中央处理器进行运行代价评估,此处的运行代价指的是处理器运行测试代码的时间。同一段测试代码,运行需要的时间越长,说明该处理器的运行代价越大。
[0075] 203、编译器生成可运行平台列表及亲属性列表;
[0076] 编译器对加速处理器及中央处理器进行运行代价评估后生成可运行平台列表及亲属性列表。其中,可运行平台列表中包含所有加速处理器及所有中央处理器,可运行平台列表还可以包括各个处理器的编号、运行代价等。而亲属性列表中只包含可运行平台列表中运行代价小于预设数值的预定数目的加速处理器。
[0077] 204、编译器从第一用户代码中识别出可加速代码;
[0078] 编译器根据所获取的加速处理器资源的信息从第一用户代码中识别出可加速代码。可加速代码编译后可以在加速处理器及中央处理器上运行,但是在加速处理器上运行的代价小于在中央处理器上的运行代价。
[0079] 205、编译器在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
[0080] 钩子函数的主要作用是产生异常,而异常处理函数主要用于解决钩子函数产生的异常,异常处理函数中包含条件控制代码。编译器在识别出可加速代码后在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码,所以第二用户代码中含有钩子函数、异常处理函数及可加速代码。
[0081] 206、编译器对第二用户代码进行编译得到可执行代码。
[0082] 其中,编译得到的可执行代码中含有可执行用户代码,第一可加速分支代码及第二可加速分支代码。可执行用户代码是由第二用户代码中的钩子函数及异常处理函数编译得到的,第一可加速分支代码及第二可加速分支代码均是由第二用户代码中的可加速代码编译得到的。
[0083] 本实施例中,为了提高编译效率,编译器在对第二用户代码进行编译之前,生成了亲属性列表及可运行平台列表,所以编译器可将可加速代码编译成只用于在亲属性列表中的加速处理器上执行的第一可加速分支代码,而亲属性列表中的加速处理器只是可运行平台列表内的加速处理器中的一部分,所以本实施例的方法节省了编译时间。另外,可执行代码中的第二可加速分支代码用于在可运行平台列表中的所有中央处理器上执行。
[0084] 步骤205中在可加速代码前嵌入钩子函数与异常处理函数是为了在可执行代码被执行的过程中,执行到钩子函数时,产生异常,然后利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器,因而,本实施例生成的可执行代码在被执行的时候可以自动调用合适的处理器,不需要开发者事先解决系统资源调度问题。
[0085] 需要说明的是,本实施中提到的第一用户代码中不仅含有可加速代码,也含有非可加速代码,非可加速代码的编译方法可采用现有技术中的任意一种方法。本实施例所嵌入的钩子函数及异常处理函数仅对可加速代码起作用,本实施例的主要目的是对可加速代码进行编译,以使得编译之后得到的可执行代码在执行的过程中,执行到钩子函数时,可以利用异常处理函数中的条件控制代码自动为编译后的可加速代码(第一可加速分支代码及第二可加速分支代码)选择目标处理器。
[0086] 本实施例中,编译器在对加速处理器及中央处理器进行运行代价评估后,生成了可运行平台列表及亲属性列表,在对可加速代码进行编译前,在可加速代码前嵌入钩子函数与异常处理函数形成第二用户代码,然后对第二用户代码进行编译得到可执行代码,可执行代码中的第一可加速分支代码只用于在亲属性列表中的加速处理器上执行,而亲属性列表中的加速处理器只是可运行平台列表中的加速处理器中的一部分,因而本实施例提供的代码生成方法节省了编译时间,提高了编译效率。另外,嵌入钩子函数与异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器。因而,本实施例中生成的可执行代码在被执行的时候可以根据实际情况自动实现处理器的合理调度,简化了开发者的工作,且合理地利用了系统资源。
[0087] 上面两个实施例说明了可执行代码的生成方法,下面将说明调度装置执行可执行代码对异构系统进行调度的方法,请参阅图3。本实施例的调度方法应用于调度系统,本实施例中的调度系统可包括调度装置、异构系统,异构系统包括加速处理器、中央处理器。本发明实施例中调度方法一个实施例包括:
[0088] 301、调度装置加载并执行编译器生成的可执行代码;
[0089] 可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码。
[0090] 其中,钩子函数与异常处理函数仅对将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码起作用,对其他由非可加速代码编译得到的代码不起作用。
[0091] 302、调度装置在执行到钩子函数时,产生异常;
[0092] 303、调度装置调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的可运行平台列表得到分别用于执行第一可加速分支代码及第二可加速分支代码的目标处理器;
[0093] 在异常产生后,调度装置调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口,进程调度接口的参数为可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器。调度装置利用进程调度接口的可运行平台列表得到分别用于执行第一可加速分支代码及第二可加速分支代码的目标处理器。
[0094] 304、调度装置调用目标处理器,以利用目标处理器执行第一可加速分支代码及第二可加速分支代码。
[0095] 本实施例中,可执行代码在调度装置中被执行,当执行到钩子函数时,产生异常,调度装置调用异常处理函数,以利用异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的可运行平台列表获取用于执行第一可加速分支代码及第二可加速分支代码的目标处理器,然后调用目标处理器执行对应的可加速分支代码。可执行代码在被执行过程中,调度装置可利用条件控制代码自动获取合适的目标处理器执行对应的可加速代码分支,不需要开发者自己解决系统资源调度问题,简化了开发者的工作,且能够合理地利用系统资源。
[0096] 为便于理解,下面以一具体实施例对本发明实施例中的调度方法进行描述,请参阅图4,本实施例的调度方法应用于调度系统,本实施例中的调度系统可包括调度装置、异构系统。异构系统包括加速处理器、中央处理器。本发明实施例中调度方法另一实施例包括:
[0097] 401、调度装置加载并执行编译器生成的可执行代码;
[0098] 可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码。
[0099] 其中,钩子函数与异常处理函数仅对将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码起作用,对其他由非可加速代码编译得到的代码不起作用。
[0100] 402、调度装置在执行到钩子函数时,产生异常;
[0101] 403、调度装置调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的亲属性列表及可运行平台列表得到分别用于执行第一可加速分支代码及第二可加速分支代码的目标处理器;
[0102] 在异常产生后,调度装置调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口,进程调度接口的参数为亲属性列表和可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器,亲属性列表中包含在可运行平台列表中运行代价小于预置数值的预定数目的加速处理器。调度装置利用进程调度接口的亲属性列表得到用于执行第一可加速分支代码的目标处理器,从可运行平台列表中得到用于执行第二可加速分支代码的目标处理器。
[0103] 具体地,调度装置从进程调度接口的亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作为执行第一可加速分支代码的目标处理器,从进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的中央处理器作为执行第二可加速分支代码的目标处理器。
[0104] 404、调度装置调用目标处理器,以利用目标处理器执行第一可加速分支代码及第二可加速分支代码。
[0105] 本实施例中,可执行代码在调度装置中被执行,当执行到钩子函数时,产生异常,调度装置调用异常处理函数,以利用异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的亲属性列表及可运行平台列表分别获取用于执行第一可加速分支代码及第二可加速分支代码的目标处理器,然后调用目标处理器执行对应的可加速分支代码。可执行代码在被执行过程中,调度装置可利用条件控制代码自动获取合适的目标处理器执行对应的可加速代码分支,不需要开发者自己解决系统资源调度问题,简化了开发者的工作,且能够合理地利用系统资源。
[0106] 下面对本发明实施例中的编译器进行描述,请参阅图5,本实施例中的编译器用于生成在异构系统上执行的可执行代码,本实施例中的异构系统可包括加速处理器、中央处理器。本发明实施例中的编译器一个实施例包括:
[0107] 获取单元501,用于获取加速处理器资源的信息以及中央处理器资源的信息;
[0108] 生成单元502,用于根据获取单元501获取的加速处理器资源的信息以及中央处理器资源的信息生成可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器;
[0109] 识别单元503,用于根据获取单元501获取的加速处理器资源的信息从第一用户代码中识别出可加速代码;
[0110] 嵌入单元504,用于在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
[0111] 编译单元505,用于对第二用户代码进行编译得到可执行代码,其中,可执行代码中包含将钩子函数与异常处理函数编译得到的可执行用户代码,以及将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,第一可加速分支代码用于在可运行平台列表中的加速处理器上执行,第二可加速分支代码用于在可运行平台列表中的中央处理器上执行,嵌入钩子函数与异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器;
[0112] 评估单元506,用于调用运行代价评估函数对加速处理器及中央处理器进行运行代价评估。
[0113] 为便于理解,下面以一个实际应用场景对本实施例中编译器的各单元之间的交互方式进行描述,具体如下:
[0114] 获取单元501调用系统知识库,从系统知识库中获取当前系统的硬件资源信息,该硬件资源信息主要包括加速处理器资源的信息及中央处理器资源的信息。
[0115] 生成单元502根据获取单元501获取的加速处理器资源的信息及中央处理器资源的信息生成可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器。
[0116] 识别单元503根据获取单元501获取的加速处理器资源的信息从第一用户代码中识别出可加速代码,可加速代码编译后可以在加速处理器及中央处理器上运行。
[0117] 嵌入单元504在识别单元503识别出的可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码。其中,钩子函数的主要作用是产生异常,而异常处理函数主要用于解决钩子函数产生的异常,异常处理函数中包含条件控制代码。嵌入单元504在识别出的可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码,所以第二用户代码中含有钩子函数、异常处理函数及可加速代码。
[0118] 编译单元505对嵌入单元504形成的第二用户代码进行编译得到可执行代码。其中,编译得到的可执行代码中含有可执行用户代码,第一可加速分支代码及第二可加速分支代码。可执行用户代码是由第二用户代码中的钩子函数及异常处理函数编译得到的,第一可加速分支代码及第二可加速分支代码均是由第二用户代码中的可加速代码编译得到的,第一可加速分支代码用于在可运行平台列表中的所有加速处理器上执行,第二可加速分支代码用于在可运行平台列表中的所有中央处理器上执行。
[0119] 嵌入单元504在可加速代码前嵌入钩子函数与异常处理函数是为了在执行可执行代码的过程中,执行到钩子函数时,产生异常,然后利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器,因而,本实施例生成的可执行代码在被执行的时候可以自动调用合适的处理器,不需要开发者事先解决系统资源调度问题。
[0120] 另外,本实施例中的编译器还包括评估单元506,评估单元506用于调用运行代价评估函数对获取单元501获取的加速处理器及中央处理器进行运行代价评估。具体的评估方法可如下:
[0121] 评估单元506从第一用户代码中任意选取一段代码,将该代码进行编译,此处可将编译后的代码称为测试代码。评估单元506将这段测试代码分别放在加速处理器及中央处理器上运行,同时调用运行代价评估函数对加速处理器及中央处理器进行运行代价评估,此处的运行代价指的是处理器运行测试代码的时间。同一段测试代码,运行需要的时间越长,说明该处理器的运行代价越大。
[0122] 在评估单元506对系统中的加速处理器及中央处理器进行运行代价评估后,生成单元502生成的可运行平台列表中可包含各个处理器的运行代价。
[0123] 为了提高编译效率,生成单元502在编译单元505对第二用户代码进行编译之前,还可以选取运行代价小于预设数值的预定数目的加速处理器生成了亲属性列表,亲属性列表中包含在可运行平台列表中运行代价小于预置数值的预定数目的加速处理器,所以编译单元505可将可加速代码编译生成只用于在亲属性列表中的加速处理器上执行的第一可加速分支代码,而亲属性列表中的加速处理器只是可运行平台列表中的加速处理器中的一部分,所以这种编译方法节省了编译时间。
[0124] 另外,需要说明的是,本实施中提到的第一用户代码中不仅含有可加速代码,也含有非可加速代码,非可加速代码的编译方法可采用现有技术中的任意一种方法。本实施例所嵌入的钩子函数及异常处理函数仅对可加速代码起作用,本实施例的主要目的是编译器对可加速代码进行编译,以使得编译之后得到的可执行代码在执行的过程中,执行到钩子函数时,可以利用异常处理函数中的条件控制代码自动为编译后的可加速代码(第一可加速分支代码及第二可加速分支代码)选择目标处理器。
[0125] 本实施例中,生成单元在评估单元在对加速处理器及中央处理器进行运行代价评估后,生成了可运行平台列表及亲属性列表,可运行平台列表及亲属性列表中可包含各个处理器的运行代价;嵌入单元在编译单元对可加速代码进行编译前,在可加速代码前嵌入钩子函数与异常处理函数形成第二用户代码,然后编译单元对第二用户代码进行编译得到可执行代码。本实施例中,可将可加速代码编译成用于在可运行平台列表中的所有中央处理器上运行的第二可加速分支代码,以及只用于在亲属性列表中的加速处理器上执行的第一可加速分支代码,而亲属性列表中的加速处理器只是可运行平台列表内的加速处理器中的一部分,因而本实施例提供的代码生成方法可节省编译时间,提高编译效率。另外,嵌入钩子函数与异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器。因而,本实施例中编译器生成的可执行代码在被执行的时候可以根据实际情况自动实现处理器的合理调度,简化了开发者的工作,且合理地利用了系统资源。
[0126] 下面对本发明实施例中的调度装置进行描述,请参阅图6,本实施例中的调度装置用于调度异构系统,本实施例中的异构系统可包括加速处理器、中央处理器。本发明实施例中的调度装置一个实施例包括:
[0127] 执行单元601,用于加载并执行编译器生成的可执行代码,可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码;
[0128] 异常产生单元602,用于在执行到钩子函数时,产生异常;
[0129] 第一调用单元603,用于调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的可运行平台列表得到分别用于执行第一可加速分支代码及第二可加速分支代码的目标处理器,可运行平台列表中包含所有加速处理器及中央处理器;
[0130] 第二调用单元604,用于调用目标处理器,以利用目标处理器执行第一可加速分支代码及第二可加速分支代码。
[0131] 为便于理解,下面以一个实际应用场景对本实施例中调度装置的各单元之间的交互方式进行描述,具体如下:
[0132] 执行单元601加载并执行编译器生成的可执行代码,可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码。
[0133] 其中,钩子函数与异常处理函数仅对将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码起作用,对其他由非可加速代码编译得到的代码不起作用。
[0134] 异常产生单元602在执行单元601执行到钩子函数时,产生异常。
[0135] 第一调用单元603在异常产生单元602产生异常后,调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口。
[0136] 如果编译器在代码编译阶段生成的只有可运行平台列表,则进程调度接口的参数就为可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器。这种情况说明:可执行代码中的第一可加速分支代码可以在可运行平台列表中的所有加速处理器上执行,可执行代码中的第二可加速分支代码可以在可运行平台列表中的所有中央处理器上执行。第一调用单元603可利用进程调度接口的可运行平台列表得到用于执行第一可加速分支代码及第二可加速分支代码的目标处理器。
[0137] 具体地,第一调用单元603从进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器分别作为执行第一可加速分支代码及第二可加速分支代码的目标处理器。
[0138] 另外,如果编译器在代码编译阶段生成的有可运行平台列表及亲属性列表,则进程调度接口的参数就为可运行平台列表及亲属性列表。其中,可运行平台列表中包含所有加速处理器及中央处理器,亲属性列表中包含在可运行平台列表中运行代价小于预置数值的预定数目的加速处理器。这种情况说明:可执行代码中的第一可加速分支代码只能在部分加速处理器上执行,这部分加速处理是亲属性列表中的加速处理器,可执行代码中的第二可加速分支代码可以在可运行平台列表中的所有中央处理器上执行。
[0139] 当进程调度接口的参数为可运行平台列表及亲属性列表时,第一调用单元603可从亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作为执行第一可加速分支代码的目标处理器,从可运行平台列表中获取负载最少,和/或运行代价最小的中央处理器作为执行第二可加速分支代码的目标处理器。
[0140] 第二调用单元604调用第一调用单元603获取的目标处理器,以利用目标处理器执行第一可加速分支代码及第二可加速分支代码。
[0141] 本实施例中,执行单元执行可执行代码,异常产生单元在执行单元执行到钩子函数时,产生异常,第一调用单元调用异常处理函数,以利用异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的亲属性列表及可运行平台列表分别获取用于执行第一可加速分支代码及第二可加速分支代码的目标处理器,然后第二调用单元调用目标处理器执行对应的可加速分支代码。可执行代码在被执行过程中,调度装置可利用条件控制代码自动获取合适的目标处理器执行对应的可加速代码分支,不需要开发者自己解决系统资源调度问题,简化了开发者的工作,且能够合理地利用系统资源。
[0142] 下面对本发明实施例中的编译器进一步说明,请参阅图7,本发明实施例中编译器包括:第一处理器701、用于存储缓存代码的第一存储器702、第一输入装置703及第一输出装置704。
[0143] 第一处理器701执行如下流程:
[0144] 获取加速处理器资源的信息以及中央处理器资源的信息以生成可运行平台列表,并根据加速处理器资源的信息从第一用户代码中识别出可加速代码,可运行平台列表中包含所有加速处理器及中央处理器;
[0145] 在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;
[0146] 对第二用户代码进行编译得到可执行代码,其中,可执行代码中包含将钩子函数与异常处理函数编译得到的可执行用户代码,以及将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,第一可加速分支代码用于在可运行平台列表中的加速处理器上执行,第二可加速分支代码用于在可运行平台列表中的中央处理器上执行,嵌入钩子函数与异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器。
[0147] 下面对本发明实施例中的调度装置进一步说明,请参阅图8,本发明实施例中调度装置包括:第二处理器801、用于存储缓存代码第二存储器802、第二输入装置803及第二输出装置804。
[0148] 第二处理器801执行如下流程:
[0149] 加载并执行编译器生成的可执行代码,可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码;
[0150] 执行到所述钩子函数时,产生异常;
[0151] 调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度接口,利用进程调度接口的可运行平台列表得到分别用于执行第一可加速分支代码及第二可加速分支代码的目标处理器,可运行平台列表中包含所有加速处理器及中央处理器;
[0152] 调用目标处理器,以利用目标处理器执行第一可加速分支代码及第二可加速分支代码。
[0153] 本发明实施例还提供了一种调度系统,请参阅图9,该调度系统包括:编译器901、调度装置902,至少一个加速处理器903及至少一个中央处理器904。
[0154] 需要说明的是,本实施例中的编译器可与前述图5所示的编译器相同,本实施例中的调度装置可与前述图6所示的调度装置相同,具体此处不再赘述。
[0155] 另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为模显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0156] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0157] 以上对本发明实施例所提供的一种代码生成方法、编译器、调度方法、装置及调度系统进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,因此,本说明书内容不应理解为对本发明的限制。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈