异构调度方法与流程

文档序号:17719522发布日期:2019-05-22 02:03阅读:776来源:国知局
异构调度方法与流程

本发明涉及异构计算领域,具体的,涉及一种异构计算中的调度技术。



背景技术:

异构计算(heterogeneouscomputing),主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。如图1,在一个异构计算系统中,常见的异构计算设备(也称为异构设备)类别包括cpu、gpu、dsp等,当前典型的异构系统如集成了中央处理器(centralprocessingunit,cpu)和图形处理器(graphicsprocessingunit,gpu)的通用计算机,或集成cpu、gpu和数字信号处理器(digitalsignalprocessor,dsp)芯片的手机系统级芯片(systemonchip,soc)。由于异构计算设备通常都有独自的指令集及编程模型,在进行异构计算时,必须提供面向异构设备的编程语言和编程框架,用以把计算任务表达成设备程序,并提供面向异构设备的资源调度技术,用以配置、调度这些异构资源。

现有的异构计算框架,例如开放计算语言(opencomputinglanguage,opencl)、统一计算设备架构(computeunifieddevicearchitecture,cuda)、c++加速大规模并行(c++acceleratedmassiveparallelism,c++amp)等,均为单程序多数据并行编程模型(singleprogrammultipledata,spmd)。spmd包括了一个称之为n维范围(ndrange)的n维索引空间用以组织数据。如图2,ndrange通常包括六个维度,包括最多3维的工作组(work-group),每个work-group又包括最多3维的工作节点(work-item)。每一个work-group中的work-item处于一个共享域,可以共享或者交换数据,各work-group之间完全独立运行,不存在相互间数据依赖关系。在执行任务时,为该任务创建一个内核(kernel)程序,内核程序指定一个ndrange,将ndrange的work-group依次发送给一个异构计算设备的指令执行单元,work-group中的每一个work-item都会被分配到指令执行单元中的一个单独的指令执行通道处理,指令执行单元依次从kernel程序中顺序获取指令流,从而完成单程序多数据的执行模型,完成并行处理数据的目的。

然而,对于同一个计算任务而言,由于kernel程序仅执行在一个异构计算设备上,且同一个kernel程序不能同时跨设备运行。因此,虽然多个任务之间能够并行执行,但是对于单个计算任务而言,不能实现异构并行运行,计算资源的有效利用率不高。



技术实现要素:

本文描述了一种异构计算设备的调度方法,装置及系统,以实现异构设备在单个任务中的并行数据计算,提高计算资源的利用率。

一方面,本申请实施例提供了一种异构调度方法,方法包括指示异构设备分别创建命令队列,所述命令队列包含所述命令队列对应的异构设备要处理的任务数据的数据索引。将同一n维索引空间ndrange中的不同工作组work-group分配到异构设备中不同设备中的命令队列中。由此,将同一任务的ndrange数据以工作组为粒度,并行的分配给不同的异构计算设备进行数据计算,从而实现了任务的并行计算。

在一种实现方式中,将至少一个工作组work-group分配到所述至少两个异构设备中的第一异构设备的命令队列中,将至少一个工作组work-group分配到所述至少两个异构设备中的第二异构设备的命令队列中,其中,所述工作组均为同一n维索引空间ndrange中的工作组,分配到第一异构设备的命令队列中的工作组的数量和分配到第二异构设备的命令队列中的工作组的数量均小于所述工作组所在的ndrange中工作组的总数,所述n维索引空间为一个任务的任务数据所对应的n维索引空间。

在一种实现方式中,当所述第一异构设备的负载状态低于第一阈值时,将至少一个工作组work-group分配到所述第一异构设备的命令队列中;当所述第二异构设备的负载状态低于第一阈值时,将至少一个工作组work-group分配到所述第二异构设备的命令队列中。由此,将工作组分配到负载较低的异构设备的命令队列中,可以提高系统整体的并行效率。

在一种实现方式中,分配到第一异构设备的命令队列中的工作组的数量和分配到第二异构设备的命令队列中的工作组的数量相同,且分配到第一异构设备的命令队列中的工作组的数量或分配到第二异构设备的命令队列中的工作组的数量能够被所述n为索引空间中的工作组的总数整除。

在一种实现方式中,先估计所述第一异构设备和所述第二异构设备执行所述工作组的时间,并根据所述执行时间,分配工作组到所述第一异构设备和所述第二异构设备的命令队列中,以使得所述第一异构设备执行完所述分配的工作组的时间和所述第一异构设备执行完所述分配的工作组的时间的差值最小。由此,可以使得执行同一任务数据的多个异构设备能够在尽量接近的时间中完成,从而提高任务的处理效率。

在一种实现方式中,将至少一个工作组work-group分配第一异构设备或者第二异构设备的命令队列时,通过发送用于指示所述分配到异构设备的至少一个工作组的全局坐标和偏移量到所述异构设备,从而指示异构设备运行所述工作组的数据。其中,所述全局坐标用于标识所述至少一个工作组中最后一个工作组在所述n维索引空间中的位置,所述偏移量用于标识所述至少一个工作组中第一个工作组在所述n维索引空间中的位置。

在一种实现方式中,所述将至少一个工作组work-group分配到所述至少两个异构设备中的第一异构设备或第二异构设备的命令队列中时,具体如下:创建第一虚拟设备,并创建所述第一虚拟设备的命令队列,以使得宿主程序将任务的任务数据分配给所述第一虚拟设备,所述宿主程序用于调度所述多个异构设备执行任务;获取宿主程序分配给所述第一虚拟设备的一个任务的任务数据对应的n维索引空间,将所述n维索引空间中的至少一个工作组work-group分配到所述第一异构设备或所述第二异构设备的命令队列中。通过使用虚拟设备作为中间设备,可以在不改变原有异构计算平台架构的情况下,实现本发明实施例所描述的并行计算方法。

在一种实现方式中,前述方法可以通过应用程序编程接口钩子apihook获取宿主程序的指令,并调度可安装客户端驱动程序icd实现。

另一方面,本发明实施例提供了一种异构调度装置,该装置具有实现上述方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。

在一种实现方式中,该装置包括命令队列创建模块,用于为至少两个异构设备分别创建命令队列,所述命令队列包含所述命令队列对应的异构设备要处理的任务数据的数据索引;

数据分配模块,用于将至少一个工作组work-group分配到所述至少两个异构设备中的第一异构设备的命令队列中,将至少一个工作组work-group分配到所述至少两个异构设备中的第二异构设备的命令队列中,其中,所述工作组均为同一n维索引空间ndrange中的工作组,分配到第一异构设备的命令队列中的工作组的数量和分配到第二异构设备的命令队列中的工作组的数量均小于所述工作组所在的ndrange中工作组的总数,所述n维索引空间为一个任务的任务数据所对应的n维索引空间。

在一种实现方式中,该装置还包括:监控模块,用于获取所述异构设备的负载状态;所述数据分配模块将至少一个工作组work-group分配到所述至少两个异构设备中的第一异构设备的命令队列中时具体包括:当所述第一异构设备的负载状态低于第一阈值时,将至少一个工作组work-group分配到所述第一异构设备的命令队列中;所述数据分配模块将至少一个工作组work-group分配到所述至少两个异构设备中的第二异构设备的命令队列中时具体包括:当所述第二异构设备的负载状态低于第一阈值时,将至少一个工作组work-group分配到所述第二异构设备的命令队列中。

在一些实现方式中,数据分配模块用于执行前述方面中数据分配的相关方法。

在一种可能的实现方式中,所述装置的结构中包括处理器、存储器和网络接口,所述处理器被配置为支持装置执行上述方法中相应的功能。所述网络接口用于与用户或者计算节点进行通信,从而获取或者上述方法中的外部信息。所述存储器用于与处理器耦合,其保存基站必要的程序指令和数据。

又一方面,本发明实施例提供了一种异构计算机系统,所述异构计算机系统包含至少两个异构计算设备,以及至少一个处理器和至少一个存储器,其中,所述存储器存储有任务数据,以及计算机程序指令,其中,一个任务的任务数据以n维索引空间ndrange的方式存储;所述处理器读取所述计算机程序指令,已执行前述方面中的方法。

又一方面,本发明实施例提供了一种计算机程序产品,其特征在于,所述计算机程序产品包含指令,其包含用于执行上述方面所设计的程序。

再一方面,本发明实施例提供了又一种计算机程序产品所述计算机程序产品包含指令,当所述指令在计算机上运行时,所述计算机执行如下过程:获取宿主程序的第一指令,所述第一指令用于获取异构设备的设备信息,所述宿主程序用于调度多个异构设备执行任务;创建第一虚拟设备,并向宿主程序返回所述第一虚拟设备的设备信息;获取宿主程序的第二指令,所述第二指令用于指示所述第一虚拟设备创建命令队列;创建所述第一虚拟设备的命令队列,并发送至少一个第三指令,所述第三指令用于指示至少一个异构设备分别创建命令队列;获取宿主程序的第四指令,所述第四指令用于指示将一个任务的任务数据对应的n维索引空间ndrange分配给所述第一虚拟设备;向到所述至少两个异构设备中的第一异构设备发送第五指令,向到所述至少两个异构设备中的第二异构设备发送第六指令,其中,所述第五指令用于指示将至少一个工作组work-group分配到所述至少两个异构设备中的第一异构设备的命令队列中,所述第六指令用于指示将至少一个工作组work-group分配到所述至少两个异构设备中的第二异构设备的命令队列中,所述工作组均为同一所述n维索引空间中的工作组,分配到第一异构设备的命令队列中的工作组的数量和分配到第二异构设备的命令队列中的工作组的数量均小于所述n维索引空间中工作组的总数。

再一方面,本发明实施例提供了一种计算机存储介质,用于储存为上述装置所用的计算机软件指令,其包含用于执行上述方面所设计的程序。

再一方面,本发明实施例提供了又一种计算机可读存储介质,所述算机可读存储介质包含指令,当所述指令在计算机上运行时,所述计算机执行如下过程:获取宿主程序的第一指令,所述第一指令用于获取异构设备的设备信息,所述宿主程序用于调度多个异构设备执行任务;创建第一虚拟设备,并向宿主程序返回所述第一虚拟设备的设备信息;获取宿主程序的第二指令,所述第二指令用于指示所述第一虚拟设备创建命令队列;创建所述第一虚拟设备的命令队列,并发送至少一个第三指令,所述第三指令用于指示至少一个异构设备分别创建命令队列;获取宿主程序的第四指令,所述第四指令用于指示将一个任务的任务数据对应的n维索引空间ndrange分配给所述第一虚拟设备;向到所述至少两个异构设备中的第一异构设备发送第五指令,向到所述至少两个异构设备中的第二异构设备发送第六指令,其中,所述第五指令用于指示将至少一个工作组work-group分配到所述至少两个异构设备中的第一异构设备的命令队列中,所述第六指令用于指示将至少一个工作组work-group分配到所述至少两个异构设备中的第二异构设备的命令队列中,所述工作组均为同一所述n维索引空间中的工作组,分配到第一异构设备的命令队列中的工作组的数量和分配到第二异构设备的命令队列中的工作组的数量均小于所述n维索引空间中工作组的总数。

相较于现有技术,本发明提供的实施例实现在异构计算平台中单个任务在不同的异构设备中并行运行,从而提高了执行效率。

附图说明

图1为一种异构计算系统的示意图;

图2为一种n维索引空间的示意图;

图3为本发明的一种实施例的异构计算平台架构示意图;

图4为本发明一种实施例中异构计算平台架构下的逻辑架构图;

图5为是本发明一种实施例中平台设备管理模块的子逻辑架构图;

图6为本发明的一种实施例的方法流程图;

图7为本发明一种实施例中一个二维ndrange的划分方式的示意图;

图8为本发明的又一种实施例的方法流程图。

图9为本发明的一种实施例中的的装置结构图

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

如图3所示,是本发明一种实施例的异构计算平台架构示意图。平台包括一个宿主机(host)和一组异构计算设备(computedevice),异构计算设备可以与宿主机集成在同一设备中运行,也可以以分布式的方式,与宿主机在同一分布式系统的不同节点中。每个异构计算设备由多个计算单元(computeunit)组成,计算单元用于执行程序实体(processingelement)以执行数据运算。宿主机负责执行宿主程序,异构计算设备负运行kernel程序。宿主程序用于管理异构计算设备,启动异构计算设备的kernel程序,kernel程序用于基于spmd模型并行的处理任务数据。

在具体的实现中,图3所描述的异构计算平台架构可以有多种实现方式,可以是包含多种异构的计算芯片或者计算核的终端设备,如智能手机、平板设备、多媒体设备、物联网终端等;也可以是包含异构计算设备的通用计算机,服务器或者嵌入式计算设备等;随着技术发展,所述的异构计算平台架构还可以适用于还可以是支持虚拟内存共享或者数据库共享的单节点或者多节点异构分布式集群等新型的异构计算形式中。

在本发明实施例中,对异构计算平台进行了改进,实现了单个计算任务的异构并行计算。

结合图4,描述了本发明一种实施例中在图3的平台架构下的逻辑架构图。

其中,宿主程序401是基于异构计算平台编程框架开发的应用程序。例如,宿主程序401可以为独立应用程序(standaloneapplication),第三方软件库(如异构资源调度框架openvx、mare(multicoreasynchronousruntimeenvironment)等)等。在一些实现方式中,宿主程序可以调用标准的异构计算平台编程接口,从而通过指令实现对异构设备进行操作所需的工作,包括发送诸如分配设备侧内存,事件同步,访存设备内存数据,发送具体的计算任务,编译设备程序文本等指令。

设备程序文本402是基于异构计算平台编程语言所描述的设备程序代码,宿主程序401通过kernel程序调用设备程序文本来运行设备程序,设备程序是一段符合spmd编程模型和规范的程序文本,会被宿主程序编译成设备指令集的二进制执行代码。

宿主程序401和设备程序文本402存储于宿主程序存储于宿主机存储设备(如硬盘)在宿主程序运行时会被加载到宿主程序的进程空间。设备程序文本存储于宿主程序的源码中,宿主程序运行时,设备程序文本会被加载到进程虚拟空间,由宿主程序调用编译模块编译成设备程序二进制代码,并被opencl运行库装载到设备内存。

异构调度模块403是本发明中改进的主要模块,在一种实现方式中,异构调度模块可以是一层独立的软件层,介于异构编程框架之上;在另一种实现方式中,异构调度模块也可以集成在异构编程框架中。图4所对应的实施例描述了异构调度模块在异构编程框架之上的情况,异构调度模块中包含了平台设备管理单元404,数据分块单元405和性能反馈单元406。

其中,平台设备管理单元404负责接收宿主程序401发起的设备命令,并将设备命令转发给底层的异构编程框架407,从而获取设备命令的原始结果,各相应子模块对原始结果创建相应的虚拟结果,建立一对一或一对多的映射关系,并将虚拟结果返回给宿主程序。参考图5,是平台设备管理模块在图4所对应的逻辑架构下的的子逻辑架构图。平台设备管理单元500包括如下子单元:平台查询子单元501,设备管理子单元502,命令队列子单元503,设备程序编译子单元504,设备任务分配子单元505。其中,平台查询子单元501用于查询平台中异构计算设备的设备信息,设备管理子单元502作为宿主程序的代理,获取异构计算平台上的异构设备信息。命令队列子单元503为每个设备创建命令队列。设备程序编译子单元504将设备程序文本编译成各个异构设备对应的可执行代码。设备任务分配子模块将数据分块装置405所分配的数据分块分配到命令队列从而进行任务分配。

数据分块单元405从数据存储设备400中读取基于ndrange进行组织的数据空间。对于一个宿主程序的相关数据,以ndrange中的work-group为最小单元,以一定数量的work-grouup作为分块大小进行数据分块,并生成每个数据分块的起始work-groupid和结束work-groupid。数据分块单元405将分块后的数据空间通过任务分配子模块将数据分块分配到各个异构设备的任务队列中。

性能反馈单元406统计每个计算任务的运行时间,从而使得数据分块单元405可以根据统计的运行时间调整数据分块的大小,平台设备管理单元404可以根据运行时间调整数据分块向异构设备分配的分配逻辑,从而实现对异构设备的负载均衡。

异构编程框架407是指异构编程runtime、编程语言规范和相关编译器工具链。异构编译框架中包含多个编译器,每一个不同isa的异构设备具有一个后端编译器。异构编译框架接收从异构调度模块所转发的设备命令,根据设备类型,对设备程序文本进行编译生成相应设备的二进制指令。

异构设备408、409、410为在本实施例中所列举的如中央处理器(centralprocessingunit,cpu)、图形处理器(graphicsprocessingunit)或数字信号(digitalsignalprocessing,dsp)处理器等类型的互为异构的处理器。异构计算设备有相互独立的指令集及编程模型,异构编程框架407中与异构设备408、409或410相对应的编译器将宿主程序的设备命令编译为异构设备可执行的设备代码。异构设备从命令队列中接受数据传输命令和kernel调用命令,执行具体的数据传输操作和编译后的设备代码。在一些实现方式中,异构设备运行时,共享内存设备。即内存设备为不同的异构设备提供虚拟地址,并具有缓存(cache)一致性,异构设备执行设备代码,从内存中读写数据。

基于本实施例所描述的逻辑架构,可以将一个任务的数据通过数据分块单元,以work-group为最小单元进行分块,并分发给不同的异构·设备的任务队列中,从而实现在异构计算平台下一个任务的并行执行,提高了任务的执行效率。

下面结合图6,描述一种本发明实施例中的异构计算调度方法,该方法可以在图3所对应的异构计算平台架构下实现,通过宿主机进行执行,从而调度多个异构计算设备。该方法在图4所对应的实施例中,可以以图4中所对应的模块来实现本实施例方法的功能。结合图4所对应实施例中的描述,可以理解本方法中的步骤在图4所对应实施例中的所执行的模块或者单元。但是,图4所列举的实施例中的模块和单元仅仅是逻辑性的划分,并不是本实施例在具体实现时的必然方式,本方法实施例在具体实现时,也可以采用其他的逻辑架构来实现相同之目的。本方法实施例具体步骤如下:

s601、查询异构平台信息,获取异构平台中的异构计算设备信息。

具体的,获取的异构计算设备信息可以包括异构计算设备的数量,每个异构计算设备的类型、处理能力和负载情况等信息。

s602、创建包含多个异构计算设备的上下文。

宿主程序要使得kernel程序运行在异构计算设备上,必须要有一个上下文来与异构设备设备进行交互。一个上下文就是一个抽象的容器,管理在设备上的内存对象,跟踪在设备上创建的程序和内核。

与现有技术中仅创建包含一个异构计算设备的上下文相比,本实施例中创建的上下文包含了多个异构计算设备。在一些实现方式中,所创建的上下文可以包括平台中的全部异构计算设备,从而使任务可以在所有异构计算设备中并行运行;在另一些实现方式中,所创建的上下文可以只包括部分异构计算设备,从而使得任务在这一部分异构计算设备中并行运行。

在具体的实现方式中,当创建包含多个异构设备的上下文时,一种方式时只创建一个包含有多个所要包含的异构设备的上下文,另一种方式是创建多个上下文。对于后一种方式,需要创建多个上下文,每个上下文可以包含一个或者多个异构设备,所创建的多个上下文共同包含了所要包含的多个异构设备。所创建的多个上下文之间具有相关性,即每个上下文为一个虚拟的运行环境,其共同构成了包含多个异构设备的具有相关性的上下文集合。

s603、为每个异构计算设备创建命令队列。

宿主程序使用命令队列向异构计算设备提交命令,一个异构计算设备有一个命令队列,且与上下文相关。命令队列对在异构计算设备上执行的命令进行调度。kernel程序的执行和提交给一个队列的内存命令会生成事件对象,这用来控制命令的执行、协调宿主机和异构计算设备的运行。

为每个异构计算设备分别创建命令队列,即为s602中上下文所包含的异构计算设备分别创建命令队列。与现有技术仅创建上下文中所包含的一个异构计算设备的命令队列相比,本实施例中创建了上下文中所包含的多个异构计算设备的命令队列。

s604、编译并启动每个异构计算设备的kernel程序。

kernel程序在异构计算设备上执行,用于处理程序数据。

在现有技术中,当一个kernel程序执行之前,需要指定一个ndrange,以使得kernel程序执行该ndrange中的程序数据。而在本实施例中,每个异构计算设备共享同一个虚拟内存空间,从而数据分块无论被放到任何一个异构计算设备上,均可以基于该数据分块的索引访问到该数据分块在内存中所对应的数据。因此,每个异构计算设备的kernel程序可以访问同一的虚拟内存地址空间。

s605、将任务数据进行分块。

为了将任务数据在多个异构计算设备上并行执行,需要将一个任务所对应的ndrange中的数据进行分块。ndrange中的每个work-item由一个全局id(globalid)和一个本地id(localid)进行标识,其中,globalid用于描述该work-item所在的work-group在ndrange中的位置,而localid用于描述该work-item在所在的work-group中的位置。一般而言,globalid和loclaid为一个多维坐标,维度有所在的ndrange的维度所确定。

示例性的,如图7,以一个二维的ndrange为例,在这个示例中,ndrange的大小为x×y。

在对任务数据分块时,需要保证分块后的work-item能够通过原始globalid和localid进行定位。数据分块的最小粒度为一个work-group,即个数据分块由至少一个work-group组成。由于localid指示work-item在work-group内部的位置,在work-group没有被划分的情况下,work-item在work-group中的位置没有发生变化,因此直接引用原始的localid即可定位分块后的work-item在work-group中的位置。对于globalid,提供了给每个work-group在其所在的数据分块中的每个维度在全局坐标上的相对于该分块中的起始位置work-group的偏移量offset,当数据进行分块后,该数据分块会携带这个初始的offset,通过这个offset,以及localid,可以对work-item所在的work-group进行定位。基于此,定位分块后的每一个work-item可以通过一个三元组表示为<offsetindex,globalsize,localsize>。其中,offsetindex是work-item所在的work-group在ndrange中每个维度上的偏移坐标,globalsize和localsize为该work-item原始的globalid和localid在每个维度上的坐标量。

每个数据分块的大小为n个work-group,其中n为大于等于1的整数。在一种实现方式中,每个数据分块的大小为固定的,即对于每个数据分块而言,n的值相同,且数据分块在每个维度上的work-group数量相同,则每个异构设备处理相同大小的数据分块。可以理解的,当每个数据分块的大小相同时,每个数据分块中每个维度上所包含的work-group的数量需要能够整除ndrange的该维度上的work-group数量。在另一种实现方式中,数据分块的大小可以不同,即对于每个数据分块而言,n可以取不同的值,或者n相同值,但是数据分块在每个维度上的work-group数量不完全相同。

在一种实现方式中,数据分块的大小大多数为相同的,例如,指定了固定大小的数据分块。但是,由于数据分块中有至少一个维度上所包含的work-group的数量需要能不够整除ndrange的该维度上的work-group数量,则该维度上会出现按照该大小进行分块无法将数据完全分块的情况。在这种情况下,则该维度上需要有至少一个该维度大小的总和为上述整除后的余数的数据分块。例如,在一个3维的ndrange中,3个维度上分别10个work-group,期望分配的数据分块大小为每个维度上3个work-group的数据分块,由于3不能整除10,则在每个维度上还需要至少1个该维度上大小为1个work-group的数据分块。一种实现方式为,该ndrange被分块为27个每个维度上3个work-group的数据分块;27个2个维度上有3个work-group,另1个维度上只有1work-group的数据分块;9个1个维度上有3个work-group,另2个维度上只有1work-group的数据分块;以及1个每个维度上都只有1个

在确定数据分块大小时,可以根据任务执行时的返回数据来确定。例如,确定数据块大小可以预先根据各异构设备的计算设备的计算能力(tflops)进行线性预估。从而确定不同异构设备的大致块大小比例。

s606、将分块后的数据块分发至多个异构计算设备上。

在s605中进行数据分块,实质上是确定每个work-item在进行数据分块后的用于定位的三元组<offsetindex,globalsize,localsize>。将分块后的数据块分发到异构设备上,即将分块后的数据块的坐标非配给不同的异构设备。异构设备基于数据分块的坐标,索引到给数据块在存储设备中的数据,并根据编译后的命令设备对数据进行处理,并将处理后的数据保存到存储设备中。

具体的,将分块后的数据块分配到异构设备的命令队列中

在进行数据分配时,一种实现方式中,可以通过轮询的方式,将数据块分别分配到每个异构计算设备中。在另一种实现方式中,可以根据不同异构计算的负载,将数据块优先分配到负载低,或者已经完成命令队列中的命令的异构计算设备。

当存在多个待运行任务时,由于本发明实施例可以将一个任务并行的在多个异构计算设备上执行,因此既可以串行的执行每个待运行任务,并将每个任务在多个异构计算设备上并行执行,也可以将可以并行的多个任务并行执行。当多个任务并行执行时,每个任务既可以由一个一个设备独立执行,也可以由多个异构计算设备并行执行。

当多个待运行任务直接存在依赖关系时,可以将不存在依赖关系的过个任务先并行执行,在执行完后再执行存在依赖关系的后一任务。为了提高执行效率,当多个在先任务并行执行时,可以通过调度所述任务的数据分块以及执行数据分块对应的命令的异构计算设备,从而每个任务的计算资源,使的在先任务能够尽量均衡的在接近的时刻完成计算,从而执行在后任务。例如,存在3个异构计算设备,待执行任务中有2个在先任务a、b和与任务a、b有依赖关系的在后任务c,其中,任务a的数据量大于任务b。按照现有技术的调度方式,则将a,b任务分别分配给一个异构计算设备并行执行,执行完毕后再执行任务c。由此,存在一个异构计算设备不能被利用,且由于任务a的数据量大于任务b,任务b执行完后,执行任务b的异构计算设备也未被利用,造成的计算资源的浪费。而在本实施例中,由于将任务a、b的数据进行分块,使得任务a和任务b分别都可以被多个计算设备并行执行,因此,一种可能的调度方式是任务a由两个计算设备并行执行,任务b由一个计算设备执行,且当任务b执行完毕后,执行任务b的计算设备可以计算执行任务a,直到a任务执行完毕,3个异构计算设备再并行执行任务c。或者,另一种调度方式为在进行数据分块时,将任务a与任务b分块为数量相同的数据块,从而任务a的每个数据块的数据量大于任务b的每个数据块,并将任务a和任务b的数据块按照数量平均的原则分配给3个异构计算设备并行执行,从而使得任务a和任务b能够在近似相同的时间内完成,并继续执行任务c。通过类似的调度方法计算资源得到了充分利用,提高了计算效率。

基于本实施例所提供的方法,可以将一个任务的数据通过数据分块单元,以work-group为最小单元进行分块,并分发给不同的异构设备的任务队列中,从而实现在异构计算平台下一个任务的并行执行,提高了任务的执行效率。

结合图8,是本发明给出的又一实施例,该实施例以opengl为例,描述本发明基于opengl平台实现单任务并行执行的实现方式。在本实施例中,为了尽量减少对gpengl框架的修改,提高本实施例的适用性,采用了应用程序编程接口钩子(applicationprogramminginterfacehook,apihook)的方式。如图9所示,通过替换opencl运行时的icd(installableclientdriver,可安装客户端驱动)镜像文件为本实施例中的异构调度软件镜像,再通过异构调度软件镜像来调度原icd镜像文件的方式,在不修改opencl原有框架的基础上,实现本发明实施例。但是,可以理解的,在本发明的其他实现方式中,也可以直接修改opencl的原有框架,例如修改原icd镜像文件从而直接实现本发明实施例的功能,这种实现方式可以直接参考前述实施例的方法描述,故在本实施例中不再赘述。

参考图8,在本实施例中,在宿主程序和icd镜像之间增加了异构调度软件镜像作为中间层,宿主程序原有对icd的操作被异构调度软件镜像获取,并向icd发送相应的操作。异构调度软件层的具体行为如下:

hook宿主程序的clgetplatformids或者clgetplatforminfo操作,调用icd的clgetplatformids或者clgetplatforminfo操作查询特定平台的id或者平台的信息,并根据配置返回特定的平台信息。

hook宿主程序的clgetdeviceids或者clgetdeviceinfo操作,调用icd对当前平台上的所有异构计算设备执行clgetdeviceids或者clgetdeviceinfo操作,从而获取所有异构计算设备的设备id和设备信息,保存所有异构设备的设备id和设备信息,并创建一个虚拟的异构计算设备id和设备信息结构返回给宿主程序,从而使得宿主程序通过该虚拟设备执行当前任务。在一些实现方式中,针对当前任务,若仅分配部分异构计算设备来并行执行该任务,则也可以在调用icd时只获取该部分异构计算设备的设备id和设备信息。

hook宿主程序的clcreatecontext操作,在保存的异构计算设备信息中,选择要用于当前任务并行计算的多个异构计算设备,并调用icd执行clcreatecontext操作,创建包含有该多个异构设备的共同上下文,具体创建方式可以参考前述s602步骤。在一些实现方式中,针对当前任务,若在调用icd时只获取部分异构计算设备的设备id和设备信息用于当前任务的并行计算,则这里也可以获取保存了id和设备信息的全部异构计算设备。

hook宿主程序的cdcreatecommandqueue操作,并调用icd对前述的每个要用于当前任务并行计算的多个异构计算设备执行clcreatecontext操作,从而为前述的每个异构计算设备创建命令队列。

hook宿主程序的clcreatprogam操作,直接原样调用clcreateprogramapi。

hook宿主程序的clbuildprogram操作,并调用icd对前述的每个要用于当前任务并行计算的多个异构计算设备执行clbuildprogram操作,从而为前述的每个异构计算设备创建单独的编译程序。

hook宿主程序的clcreatekernel操作,并调用icd对前述的每个要用于当前任务并行计算的多个异构计算设备执行clcreatekernel操作,从而为前述的每个异构计算设备创建kernel程序。

hook宿主程序的clenquendrange操作,将enquendrange操作对应的ndrange按work-group为粒度,划分为多个数据分块,划分方法可以参考前述s605中的描述。调用icd对前述的每个要用于当前任务并行计算的多个异构计算设备分别执行clenquendrange操作,该clenquendrange操作入队的数据为划分的一个数据分块,从而将该数据分块发送到该异构计算设备的命令队列上,使得每个异构计算设备对一个数据分块进行处理计算,多个异构计算设备能够对一个ndrange数据并行进行计算。在一些实现方式中,当查询到一个异构计算设备完成了命令队列中的全部数据,则继续想该异构计算设备分配数据分块知道全部数据分块均计算完毕。在另一些实现方式中,可以基于前述s606中的描述对多个任务进行调度。

参考图9,是本发明给出的一种前述方法实施例的装置实施例,该装置为前述图3所示架构下的一种异构计算设备,或者分布式异构计算平台中的异构计算调度节点。

本发明实施例以一种通用计算机系统环境作为示例来对装置进行说明。众所周知的,可适用于该装置还可以采用其他的异构计算硬件架构来实现类似的功能。包括并不限制于,个人计算机,服务计算机,多处理器系统,基于微处理器的系统,可编程消费电器,网路pc,小型计算机,大型计算机,包括任何上述系统或设备的分布式计算环境,等等。

装置900的元件可以包括,但并不限制于,处理单元920,系统存储器930,和系统总线910。系统总线将包括系统存储器的各种系统元件与处理单元920相耦合。系统总线910可以是几种类型总线结构中的任意一种总线,这些总线可以包括存储器总线或存储器控制器,外围总线,和使用一种总线结构的局部总线。总线结构可以包括工业标准结构(isa)总线,微通道结构(mca)总线,扩展isa(eisa)总线,视频电子标准协会(vesa)局域总线,以及外围器件互联(pci)总线。

当装置900为包含异构计算单元的异构计算设备时,处理单元920可以包含多种异构设备,例如异构设备408、409、410。包含前述本实施例中所列举的如中央处理器(centralprocessingunit,cpu)、图形处理器(graphicsprocessingunit)或数字信号(digitalsignalprocessing,dsp)处理器等类型的互为异构的处理器。其中,在一种实施方式中,中央处理器可用于执行前述实施例中的方法步骤,如图6所示方法或图8所示的方法步骤,从而对其他的异构处理器进行任务数据的分配和异构计算的调度。

装置900一般包括多种装置可读媒介。装置可读媒介可以是任何装置900可有效访问的媒介,并包括易失性或非易失性媒介,以及可拆卸或非拆卸的媒介。例如,但并不限制于,装置可读媒介可以包括装置存储媒介和通讯媒介。装置存储媒介包括易失性和非易失性,可拆卸和非拆卸媒介,这些媒介可以采用存储诸如装置可读指令,数据结构,程序模块或其他数据的信息的任何方法或技术来实现。装置存储媒介包括,但并不限制于,ram,rom,eeprom,闪存存储器或其他存储器技术,或者硬盘存储、固态硬盘存储、光盘存储,磁盘盒,磁盘存储或其它存储设备,或任何其它可以存储所要求信息和能够被装置900访问的媒介。通讯媒介一般包括嵌入的计算机可读指令,数据结构,程序模块或在模块化数据信号(例如,载波或其他传输机制)中的其他数据,并且还包括任何信息传递的媒介。术语“模块化数据信号”是指具有一个或多个信号特征组或采用对信号中的信息进行编码的方式来改变的信号。例如,但并不限制,通讯媒介包括诸如有线网络或直接有线连接的有线媒介,和诸如声,rf红外和其它无线媒介的无线媒介。上述任何组合也应该包括在装置可读媒介的范围内。

系统存储器930包括装置存储媒介,它可以是易失性和非易失性存储器,例如,只读存储器(rom)931和随即存取存储器(ram)932。基本输入/输出系统933(bios)一般存储于rom931中,包含着基本的例行程序,它有助于在装置910中各元件之间的信息传输。ram932一般包含着数据和/或程序模块,它可以被处理单元920即时访问和/或立即操作。例如,但并不限制于,图9说明了操作系统934,应用程序935,其他程序模块936和程序数据937。

装置900也可以包括其他可拆卸/非拆卸,易失性/非易失性的装置存储媒介。仅仅是一个实例,图9说明了硬盘存储器941,它可以是非拆卸和非易失性的可读写磁媒介;外部存储器951,它可以是可拆卸和非易失性的各类外部存储器,例如光盘、磁盘、闪存或者移动硬盘等;硬盘存储器91一般是通过非拆卸存储接口(例如,接口940)与系统总线910相连接,外部存储器一般通过可拆卸存储接口(例如,接口960)与系统总线910相连接。

上述所讨论的以及图9所示的驱动器和它相关的装置存储媒介提供了装置可读指令,数据结构,程序模块和装置900的其它数据的存储。例如,硬盘驱动器941说明了用于存储操作系统942,应用程序943,其它程序模块944以及程序数据945。值得注意的是,这些元件可以与操作系统934,应用程序935,其他程序模块936,以及程序数据937是相同的或者是不同的。

在本实施例中,前述实施例中的方法或者上一实施例中逻辑模块的功能可以通过存储在装置存储媒介中的代码或者可读指令,并由处理单元920读取所述的代码或者可读指令从而执行所述方法。

用户可以通过各类输入设备961装置900输入命令和信息。各种输入设备经常都是通过用户输入接口960与处理单元920相连接,用户输入接口960与系统总线相耦合,但也可以通过其他接口和总线结构相连接,例如,并行接口,或通用串行接口(usb)。显示设备990也可以通过接口(例如,视频接口990)与系统总线910相连接。此外,诸如计算设备900也可以包括各类外围输出设备920,输出设备可以通过输出接口980等来连接。

装置900可以在使用逻辑连接着一个或多个计算设备,例如,远程计算机970。远程计算节点包括装置,计算节点,服务器,路由器,网络pc,等同的设备或其它通用的网络结点,并且一般包括许多或所有与装置900有关的上述所讨论的元件。结合前述图1所描述的架构中,远程计算节点可以是从节点、计算节点或者其他装置。在图9中所说明的逻辑连接包括局域网(lan)和广域网(wan),也可以包括其它网络。通过逻辑连接,装置可以与其他节点实现本发明中与其他主题之间的交互。例如,可以通过与用户的逻辑链接进行任务信息和数据的传输,从而获取用户的待分配任务;通过和计算节点的逻辑链接进行资源数据的传输以及任务分配命令的传输,从而实现各个节点的资源信息的获取以及任务的分配。

在分布式的异构计算平台中,当装置900作为调度节点对任务数据进行分配时,装置900所连接的计算设备可以为异构计算设备,从而通过装置900的调度和任务数据分配来进行前述方法所述的异构计算。

本领域技术人员应该可以意识到,在上述示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1