首页> 中国专利> 一种代码生成方法、编译器、调度方法、装置及调度系统

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

摘要

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

著录项

  • 公开/公告号CN104423994A

    专利类型发明专利

  • 公开/公告日2015-03-18

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN201310395216.8

  • 发明设计人 颜友亮;郑荣福;

    申请日2013-09-03

  • 分类号G06F9/445(20060101);G06F9/45(20060101);G06F9/50(20060101);

  • 代理机构深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人王仲凯

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-17 04:19:09

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-11

    授权

    授权

  • 2015-04-15

    实质审查的生效 IPC(主分类):G06F9/445 申请日:20130903

    实质审查的生效

  • 2015-03-18

    公开

    公开

说明书

技术领域

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

背景技术

当前提高系统计算能力的主流方法是利用多核系统。包含有多种不同类 型处理器的多核系统称为异构系统,异构系统一般由通用处理器和专用加速 处理器构成。异构系统具有如下优势:一方面,通用处理器处理标量计算, 提供通用的计算能力,使得异构系统可以适应多方面的应用;另一方面,专 用加速处理器面向某些特定的领域可以提供强大的计算性能,且能效比较高, 使得异构系统比同构系统拥有更高的性能和效能。

对于异构系统来说,最重要的问题有两方面:一是如何使用专用加速处 理器,二是如何使得系统整体的计算性能最高。因为专用加速处理器与通用 处理器,如传统中央处理器(Central Processing Unit,CPU)有着不同的体系 架构,因此专用加速处理器的指令集与传统CPU的指令集是不兼容的,即运 行在CPU上的代码无法直接运行在专用加速处理器上,因此,无法使用针对 CPU的开发工具来开发专用加速处理器。而要使异构系统的计算性能最高, 就必须充分利用各处理器的计算能力,由于各处理器在功能和性能差异很大, 因此要充分利用各处理器的计算能力,就必须了解各类处理器的特点,然后 将任务合理的分配到各处理器上。

现有技术提供的用于异构系统的编程方式,开发者在程序中需要明确指 定程序段将运行在哪种处理器上,即任务的分配由开发者完成。开放计算语 言(Open Computing Language,OpenCL)是该方案的一种典型实现,它为异 构系统编程提供了一个开放的框架标准。开发者可以使用OpenCL提供的语 言来编写将要运行在各处理器上的程序,然后调用OpenCL提供的用于控制 系统的应用程序编程接口(Application Programming Interface,API)来指定哪 部分程序将运行在哪种处理器上,并通过两阶段编译将这些程序转化为对应 处理器上可执行的代码,最后利用控制系统的API调用可执行代码在相应的 处理器上运行。

从上面的描述中可以看到,现有技术提供的用于异构系统的编程方式, 需要开发者自己解决系统资源调度问题,这要求开发者对硬件比较熟悉,并 且调度方案事先指定,程序中已经指定了哪些程序在哪种设备上执行,系统 无法根据当前状态进行合理调度。因此当指定的设备处于忙碌状态时该程序 也无法运行在其他空闲的设备上,造成了系统资源的浪费。

发明内容

本发明实施例提供了一种代码生成方法、编译器、调度方法、装置及调 度系统,使得生成的可执行代码在执行的时候可以自动实现处理器的合理调 度。

本发明实施例第一方面提供的代码生成方法,应用于调度系统,所述调 度系统中包括异构系统、编译器,所述代码为可执行代码,所述可执行代码 应用于异构系统,所述异构系统包括加速处理器和中央处理器,所述方法包 括:

所述编译器获取所述加速处理器资源的信息以及所述中央处理器资源的 信息以生成可运行平台列表,并根据所述加速处理器资源的信息从第一用户 代码中识别出可加速代码,所述可运行平台列表中包含所有加速处理器及中 央处理器;

所述编译器在所述可加速代码前嵌入钩子函数与异常处理函数以形成第 二用户代码;

所述编译器对所述第二用户代码进行编译得到可执行代码,其中,所述 可执行代码中包含将所述钩子函数与所述异常处理函数编译得到的可执行用 户代码,以及将所述可加速代码编译得到的第一可加速分支代码及第二可加 速分支代码,所述第一可加速分支代码用于在所述可运行平台列表中的加速 处理器上执行,所述第二可加速分支代码用于在所述可运行平台列表中的中 央处理器上执行,所述嵌入钩子函数与异常处理函数的目的是:使得在所述 可执行代码被执行的过程中,执行到所述钩子函数时,利用所述异常处理函 数中的条件控制代码为所述第一可加速分支代码及所述第二可加速分支代码 选择目标处理器。

结合本发明实施例的第一方面,在本发明实施例的第一方面的第一种实 施方式中,所述编译器在生成可运行平台列表之前,还包括:调用运行代价 评估函数对所述加速处理器及所述中央处理器进行运行代价评估。

结合本发明实施例第一方面的第一种实施方式,在本发明实施例的第一 方面的第二种实施方式中,所述编译器对所述第二用户代码进行编译得到可 执行代码之前还包括:所述编译器在所述加速处理器中选取运行代价小于预 置数值的预定数目的加速处理器生成亲属性列表,所述亲属性列表中包含在 所述可运行平台列表中运行代价小于预置数值的预定数目的加速处理器;

所述第一可加速分支代码用于在所述亲属性列表中的加速处理器上执 行。

本发明实施例的第二方面提供了一种调度方法,应用于调度系统,所述 调度系统包括调度装置、异构系统,所述异构系统包括加速处理器及中央处 理器,所述方法包括:

所述调度装置加载并执行编译器生成的可执行代码,所述可执行代码中 包含所述编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以 及所述编译器将可加速代码编译得到的用于在所述加速处理器上执行的第一 可加速分支代码以及用于在所述中央处理器上执行的第二可加速分支代码;

所述调度装置在执行到所述钩子函数时,产生异常;

所述调度装置调用所述异常处理函数,根据所述异常处理函数中的条件 控制代码调用进程调度接口,利用所述进程调度接口的可运行平台列表得到 分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处 理器,所述可运行平台列表中包含所有加速处理器及中央处理器;

所述调度装置调用所述目标处理器,以利用所述目标处理器执行所述第 一可加速分支代码及所述第二可加速分支代码。

结合本发明实施例的第二方面,在本发明实施例的第二方面的第一种实 施方式中,所述调度装置利用所述进程调度接口的可运行平台列表得到分别 用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处理器 的方法包括:所述调度装置从所述进程调度接口的所述可运行平台列表中获 取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处 理器。

结合本发明实施例的第二方面的第一种实施方式,在本发明实施例的第 二方面的第二种实施方式中,所述进程调度接口中还包括亲属性列表,所述 亲属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数 目的加速处理器;

所述调度装置从所述进程调度接口的所述可运行平台列表中获取负载最 少,和/或运行代价最小的加速处理器及中央处理器作为目标处理器,包括:

所述调度装置从所述进程调度接口的亲属性列表中获取负载最少,和/或 运行代价最小的加速处理器作为执行所述第一可加速分支代码的目标处理 器,从所述进程调度接口的可运行平台列表中获取负载最少,和/或运行代价 最小的中央处理器作为执行所述第二可加速分支代码的目标处理器。

本发明实施例的第三方面提供了一种编译器,用于生成可执行代码,所 述可执行代码应用于异构系统,所述异构系统包括加速处理器和中央处理器, 所述编译器包括:

获取单元,用于获取所述加速处理器资源的信息以及所述中央处理器资 源的信息;

生成单元,用于根据所述获取单元获取的所述加速处理器资源的信息以 及所述中央处理器资源的信息生成可运行平台列表,所述可运行平台列表中 包含所有加速处理器及中央处理器;

识别单元,用于根据所述获取单元获取的加速处理器资源的信息从第一 用户代码中识别出可加速代码;

嵌入单元,用于在所述可加速代码前嵌入钩子函数与异常处理函数以形 成第二用户代码;

编译单元,用于对所述第二用户代码进行编译得到可执行代码,其中, 所述可执行代码中包含将所述钩子函数与所述异常处理函数编译得到的可执 行用户代码,以及将所述可加速代码编译得到的第一可加速分支代码及第二 可加速分支代码,所述第一可加速分支代码用于在所述可运行平台列表中的 加速处理器上执行,所述第二可加速分支代码用于在所述可运行平台列表中 的中央处理器上执行,所述嵌入钩子函数与异常处理函数的目的是:使得在 所述可执行代码被执行的过程中,执行到所述钩子函数时,利用所述异常处 理函数中的条件控制代码为所述第一可加速分支代码及所述第二可加速分支 代码选择目标处理器。

结合本发明实施例的第三方面,在本发明实施例的第三方面的第一种实 施方式中,所述编译器还包括:评估单元,用于调用运行代价评估函数对所 述加速处理器及所述中央处理器进行运行代价评估。

结合本发明实施例的第三方面的第一种实施方式,在本发明实施例的第 三方面的第二种实施方式中,所述生成单元还用于:在所述加速处理器中选 取运行代价小于预置数值的预定数目的加速处理器生成亲属性列表,所述亲 属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目 的加速处理器;

所述第一可加速分支代码用于在所述亲属性列表中的加速处理器上执 行。

本发明实施例的第四方面提供了一种调度装置,用于调度异构系统,所 述异构系统包括加速处理器及中央处理器,所述装置包括:

执行单元,用于加载并执行编译器生成的可执行代码,所述可执行代码 中包含所述编译器将钩子函数及异常处理函数编译得到的可执行用户代码, 以及所述编译器将可加速代码编译得到的用于在所述加速处理器上执行的第 一可加速分支代码以及用于在所述中央处理器上执行的第二可加速分支代 码;

异常产生单元,用于在执行到所述钩子函数时,产生异常;

第一调用单元,用于调用所述异常处理函数,根据所述异常处理函数中 的条件控制代码调用进程调度接口,利用所述进程调度接口的可运行平台列 表得到分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的 目标处理器,所述可运行平台列表中包含所有加速处理器及中央处理器;

第二调用单元,用于调用所述目标处理器,以利用所述目标处理器执行 所述第一可加速分支代码及所述第二可加速分支代码。

结合本发明实施例的第四方面,在本发明实施例的第四方面的第一种实 施方式中,所述第一调用单元利用所述进程调度接口的可运行平台列表得到 分别用于执行所述第一可加速分支代码及所述第二可加速分支代码的目标处 理器的方法包括:所述第一调用单元从所述进程调度接口的所述可运行平台 列表中获取负载最少,和/或运行代价最小的加速处理器及中央处理器作为所 述目标处理器。

结合本发明实施例第四方面的第一种实施方式,在本发明实施例的第四 方面的第二种实施方式中,所述进程调度接口中还包括亲属性列表,所述亲 属性列表中包含在所述可运行平台列表中运行代价小于预置数值的预定数目 的加速处理器;

所述第一调用单元从所述进程调度接口的所述可运行平台列表中获取负 载最少,和/或运行代价最小的加速处理器及中央处理器作为所述目标处理器, 包括:

所述第一调用单元从所述进程调度接口的亲属性列表中获取负载最少, 和/或运行代价最小的加速处理器作为执行所述第一可加速分支代码的目标处 理器,从所述进程调度接口的可运行平台列表中获取负载最少,和/或运行代 价最小的中央处理器作为执行所述第二可加速分支代码的目标处理器。

本发明实施例的第五方面提供了一种调度系统,所述调度系统包括本发 明实施例第三方面所提供的编译器;以及本发明实施例第四方面提供的调度 装置;以及至少一个加速处理器和至少一个中央处理器。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明实施例中,编译器获取加速处理器及中央处理器资源的信息以生 成可运行平台列表,并根据加速处理器资源的信息从第一用户代码中识别出 可加速代码,然后在可加速代码前嵌入钩子函数与异常处理函数以形成第二 用户代码;最后对第二用户代码进行编译得到可执行代码,其中,可执行代 码中包含将钩子函数与异常处理函数编译得到的可执行用户代码,以及将可 加速代码编译得到的第一可加速分支代码及第二可加速分支代码,第一可加 速分支代码用于在可运行平台列表中的加速处理器上执行,第二可加速分支 代码用于在可运行平台列表中的中央处理器上执行,嵌入钩子函数与异常处 理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时, 利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分 支代码选择目标处理器,因而,本发明实施例中生成的可执行代码在被执行 的时候可以根据实际情况自动实现处理器的合理调度,简化了开发者的工作, 且合理地利用了系统资源。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实 施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面 描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中代码生成方法一个实施例示意图;

图2为本发明实施例中代码生成方法另一实施例示意图;

图3为本发明实施例中调度方法一个实施例示意图;

图4为本发明实施例中调度方法另一实施例示意图;

图5为本发明实施例中编译器一个实施例示意图;

图6为本发明实施例中调度装置一个实施例示意图;

图7为本发明实施例中编译器另一实施例示意图;

图8为本发明实施例中调度装置另一实施例示意图;

图9为本发明实施例中调度系统一个实施例示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行 描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实 施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动 前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供了一种代码生成方法、编译器、调度方法、装置及调 度系统。本发明实施例生成的可执行代码在执行的时候可以自动实现处理器 的合理调度。

请参阅图1,图1示出了本发明实施例中代码生成方法一个实施例,本实 施例的代码生成方法应用于调度系统,调度系统中包含异构系统、编译器。 本实施例生成的代码是可应用于异构系统的可执行代码,其中,异构系统可 包括加速处理器及中央处理器。本实施例方法包括:

101、编译器获取加速处理器资源的信息及中央处理器资源的信息;

编译器调用系统知识库,从系统知识库中获取当前系统的硬件资源信息, 该硬件资源信息主要包括加速处理器资源的信息及中央处理器资源的信息。

102、编译器生成可运行平台列表;

编译器根据所识别出的加速处理器资源的信息及中央处理器资源的信息 生成可运行平台列表,可运行平台列表中包含所有加速处理器及中央处理器。

103、编译器从第一用户代码中识别出可加速代码;

编译器根据所获取的加速处理器资源的信息从第一用户代码中识别出可 加速代码,可加速代码编译后可以在加速处理器及中央处理器上运行。

104、编译器在可加速代码前嵌入钩子函数与异常处理函数以形成第二用 户代码;

钩子函数的主要作用是产生异常,而异常处理函数主要用于解决钩子函 数产生的异常,异常处理函数中包含条件控制代码。编译器在识别出可加速 代码后在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码, 所以第二用户代码中含有钩子函数、异常处理函数及可加速代码。

105、编译器对第二用户代码进行编译得到可执行代码。

其中,编译得到的可执行代码中含有可执行用户代码,第一可加速分支 代码及第二可加速分支代码。可执行用户代码是由第二用户代码中的钩子函 数及异常处理函数编译得到的,第一可加速分支代码及第二可加速分支代码 均是由第二用户代码中的可加速代码编译得到的,第一可加速分支代码主要 用于在可运行平台列表中的加速处理器上执行,第二可加速分支代码主要用 于在可运行平台列表中的中央处理器上执行。

另外,步骤104中在可加速代码前嵌入钩子函数与异常处理函数是为了 在可执行代码被执行的过程中,执行到钩子函数时,产生异常,然后利用异 常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码 选择目标处理器,因而,本实施例生成的可执行代码在执行的时候可以自动 调用合适的处理器,不需要开发者事先解决系统资源调度问题。

另外,需要说明的是,本实施中提到的第一用户代码中不仅含有可加速 代码,也含有非可加速代码,非可加速代码的编译方法可采用现有技术中的 任意一种方法。本实施例所嵌入的钩子函数及异常处理函数仅对可加速代码 起作用,本实施例的主要目的是对可加速代码进行编译,以使得编译之后得 到的可执行代码在执行的过程中,执行到钩子函数时,可以利用异常处理函 数中的条件控制代码自动为编译后的可加速代码(第一可加速分支代码及第 二可加速分支代码)选择目标处理器。

本实施例中,编译器在对可加速代码编译前,在可加速代码前嵌入钩子 函数与异常处理函数形成第二用户代码,然后对第二用户代码进行编译得到 可执行代码。而嵌入钩子函数与异常处理函数的目的是:使得在可执行代码 被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控制代码 为第一可加速分支代码及第二可加速分支代码选择目标处理器。因而,本实 施例中生成的可执行代码在被执行的时候可以根据实际情况自动实现处理器 的合理调度,简化了开发者的工作,且合理地利用了系统资源。

为便于理解,下面以一具体实施例对本发明实施例中代码生成方法进行 描述,请参阅图2,本实施例中的代码生成方法仍应用于调度系统,调度系统 中包含异构系统、编译器。本实施例生成的代码仍是可应用于异构系统的可 执行代码,其中,异构系统可包括加速处理器及中央处理器。本实施例方法 包括:

201、编译器获取加速处理器资源的信息及中央处理器资源的信息;

编译器调用系统知识库,从系统知识库中获取当前系统的硬件资源信息, 该硬件资源信息主要包括加速处理器资源的信息及中央处理器资源的信息。

202、编译器调用运行代价评估函数对加速处理器及中央处理器进行运行 代价评估;

编译器从第一用户代码中任意选取一段代码,将该代码进行编译,此处 可将编译后的代码称为测试代码。编译器将这段测试代码分别放在加速处理 器及中央处理器上运行,同时调用运行代价评估函数对加速处理器及中央处 理器进行运行代价评估,此处的运行代价指的是处理器运行测试代码的时间。 同一段测试代码,运行需要的时间越长,说明该处理器的运行代价越大。

203、编译器生成可运行平台列表及亲属性列表;

编译器对加速处理器及中央处理器进行运行代价评估后生成可运行平台 列表及亲属性列表。其中,可运行平台列表中包含所有加速处理器及所有中 央处理器,可运行平台列表还可以包括各个处理器的编号、运行代价等。而 亲属性列表中只包含可运行平台列表中运行代价小于预设数值的预定数目的 加速处理器。

204、编译器从第一用户代码中识别出可加速代码;

编译器根据所获取的加速处理器资源的信息从第一用户代码中识别出可 加速代码。可加速代码编译后可以在加速处理器及中央处理器上运行,但是 在加速处理器上运行的代价小于在中央处理器上的运行代价。

205、编译器在可加速代码前嵌入钩子函数与异常处理函数以形成第二用 户代码;

钩子函数的主要作用是产生异常,而异常处理函数主要用于解决钩子函 数产生的异常,异常处理函数中包含条件控制代码。编译器在识别出可加速 代码后在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码, 所以第二用户代码中含有钩子函数、异常处理函数及可加速代码。

206、编译器对第二用户代码进行编译得到可执行代码。

其中,编译得到的可执行代码中含有可执行用户代码,第一可加速分支 代码及第二可加速分支代码。可执行用户代码是由第二用户代码中的钩子函 数及异常处理函数编译得到的,第一可加速分支代码及第二可加速分支代码 均是由第二用户代码中的可加速代码编译得到的。

本实施例中,为了提高编译效率,编译器在对第二用户代码进行编译之 前,生成了亲属性列表及可运行平台列表,所以编译器可将可加速代码编译 成只用于在亲属性列表中的加速处理器上执行的第一可加速分支代码,而亲 属性列表中的加速处理器只是可运行平台列表内的加速处理器中的一部分, 所以本实施例的方法节省了编译时间。另外,可执行代码中的第二可加速分 支代码用于在可运行平台列表中的所有中央处理器上执行。

步骤205中在可加速代码前嵌入钩子函数与异常处理函数是为了在可执 行代码被执行的过程中,执行到钩子函数时,产生异常,然后利用异常处理 函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目 标处理器,因而,本实施例生成的可执行代码在被执行的时候可以自动调用 合适的处理器,不需要开发者事先解决系统资源调度问题。

需要说明的是,本实施中提到的第一用户代码中不仅含有可加速代码, 也含有非可加速代码,非可加速代码的编译方法可采用现有技术中的任意一 种方法。本实施例所嵌入的钩子函数及异常处理函数仅对可加速代码起作用, 本实施例的主要目的是对可加速代码进行编译,以使得编译之后得到的可执 行代码在执行的过程中,执行到钩子函数时,可以利用异常处理函数中的条 件控制代码自动为编译后的可加速代码(第一可加速分支代码及第二可加速 分支代码)选择目标处理器。

本实施例中,编译器在对加速处理器及中央处理器进行运行代价评估后, 生成了可运行平台列表及亲属性列表,在对可加速代码进行编译前,在可加 速代码前嵌入钩子函数与异常处理函数形成第二用户代码,然后对第二用户 代码进行编译得到可执行代码,可执行代码中的第一可加速分支代码只用于 在亲属性列表中的加速处理器上执行,而亲属性列表中的加速处理器只是可 运行平台列表中的加速处理器中的一部分,因而本实施例提供的代码生成方 法节省了编译时间,提高了编译效率。另外,嵌入钩子函数与异常处理函数 的目的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异 常处理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码 选择目标处理器。因而,本实施例中生成的可执行代码在被执行的时候可以 根据实际情况自动实现处理器的合理调度,简化了开发者的工作,且合理地 利用了系统资源。

上面两个实施例说明了可执行代码的生成方法,下面将说明调度装置执 行可执行代码对异构系统进行调度的方法,请参阅图3。本实施例的调度方法 应用于调度系统,本实施例中的调度系统可包括调度装置、异构系统,异构 系统包括加速处理器、中央处理器。本发明实施例中调度方法一个实施例包 括:

301、调度装置加载并执行编译器生成的可执行代码;

可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行 用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的 第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码。

其中,钩子函数与异常处理函数仅对将可加速代码编译得到的第一可加 速分支代码及第二可加速分支代码起作用,对其他由非可加速代码编译得到 的代码不起作用。

302、调度装置在执行到钩子函数时,产生异常;

303、调度装置调用异常处理函数,根据异常处理函数中的条件控制代码 调用进程调度接口,利用进程调度接口的可运行平台列表得到分别用于执行 第一可加速分支代码及第二可加速分支代码的目标处理器;

在异常产生后,调度装置调用异常处理函数,根据异常处理函数中的条 件控制代码调用进程调度接口,进程调度接口的参数为可运行平台列表,可 运行平台列表中包含所有加速处理器及中央处理器。调度装置利用进程调度 接口的可运行平台列表得到分别用于执行第一可加速分支代码及第二可加速 分支代码的目标处理器。

304、调度装置调用目标处理器,以利用目标处理器执行第一可加速分支 代码及第二可加速分支代码。

本实施例中,可执行代码在调度装置中被执行,当执行到钩子函数时, 产生异常,调度装置调用异常处理函数,以利用异常处理函数中的条件控制 代码调用进程调度接口,利用进程调度接口的可运行平台列表获取用于执行 第一可加速分支代码及第二可加速分支代码的目标处理器,然后调用目标处 理器执行对应的可加速分支代码。可执行代码在被执行过程中,调度装置可 利用条件控制代码自动获取合适的目标处理器执行对应的可加速代码分支, 不需要开发者自己解决系统资源调度问题,简化了开发者的工作,且能够合 理地利用系统资源。

为便于理解,下面以一具体实施例对本发明实施例中的调度方法进行描 述,请参阅图4,本实施例的调度方法应用于调度系统,本实施例中的调度系 统可包括调度装置、异构系统。异构系统包括加速处理器、中央处理器。本 发明实施例中调度方法另一实施例包括:

401、调度装置加载并执行编译器生成的可执行代码;

可执行代码中包含编译器将钩子函数及异常处理函数编译得到的可执行 用户代码,以及编译器将可加速代码编译得到的用于在加速处理器上执行的 第一可加速分支代码以及用于在中央处理器上执行的第二可加速分支代码。

其中,钩子函数与异常处理函数仅对将可加速代码编译得到的第一可加 速分支代码及第二可加速分支代码起作用,对其他由非可加速代码编译得到 的代码不起作用。

402、调度装置在执行到钩子函数时,产生异常;

403、调度装置调用异常处理函数,根据异常处理函数中的条件控制代码 调用进程调度接口,利用进程调度接口的亲属性列表及可运行平台列表得到 分别用于执行第一可加速分支代码及第二可加速分支代码的目标处理器;

在异常产生后,调度装置调用异常处理函数,根据异常处理函数中的条 件控制代码调用进程调度接口,进程调度接口的参数为亲属性列表和可运行 平台列表,可运行平台列表中包含所有加速处理器及中央处理器,亲属性列 表中包含在可运行平台列表中运行代价小于预置数值的预定数目的加速处理 器。调度装置利用进程调度接口的亲属性列表得到用于执行第一可加速分支 代码的目标处理器,从可运行平台列表中得到用于执行第二可加速分支代码 的目标处理器。

具体地,调度装置从进程调度接口的亲属性列表中获取负载最少,和/或 运行代价最小的加速处理器作为执行第一可加速分支代码的目标处理器,从 进程调度接口的可运行平台列表中获取负载最少,和/或运行代价最小的中央 处理器作为执行第二可加速分支代码的目标处理器。

404、调度装置调用目标处理器,以利用目标处理器执行第一可加速分支 代码及第二可加速分支代码。

本实施例中,可执行代码在调度装置中被执行,当执行到钩子函数时, 产生异常,调度装置调用异常处理函数,以利用异常处理函数中的条件控制 代码调用进程调度接口,利用进程调度接口的亲属性列表及可运行平台列表 分别获取用于执行第一可加速分支代码及第二可加速分支代码的目标处理 器,然后调用目标处理器执行对应的可加速分支代码。可执行代码在被执行 过程中,调度装置可利用条件控制代码自动获取合适的目标处理器执行对应 的可加速代码分支,不需要开发者自己解决系统资源调度问题,简化了开发 者的工作,且能够合理地利用系统资源。

下面对本发明实施例中的编译器进行描述,请参阅图5,本实施例中的编 译器用于生成在异构系统上执行的可执行代码,本实施例中的异构系统可包 括加速处理器、中央处理器。本发明实施例中的编译器一个实施例包括:

获取单元501,用于获取加速处理器资源的信息以及中央处理器资源的信 息;

生成单元502,用于根据获取单元501获取的加速处理器资源的信息以及 中央处理器资源的信息生成可运行平台列表,可运行平台列表中包含所有加 速处理器及中央处理器;

识别单元503,用于根据获取单元501获取的加速处理器资源的信息从第 一用户代码中识别出可加速代码;

嵌入单元504,用于在可加速代码前嵌入钩子函数与异常处理函数以形成 第二用户代码;

编译单元505,用于对第二用户代码进行编译得到可执行代码,其中,可 执行代码中包含将钩子函数与异常处理函数编译得到的可执行用户代码,以 及将可加速代码编译得到的第一可加速分支代码及第二可加速分支代码,第 一可加速分支代码用于在可运行平台列表中的加速处理器上执行,第二可加 速分支代码用于在可运行平台列表中的中央处理器上执行,嵌入钩子函数与 异常处理函数的目的是:使得在可执行代码被执行的过程中,执行到钩子函 数时,利用异常处理函数中的条件控制代码为第一可加速分支代码及第二可 加速分支代码选择目标处理器;

评估单元506,用于调用运行代价评估函数对加速处理器及中央处理器进 行运行代价评估。

为便于理解,下面以一个实际应用场景对本实施例中编译器的各单元之 间的交互方式进行描述,具体如下:

获取单元501调用系统知识库,从系统知识库中获取当前系统的硬件资 源信息,该硬件资源信息主要包括加速处理器资源的信息及中央处理器资源 的信息。

生成单元502根据获取单元501获取的加速处理器资源的信息及中央处 理器资源的信息生成可运行平台列表,可运行平台列表中包含所有加速处理 器及中央处理器。

识别单元503根据获取单元501获取的加速处理器资源的信息从第一用 户代码中识别出可加速代码,可加速代码编译后可以在加速处理器及中央处 理器上运行。

嵌入单元504在识别单元503识别出的可加速代码前嵌入钩子函数与异 常处理函数以形成第二用户代码。其中,钩子函数的主要作用是产生异常, 而异常处理函数主要用于解决钩子函数产生的异常,异常处理函数中包含条 件控制代码。嵌入单元504在识别出的可加速代码前嵌入钩子函数与异常处 理函数以形成第二用户代码,所以第二用户代码中含有钩子函数、异常处理 函数及可加速代码。

编译单元505对嵌入单元504形成的第二用户代码进行编译得到可执行 代码。其中,编译得到的可执行代码中含有可执行用户代码,第一可加速分 支代码及第二可加速分支代码。可执行用户代码是由第二用户代码中的钩子 函数及异常处理函数编译得到的,第一可加速分支代码及第二可加速分支代 码均是由第二用户代码中的可加速代码编译得到的,第一可加速分支代码用 于在可运行平台列表中的所有加速处理器上执行,第二可加速分支代码用于 在可运行平台列表中的所有中央处理器上执行。

嵌入单元504在可加速代码前嵌入钩子函数与异常处理函数是为了在执 行可执行代码的过程中,执行到钩子函数时,产生异常,然后利用异常处理 函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择目 标处理器,因而,本实施例生成的可执行代码在被执行的时候可以自动调用 合适的处理器,不需要开发者事先解决系统资源调度问题。

另外,本实施例中的编译器还包括评估单元506,评估单元506用于调用 运行代价评估函数对获取单元501获取的加速处理器及中央处理器进行运行 代价评估。具体的评估方法可如下:

评估单元506从第一用户代码中任意选取一段代码,将该代码进行编译, 此处可将编译后的代码称为测试代码。评估单元506将这段测试代码分别放 在加速处理器及中央处理器上运行,同时调用运行代价评估函数对加速处理 器及中央处理器进行运行代价评估,此处的运行代价指的是处理器运行测试 代码的时间。同一段测试代码,运行需要的时间越长,说明该处理器的运行 代价越大。

在评估单元506对系统中的加速处理器及中央处理器进行运行代价评估 后,生成单元502生成的可运行平台列表中可包含各个处理器的运行代价。

为了提高编译效率,生成单元502在编译单元505对第二用户代码进行 编译之前,还可以选取运行代价小于预设数值的预定数目的加速处理器生成 了亲属性列表,亲属性列表中包含在可运行平台列表中运行代价小于预置数 值的预定数目的加速处理器,所以编译单元505可将可加速代码编译生成只 用于在亲属性列表中的加速处理器上执行的第一可加速分支代码,而亲属性 列表中的加速处理器只是可运行平台列表中的加速处理器中的一部分,所以 这种编译方法节省了编译时间。

另外,需要说明的是,本实施中提到的第一用户代码中不仅含有可加速 代码,也含有非可加速代码,非可加速代码的编译方法可采用现有技术中的 任意一种方法。本实施例所嵌入的钩子函数及异常处理函数仅对可加速代码 起作用,本实施例的主要目的是编译器对可加速代码进行编译,以使得编译 之后得到的可执行代码在执行的过程中,执行到钩子函数时,可以利用异常 处理函数中的条件控制代码自动为编译后的可加速代码(第一可加速分支代 码及第二可加速分支代码)选择目标处理器。

本实施例中,生成单元在评估单元在对加速处理器及中央处理器进行运 行代价评估后,生成了可运行平台列表及亲属性列表,可运行平台列表及亲 属性列表中可包含各个处理器的运行代价;嵌入单元在编译单元对可加速代 码进行编译前,在可加速代码前嵌入钩子函数与异常处理函数形成第二用户 代码,然后编译单元对第二用户代码进行编译得到可执行代码。本实施例中, 可将可加速代码编译成用于在可运行平台列表中的所有中央处理器上运行的 第二可加速分支代码,以及只用于在亲属性列表中的加速处理器上执行的第 一可加速分支代码,而亲属性列表中的加速处理器只是可运行平台列表内的 加速处理器中的一部分,因而本实施例提供的代码生成方法可节省编译时间, 提高编译效率。另外,嵌入钩子函数与异常处理函数的目的是:使得在可执 行代码被执行的过程中,执行到钩子函数时,利用异常处理函数中的条件控 制代码为第一可加速分支代码及第二可加速分支代码选择目标处理器。因而, 本实施例中编译器生成的可执行代码在被执行的时候可以根据实际情况自动 实现处理器的合理调度,简化了开发者的工作,且合理地利用了系统资源。

下面对本发明实施例中的调度装置进行描述,请参阅图6,本实施例中的 调度装置用于调度异构系统,本实施例中的异构系统可包括加速处理器、中 央处理器。本发明实施例中的调度装置一个实施例包括:

执行单元601,用于加载并执行编译器生成的可执行代码,可执行代码中 包含编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编 译器将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代 码以及用于在中央处理器上执行的第二可加速分支代码;

异常产生单元602,用于在执行到钩子函数时,产生异常;

第一调用单元603,用于调用异常处理函数,根据异常处理函数中的条件 控制代码调用进程调度接口,利用进程调度接口的可运行平台列表得到分别 用于执行第一可加速分支代码及第二可加速分支代码的目标处理器,可运行 平台列表中包含所有加速处理器及中央处理器;

第二调用单元604,用于调用目标处理器,以利用目标处理器执行第一可 加速分支代码及第二可加速分支代码。

为便于理解,下面以一个实际应用场景对本实施例中调度装置的各单元 之间的交互方式进行描述,具体如下:

执行单元601加载并执行编译器生成的可执行代码,可执行代码中包含 编译器将钩子函数及异常处理函数编译得到的可执行用户代码,以及编译器 将可加速代码编译得到的用于在加速处理器上执行的第一可加速分支代码以 及用于在中央处理器上执行的第二可加速分支代码。

其中,钩子函数与异常处理函数仅对将可加速代码编译得到的第一可加 速分支代码及第二可加速分支代码起作用,对其他由非可加速代码编译得到 的代码不起作用。

异常产生单元602在执行单元601执行到钩子函数时,产生异常。

第一调用单元603在异常产生单元602产生异常后,调用异常处理函数, 根据异常处理函数中的条件控制代码调用进程调度接口。

如果编译器在代码编译阶段生成的只有可运行平台列表,则进程调度接 口的参数就为可运行平台列表,可运行平台列表中包含所有加速处理器及中 央处理器。这种情况说明:可执行代码中的第一可加速分支代码可以在可运 行平台列表中的所有加速处理器上执行,可执行代码中的第二可加速分支代 码可以在可运行平台列表中的所有中央处理器上执行。第一调用单元603可 利用进程调度接口的可运行平台列表得到用于执行第一可加速分支代码及第 二可加速分支代码的目标处理器。

具体地,第一调用单元603从进程调度接口的可运行平台列表中获取负 载最少,和/或运行代价最小的加速处理器及中央处理器分别作为执行第一可 加速分支代码及第二可加速分支代码的目标处理器。

另外,如果编译器在代码编译阶段生成的有可运行平台列表及亲属性列 表,则进程调度接口的参数就为可运行平台列表及亲属性列表。其中,可运 行平台列表中包含所有加速处理器及中央处理器,亲属性列表中包含在可运 行平台列表中运行代价小于预置数值的预定数目的加速处理器。这种情况说 明:可执行代码中的第一可加速分支代码只能在部分加速处理器上执行,这 部分加速处理是亲属性列表中的加速处理器,可执行代码中的第二可加速分 支代码可以在可运行平台列表中的所有中央处理器上执行。

当进程调度接口的参数为可运行平台列表及亲属性列表时,第一调用单 元603可从亲属性列表中获取负载最少,和/或运行代价最小的加速处理器作 为执行第一可加速分支代码的目标处理器,从可运行平台列表中获取负载最 少,和/或运行代价最小的中央处理器作为执行第二可加速分支代码的目标处 理器。

第二调用单元604调用第一调用单元603获取的目标处理器,以利用目 标处理器执行第一可加速分支代码及第二可加速分支代码。

本实施例中,执行单元执行可执行代码,异常产生单元在执行单元执行 到钩子函数时,产生异常,第一调用单元调用异常处理函数,以利用异常处 理函数中的条件控制代码调用进程调度接口,利用进程调度接口的亲属性列 表及可运行平台列表分别获取用于执行第一可加速分支代码及第二可加速分 支代码的目标处理器,然后第二调用单元调用目标处理器执行对应的可加速 分支代码。可执行代码在被执行过程中,调度装置可利用条件控制代码自动 获取合适的目标处理器执行对应的可加速代码分支,不需要开发者自己解决 系统资源调度问题,简化了开发者的工作,且能够合理地利用系统资源。

下面对本发明实施例中的编译器进一步说明,请参阅图7,本发明实施例 中编译器包括:第一处理器701、用于存储缓存代码的第一存储器702、第一 输入装置703及第一输出装置704。

第一处理器701执行如下流程:

获取加速处理器资源的信息以及中央处理器资源的信息以生成可运行平 台列表,并根据加速处理器资源的信息从第一用户代码中识别出可加速代码, 可运行平台列表中包含所有加速处理器及中央处理器;

在可加速代码前嵌入钩子函数与异常处理函数以形成第二用户代码;

对第二用户代码进行编译得到可执行代码,其中,可执行代码中包含将 钩子函数与异常处理函数编译得到的可执行用户代码,以及将可加速代码编 译得到的第一可加速分支代码及第二可加速分支代码,第一可加速分支代码 用于在可运行平台列表中的加速处理器上执行,第二可加速分支代码用于在 可运行平台列表中的中央处理器上执行,嵌入钩子函数与异常处理函数的目 的是:使得在可执行代码被执行的过程中,执行到钩子函数时,利用异常处 理函数中的条件控制代码为第一可加速分支代码及第二可加速分支代码选择 目标处理器。

下面对本发明实施例中的调度装置进一步说明,请参阅图8,本发明实施 例中调度装置包括:第二处理器801、用于存储缓存代码第二存储器802、第 二输入装置803及第二输出装置804。

第二处理器801执行如下流程:

加载并执行编译器生成的可执行代码,可执行代码中包含编译器将钩子 函数及异常处理函数编译得到的可执行用户代码,以及编译器将可加速代码 编译得到的用于在加速处理器上执行的第一可加速分支代码以及用于在中央 处理器上执行的第二可加速分支代码;

执行到所述钩子函数时,产生异常;

调用异常处理函数,根据异常处理函数中的条件控制代码调用进程调度 接口,利用进程调度接口的可运行平台列表得到分别用于执行第一可加速分 支代码及第二可加速分支代码的目标处理器,可运行平台列表中包含所有加 速处理器及中央处理器;

调用目标处理器,以利用目标处理器执行第一可加速分支代码及第二可 加速分支代码。

本发明实施例还提供了一种调度系统,请参阅图9,该调度系统包括:编 译器901、调度装置902,至少一个加速处理器903及至少一个中央处理器904。

需要说明的是,本实施例中的编译器可与前述图5所示的编译器相同, 本实施例中的调度装置可与前述图6所示的调度装置相同,具体此处不再赘 述。

另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述 作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为模块显 示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可 以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模 块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模 块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条 通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即 可以理解并实施。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本 发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件 包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情 况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而 且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、 数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更 佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技 术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储 在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁 碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机, 服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上对本发明实施例所提供的一种代码生成方法、编译器、调度方法、 装置及调度系统进行了详细介绍,对于本领域的一般技术人员,依据本发明 实施例的思想,在具体实施方式及应用范围上均会有改变之处,因此,本说 明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号