用于异构计算应用编程接口(API)的系统和方法与流程

文档序号:11333702阅读:391来源:国知局
用于异构计算应用编程接口(API)的系统和方法与流程



背景技术:

本发明在其一些实施例中涉及异构计算,更具体而非唯一地,涉及用于异构计算应用编程接口(applicationprogramminginterface,api)的系统和方法。

包含多个不同处理器的异构计算系统可以通过专门的api进行编程。不同的供应商提供不同的api,每个api在语言语法和/或用于在处理器上执行的可用操作方面可能不同。单个供应商可以提供同一api的不同版本,用于在不同的处理硬件上执行。

每个api可能在执行模型、内存模型、语言语法和编译模型方面有所不同。例如,执行模型可以包括同步或非同步的队列。执行模型可以支持或不支持事件。内存模型可以是分布式的或本地的。传输可以是非透明的或透明的。可以支持或不支持映射和取消映射操作。存储功能可以基于指针或者基于一种不同的模型。api语言在语法和结构上可能不同。编译模型可以包括单独的在线和离线编译,或包括组合编译。

为异构计算系统编写程序较复杂,可能使程序员专注于使用单个api进行操作。单个api可能不提供所有必需的能力或行为,并且可能不支持各种版本的内核。因此,程序员可能需要修改api或使用其它api。

使用多个api进行编程的速度慢、易出错、价格昂贵且需要编程人员的高水平培训、知识和技能。寻求对异构系统的编程进行改进。



技术实现要素:

本发明的目的是改进应用编程接口的处理。

上述和其它目标通过独立权利要求的特征来实现。另外的实施方式从从属权利要求、描述内容和附图中显而易见。

根据第一方面,一种用于处理应用编程接口(applicationprogramminginterface,api)请求的装置包括:用于接收所述api请求的接口;以及处理单元,用于:识别具有不同指令集架构(instructionsetarchitectures,isa)的多个处理器;操作一组不同的api执行器模块;以及控制至少一个api执行器模块,以在所述处理器中的至少一个处理器上基于所述api请求来执行命令。

所述装置通过自动选择api执行器模块,而不是要求程序开发人员使用多个api进行操作,来消除来自人类程序开发人员的使用不同api对不同异构处理设备进行编程的负担。不同的api可以提供不同的功能,有时具有不同的语法,使得使用多个api进行编程很困难、容易出错并且耗时。所述装置允许程序员专注于使用单个统一环境(而不是多个不同的api)进行操作,然后所述装置将该单个统一环境映射到可用的api执行器模块。在单个统一框架内,程序员具有由不同的api提供的多种不同的能力或行为(例如,支持各种版本的内核)。

根据所述第一方面,在所述装置的第一可能实施形式中,每个api执行器模块包括以下组中的至少一个对象:存储对象、操作对象、队列对象,而所述至少一个对象用于预定义的isa;所述处理单元用于控制所述至少一个api执行器模块,以基于至少一个对象在所述至少一个处理器上执行所述命令。

所述装置自动分配不同的对象,在不同对象与api执行器模块之间进行映射,并通过api模块使用不同的较低级的api特定对象来对高级命令执行操作。

根据如上所述第一方面或根据所述第一方面的前述任一实施形式,在所述装置的第二可能实施形式中,所述装置包括统一层,所述统一层包括以下组中的至少一个统一对象:统一存储对象、统一操作对象、统一队列对象,而所述统一对象则用于所述api请求。

所述装置创建存储对象、操作对象和队列对象的较高抽象层。通过使用api的低级语言,所述装置自动向不同的低级api实现为程序员提供单一接口的高级操作对象(例如,排序、过滤、添加)。

根据所述第一方面的前述第一或第二实施形式,在所述装置的第三可能实施形式中,所述处理单元用于将一组操作命令中的一个操作命令与指示相应api请求的签名相关联。

签名表示提供了操作命令的抽象表示。签名表示可以由不同的低级api有区别地实现。

根据所述第一方面的前述第一、第二或第三实施形式中的任一实施形式,在所述装置的第四可能实施形式中,一组存储对象中的每个存储对象包括:公共部分,定义所述一组存储对象中的各个成员共有的公用值类型及公共函数;以及特定部分,唯一地定义至少一个特定值类型和至少一个api特定函数调用。

通用和特定部分提供的设计既统一了通用功能,又提供了api特定的低级定义。通用部分允许计算机程序执行抽象高级存储命令,而不需要低级实现细节。高级存储命令自动映射到低级命令,以在某个目标设备上执行。

根据所述第一方面的前述第一、第二、第三或第四实施形式中的任一实施形式,在所述装置的第五可能实施形式中,所述处理单元用于使用所述一组api执行器模块中的每一个的相应一组操作命令,基于多个统一执行存储对象与所述一组存储对象之间的关联以及多个统一执行操作命令与所述一组操作命令之间的关联,来执行多个子序列中的另一个。

从统一对象到本地api执行器模块对象的映射允许将高级抽象api请求选择性地映射到不同的低级api指令。

根据所述第一方面的前述第五实施形式,在所述装置的第六可能实施形式中,每个所述统一执行存储对象与所述一组不同的api执行器模块中的每一个的所述一组存储对象中的一个成员相关联,并且每个所述统一执行操作命令与所述一组不同的api执行器模块中的每一个的所述一组操作命令中的一个成员相关联。

根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第七可能实施形式中,所述处理单元用于:收集所述执行环境的运行时数据,以使用所述运行时数据将所述api执行器模块中的一个与所述多个处理器中的一个相关联。

通过添加或撤销与api执行器模块的关联,可以自动实现执行环境的更改,例如移除处理硬件或添加新的处理硬件。

根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第八可能实施形式中,所述处理单元用于:根据从命令响应时间、总体命令执行时间和功耗中选择的一个处理器特性,将所述api执行器模块中的一个与所述多个处理器中的一个相关联。

不同的api可以操作具有不同性能级别的处理器。通过考虑由匹配的api产生的处理器特性,api执行器模块被映射到处理器以提高系统性能。

根据如上所述第一方面或者根据所述第一方面的任一前述实施形式,在所述装置的第九可能实施形式中,所述处理单元用于将序列划分成多个队列;所述多个队列中的每一个由所述一组不同的api执行器模块中的一个不同的api执行器模块处理。

用于处理=各个队列的api执行器模块的选择提高了系统性能,因为不同的api执行器模块可以处理具有不同性能级别的不同队列。可以为每个队列选择性能最好的api执行器模块。

根据如上所述第一方面或者根据所述第一方面的任一前述实施形式,在所述装置的第十可能实施形式中,所述处理单元用于在所述应用的运行时初始化事件处创建所述一组不同的api执行器模块。

运行时初始化根据执行环境中可用的现有处理基础设施生成api执行器模块。api执行器模块根据可用处理器的变化而生成,变化是例如添加新处理器和/或移除处理器。初始化事件可能会触发新的执行器模块使用不同的处理器更有效地处理与计算机程序相关的变化。

根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述装置的第十一可能实施形式中,所述处理单元用于管理至少一个统一执行层队列中的序列。

所述装置自动划分序列,并为序列的不同部分指定和使用不同的api执行器模块,而不需要程序员划分序列。

在第十二可能实施形式中,提供了一种用于处理应用编程接口(applicationprogramminginterface,api)请求的方法,所述方法用于对根据如上所述第一方面或根据所述第一方面的任一前述实施形式的装置进行操作。

在第十三可能实施形式中,提供了一种计算机程序,所述计算机程序在计算机上执行时运行前述方法。

除非另外限定,否则本文所使用的所有技术术语和/或科学术语均具有本发明所涉及的本领域的普通技术人员共同理解的相同意思。虽然类似于或等同于本文所描述的那些方法和材料可以使用在本发明的实施例的实践中或测试中,但是下文描述了示例性方法和/或材料。在有冲突的情况下,以包括定义的专利说明书为准。此外,材料、方法和示例仅仅是示例性的,并不旨在有必要地进行限制。

附图说明

此处仅作为示例,结合附图描述了本发明的一些实施例。现在具体结合附图,需要强调的是所示的项目作为示例,为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。

在附图中:

图1是根据本发明一些实施例的处理api请求的方法的流程图;

图2是根据本发明一些实施例的包括处理api请求的装置的系统的组件框图;

图3a是根据本发明一些实施例的图2的装置内的附加可选模块和/或对象结构的框图;

图3b是根据本发明一些实施例的描绘存储操作绑定命令的传播的示意图;

图3c是根据本发明一些实施例的存储对象的结构的示意图;

图4是根据本发明一些实施例的用于识别执行环境中的处理器并根据所识别的处理器生成api执行器模块的方法的流程图;

图5是根据本发明一些实施例的用于映射api执行器模块支持的操作的方法的流程图;

图6是根据本发明一些实施例的描绘api请求从执行的计算机程序到用于在目标设备和/或处理器上执行的低级api指令的映射的示意图;以及

图7是描绘基于将接收的api请求映射到用于在执行环境中的目标设备上执行的低级api,的本文所述模块和/或对象之间的数据流的示意图,如本文所述。

具体实施方式

本发明在其一些实施例中涉及异构计算,更具体而唯一地,涉及用于异构计算应用编程接口(applicationprogramminginterface,api)的系统和方法。

本发明一些实施例的一个方面涉及一种装置,该装置管理用于统一与由不同的多个api(每个api控制一个不同的处理器)控制的多个不同处理器的通信的层。该装置自动接收程序的api请求序列,并将基于高级接口的高级程序(或其部分,诸如程序的分割部分)中的api请求的子序列映射到不同的低级api。每个相应的低级api操作一个或多个处理器以执行映射的程序(或其分割部分)。这样,高级程序在包括被组织为异构计算系统的多个不同处理器的执行环境中自动执行。高级程序不需要包括指定用于执行的特定低级api和/或特定处理器的低级指令。可以选择执行的api来提高用于执行程序的系统性能,因为不同的api和/或不同的处理器可以在不同的性能级别执行相同的程序。

可选地,装置控制一个或多个api执行器模块,以基于高级api请求(由程序或其部分发布)在一个或多个处理器上执行一个或多个低级命令,这些处理器可以可选地根据指令集架构(instructionsetarchitecture,isa)组织为不同设备。每个高级api请求可以被映射到一组多个低级api执行器模块中的一个。每个api执行器模块可选地基于公共isa来操作该组可用处理器中的某个处理器。可选地,处理器不相似,形成异构系统。

api请求是可由计算机程序提供、由一个或多个处理器执行、由一个或多个低级api操作的高级请求。装置自动指定用于执行api请求的特定api执行器模块。这样,程序可以使用高级api请求来编写,而不定义低级api执行器模块来操作异构执行环境的处理器,和/或不定义哪个处理器执行程序的哪个部分。装置可以选择api执行器模块以提高高级api请求的执行性能。

可选地,该组不同api执行器模块基于执行环境中的现有处理器,例如在检测到执行环境的处理器可用性发生变化的运行时期期间,由装置自动生成。根据isa的不同,可以为不同的处理器(单个或多个)生成不同的api执行器模块。

应注意的是,本文描述的装置可以实现为(硬件和/或软件中的)程序模块、系统、方法和/或计算机程序产品。

在详细说明本发明的至少一个实施例之前,应当理解,本发明在其应用中不一定限于以下描述所阐明的和/或在附图和/或示例中示出的组件和/或方法的构造和布置细节。本发明能够以通过它实施例实现或以各种方式实践或执行。

本发明可以是一种系统、一种方法和/或一种计算机程序产品。计算机程序产品可包括一种计算机可读存储介质,计算机可读存储介质具有在其上的计算机可读程序指令,用于使处理器执行本发明的各方面。

计算机可读存储介质可以为有形设备,有形设备可保留和存储指令以供指令执行设备使用。计算机可读存储介质可以为,例如但不限于电子存储设备、磁性存储设备、光学存储设备、电磁存储设备、半导体存储设备或前述设备的任意合适组合。

本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备或通过网络,例如互联网、局域网、广域网和/或无线网络,下载到外部计算机或外部存储设备。

计算机可读程序指令可作为独立软件包全部在用户的计算机上、部分在用户的计算机上执行,以及部分在用户的计算机上执行且部分在远程计算机上执行,或全部在远程计算机或服务器上执行。在后一种场景中,远程计算机可通过任意类型的网络连接到用户的计算机,这些类型的网络包括局域网(localareanetwork,lan)或广域网(wideareanetwork,wan),或者可以(例如使用互联网服务提供商通过互联网)连接到外部计算机。在一些实施例中,包括可编程逻辑电路、现场可编程门阵列(field-programmablegatearrays,fpga)或可编程逻辑阵列(programmablelogicarrays,pla)等的电子电路可通过使用计算机可读程序指令的状态信息以对电子电路进行个性化来执行计算机可读程序指令,以便执行本发明的各方面。

在本文中,本发明的各方面参考根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图进行描述。将理解,流程图图示和/或框图中的每个方框以及流程图图示和/或框图中的方框的组合可以通过计算机可读程序指令实现。

图中的流程图和框图示出了根据本发明各实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。在这一方面,流程图或框图中的每个方框可表示模块、片段或部分指令,该部分指令包括用于实现指定逻辑功能的一个或多个可执行指令。在一些替代性实施方式中,方框中提到的功能可不按照图中提到的顺序发生。例如,相继示出的两个方框事实上可基本上同时执行,或者这些方框有时可以以相反顺序执行,这取决于所涉及的功能。还应注意的是,框图和/或流程图图示的每个方框以及框图和/或流程图图示中的方框的组合可通过执行指定功能或动作的专用基于硬件的系统或者执行专用硬件和计算机指令组合来实现。

现在参考图1,图1是根据本发明一些实施例的用于控制api执行器模块以在一个或多个处理器上基于(可选地,计算机程序的)高级api请求执行命令的方法。还参考图2,图2是系统的组件框图,系统通过以下支持允许程序员以高级语言编写源代码而不考虑低级处理器实现:自动选择api执行器模块并将高级程序(其包括高级api请求)映射到所选择的api执行器模块以便由执行环境的处理器进行低级执行。权利要求1的方法可以由图2的装置和/或系统执行。

装置通过基于高级api请求自动选择api执行器模块,而不是要求程序开发人员使用多个api进行操作,来消除来自人类程序开发人员的使用不同api对不同异构处理设备进行编程的负担。不同的api可以提供不同的功能,有时具有不同的语法,使得直接使用多个api(与本文所描述的api请求相反)进行编程很困难、容易出错并且耗时。装置允许程序员使用高级api请求专注于使用单个统一环境(而不是多个不同的api)进行操作,然后装置将其映射到可用的api执行器模块。在单个统一框架内,程序员具有由不同的api提供的多种不同的能力或行为(例如,支持各种版本的内核)。

装置200包括接口202以接收api请求204。可以将api请求204作为高级程序206的源代码的一部分而包含,例如作为库,和/或作为集成在高级语言内的子程序。计算机程序可以是完整的计算机程序、计算机程序的一部分和/或单个算法。计算机程序可以是高级源代码格式、适合执行的低级代码格式或预编译代码。程序206可以在执行环境214内执行。

可选地,源代码以领域专用语言(domainspecificlanguage,dsl)编写。dsl可以提供比其它编程语言,例如低级编程语言和/或非专门设计来处理与dsl相同的域中的问题的编程语言,更高级别的数据类型抽象和/或抽象数据类型的更广泛使用。dsl可以是预先存在的可用dsl或定制开发的dsl。

装置200包括处理单元208,处理单元208操作一组不同的api执行器模块210a-c,如本文所述。处理单元208控制一个或多个api执行器模块210a-c以基于api请求在执行环境214的一个或多个处理器212a-c上执行命令,如本文所述。注意的是,执行器模块的数量和处理器的数量可以大于2,选择数量2是为了简单、清楚和说明的目的。

处理器210a-c可以是不同的,可选地,使用不同的isa来操作。处理器210a-c可以具有不同的架构设计,例如中央处理器(centralprocessingunit,cpu)、图形处理单元(graphicalprocessingunit,gpu)、用于与其它单元连接的处理器,和/或专用硬件加速器(例如,编码器、解码器和加密协同处理器)。在本文中,一个或多个处理器以及相关存储器有时称为设备。每个设备可以包括根据公共isa操作的多个处理器和关联存储器。本文所使用的术语处理器和设备有时可以互换。

每个api执行器模块被映射到一个处理器(或使用相同的isa进行操作的单组处理器或一个设备),如本文所述。每个api执行器模块特定于一种api类型。每个api执行器模块可以被映射到支持执行器模块的api类型的处理器。

现在参考图3a,图3a是根据本发明一些实施例的图2的装置200内的附加可选模块和/或对象结构的框图。附加模块为程序员编写程序提供统一接口,并根据统一对象与api执行器模块对象之间的映射将该统一接口映射到api执行器模块。统一执行层304和api执行器模块210a-c提供分层框架,用于在各种异构计算api上执行api请求的操作。对象提供高级抽象以将由计算机程序发出的api请求映射到低级api,以在执行环境的处理器内执行。

程序206,其包含可选地根据统一api302定义的api请求,由装置200的统一执行层304接收。统一层304包括一个或多个统一对象:统一存储对象306a、统一操作对象306b和统一队列对象306c。每个统一对象适应于api请求,如根据api请求所包括的命令生成,和/或与api请求相关联。

设备200的每个api执行器模块210a-c包括映射到统一执行层304的对应对象306a-c的以下对象308a-c中的一个或多个:存储对象308a、操作对象308b和队列对象308c。每个对象308a-c根据相应的api执行器模块210a-c来定义,例如根据与api执行器模块对应的api类型来包含低级指令。可选地,每个对象根据与api执行器模块对应的预定义isa进行调整,例如根据isa定义的操作来生成,和/或具有根据isa的低级定义。

在统一执行层和api执行器模块处的存储对象是目标执行环境中例如在每个设备(即,与一个或多个处理器相关联)内,可用的存储器的高级抽象。存储对象描述数据格式和类型,例如10000个浮点数向量,以及包含50x50个浮点数的矩阵。使用存储对象执行抽象存储器管理,例如,内存分配、存储器释放和无用信息收集。

在统一执行层和api执行器模块处的操作对象是在目标执行环境中,例如在每个设备内,运行的程序代码(即,api请求)的高级抽象。操作对象定义一个特定的函数,例如排序或卷积。抽象代码管理细节使用操作对象执行,例如编译、执行和优化。

在统一执行层和api执行器模块处的队列对象是目标执行环境,例如每个设备内,的操作调度的高级抽象。抽象操作执行使用队列对象执行,例如同步或异步执行、协调和依赖。

每个api执行器模块210a-c基于1:1映射来控制对应的设备312a-c。每个设备312a-c包括可选地使用公共isa操作的一个或多个处理器。例如,设备312a包括一个或多个cpu314a,设备312b包括一个或多个gpu314b,设备312c包括一个或多个现场可编程门阵列(fieldprogrammablegatearray,fpga)314c。设备312a-c组合形成异构执行环境。

装置200的处理单元208控制api执行器模块210a-c以在相应设备312a-c上执行(使用统一api302从程序206接收的)命令。使用设备312a-c的isa,通过相关api316a-c,例如供应商提供的api和/或定制的api来获得控制。基于由控制api执行器模块210a-c定义的对象308a-c来实现控制。

装置创建存储对象、操作对象和队列对象的较高抽象层。通过使用api的低级语言,装置自动向不同的低级api实现为程序员提供单一接口的高级操作对象(例如,排序、过滤、添加)。

装置自动分配不同的对象,在不同对象与api执行器模块之间进行映射,并通过api模块使用不同的较低级的api特定对象对高级命令执行操作。

对象被分配,在统一执行层和api执行器模块之间映射,并用于对数据执行操作,如本文所述。通常,具有n个设备和/或处理器的系统,统一执行层的每个统一对象被映射到指定的api执行器模块子集上的m<n个对应镜像对象。

可以通过api请求在统一执行层304处创建统一对象306a-c。在通过api请求和/或通过创建统一对象触发的相关api执行器模块处自动创建一组相应的对象。在所有可用的api执行器模块上自动创建队列对象。在支持所请求的操作的api执行器模块的每个子集上自动创建操作对象,例如,如参考图5所述。

现参考图3b,图3b是根据本发明一些实施例的描绘存储器操作绑定命令的传播的示意图。绑定命令从统一执行层304自动传播到支持该操作的api执行器210a和210b。

当收到绑定存储器api请求时,会创建存储对象。例如,绑定存储命令为:setmemoryobjectaasarg2ofoperationk。绑定存储命令包含将存储对象绑定到操作对象的指令。一个或多个存储对象306a在统一执行层304处自动生成,并根据绑定存储命令绑定到操作对象306b。

绑定命令从统一执行层304传播到支持绑定命令包含中的操作(通过箭头330a-b表示)的api执行器模块。在每个相关的api执行器模块上创建存储对象308a。传播绑定命令会自动在每个相关的api执行器模块(使用支持绑定命令的低级api进行操作)处执行存储器操作绑定。

现参考图3c,图3c是据本发明一些实施例的图3a的存储对象的数据结构的示意图。

统一存储对象306a存在于统一执行层304内,如参考图3a所论述。执行器存储对象318a对应于,例如,api执行器模块210a的存储对象。执行器存储对象318b对应于,例如,api执行器模块210b的存储对象。例如但是意在限制,api执行器模块210a操作api,api执行器模块210b操作opencltm(开放运算语言)api。

包含统一执行层存储对象和api执行器模块存储对象的一组存储对象中的每个存储对象包括公共部分320和特定部分322。公共部分320对于所有存储对象都相同,均位于统一执行层和每个api执行器模块处。特定部分322是针对每个存储对象在统一执行层和每个api执行器模块处定制的。通用和特定部分提供的设计既统一了通用功能,又提供了api特定的低级定义。

公共部分320定义了该组存储对象的各个存储对象成员共有的公共值类型和/或公共函数。

特定部分322在统一执行层和api执行器模块层处提供不同的功能。在统一执行层处,特定部分包括到每个api执行器模块的可用相关存储对象的映射,例如通过箭头324a和324b表示的指针阵列,箭头324a和324b将api执行器模块存储对象318a和318b映射到统一存储对象306a。在api执行器模块层处,特定部分包含api特定的附加数据。特定部分322唯一地定义特定值类型和/或api特定函数调用。

气球326a和326b描绘了内存分配命令的示例,内存分配命令在不同层处以及在不同的api执行器模块之间具有不同的实现方式。气球326a是统一存储对象306a的分配命令的示例实现方式,包含在每个api执行器模块的每个存储对象处调用低级内存分配指令列表的高级指令。气球326b是api执行器模块210a的存储器模块318a的分配命令的示例实现方式,包含在对应设备和/或处理器处执行内存分配命令的低级设备和/或api特定命令。

通过这种方式,公共部分允许计算机程序执行抽象高级存储命令(程序员可用),而不需要明确定义的低级实现细节。高级存储命令自动映射到低级命令,以在自动选定的目标设备上执行。

现返回图1,可选地,在102,可选地由处理单元208识别执行环境214中可用的处理器212a-c。所识别的处理器可选地不相似,具有不同的isa。使用公共isa控制的处理器可以组织在一起,例如组织在设备中。

可选地,在104,可选地由处理单元208创建一组不同的api执行器模块210a-c。每个api执行器模块210a-c可以包括一组操作命令,和/或一组用于处理器和/或设备之一的各自isa的存储对象。

可选地,在106,迭代方框102和块104。迭代生成新的api执行器模块、移除不相关的旧api执行器模块和/或更新现有api执行器模块。可以在初始化时、系统启动时、周期性地和/或当检测到执行环境发生变化时执行迭代。或者,或另外,在计算机程序的运行时初始化事件期间,例如根据输入的变化(例如,输入数据的不同类型和/或大小),和/或根据产生的结果的变化(例如计算结果的时间不可接受)来创建所述一组不同的api执行器模块。初始化事件可能会触发新的执行器模块使用不同的处理器更有效地处理与计算机程序相关的变化。运行时初始化根据执行环境中可用的现有处理基础设施生成api执行器模块。api执行器模块根据可用处理器的变化而生成,变化是例如添加新处理器和/或移除处理器。

可选地,处理单元208收集执行环境214的运行时数据。运行时数据可以用于将api执行器模块中的一个与处理器中的一个相关联,例如新关联、移除关联或改变现有关联。通过添加或撤销与api执行器模块的关联,可以自动实现执行环境的更改,例如移除处理硬件或添加新的处理硬件。

可选地,api执行器模块根据处理器特性,如命令响应时间、总体命令执行时间和功耗,与相应的处理器相关联。该关联可以提高处理器特性的性能。不同的api可以操作具有不同性能级别的处理器。通过考虑由匹配的api产生的处理器特性,api执行器模块被映射到处理器以提高系统性能。

现参考图4,图4是根据本发明一些实施例的用于识别执行环境中的处理器并根据所识别的处理器生成api执行器模块的方法的流程图。图4的方法可以由图2和/或图3的装置200执行,可选地由统一执行层304和/或处理单元208执行。

可选地,在402,从硬编码的列表等中检索、从文件加载、自动生成和/或手动提供装置200支持的api执行器类型。

在404,可选地通过由支持设备查找存储在装置200中或与装置200通信的模块,来扫描执行环境以识别处理器。处理器根据所支持的api执行器类型被识别为受支持的设备。所支持的设备可以存储在与装置200通信的受支持的设备储存库406中。

条目414是存储在存储库406内的识别出的受支持设备条目的示例。条目414可以包含公共部分和执行器特定部分。公共部分在高级别抽象地定义设备(例如,包括支持的api)。执行器特定部分定义设备的低级特征,以便由api执行器模块进行操作。

可选地,在408,所识别的设备被指定为可用于处理api请求。或者,例如使用分类器,或根据一组规则,如根据设备可用性、设备效率阈值、设备使用成本阈值或其它因素,指定所识别的设备的子集,例如以包括实际可用的设备和/或最适合的设备。

在410,为每个指定的设备自动创建api执行器模块。可以使用来自存储库406的设备信息来初始化api执行器模块。所生成的api执行器模块可以存储在执行器存储库412中。

现参考图5,图5是根据本发明一些实施例的用于映射api执行器模块支持的操作(此处也称为操作命令)的方法的流程图。图5的方法可以由图2和/或图3的装置200执行,可选地由统一执行层304和/或处理单元208执行。

可选地,在502,每个生成的api执行器模块包括一组操作存储(本文也称为操作命令集合),操作存储是例如从文件、从统一执行层304传递来的硬编码、从远程服务器和从手动生成的列表检索的。

该组操作命令对应于接收到的api请求。

可选地,在504,每个api执行器模块被并行或依次逐个地加载到装置200的存储器中。api执行器模块可以从执行器存储库506加载。

可选地,在508,每个api执行器模块并行或逐个地将其各自的操作存储加载到装置200的存储器中。可以从公共操作存储存储库510获取操作存储。

可选地,在512,每个api执行器模块的每个操作存储执行初始化过程以尝试初始化操作存储内的操作。初始化的示例包括:编译、资源分配和内存分配。成功初始化的和/或分配的操作被识别出。应注意的是,某些操作的初始化可能会失败(这些操作随后被排除可用),例如,内存不足、编译资源不可用或其它错误。

在514,一组成功初始化和/或分配的操作与相应的api执行器模块相关联,可选地存储在执行器操作存储库516中。

可选地,操作存储中的一组操作命令中的操作命令通过指示相应api请求的签名,可选地通过操作名称和/或操作参数,相关联和/或识别。签名表示提供了操作命令的抽象表示。不同的低级api可以有区别地实现相同的高级签名表示。api请求可以根据签名表示,例如使用由签名定义的语法中的(一组操作命令中的)操作命令编写的源代码,来定义。

为每个操作和/或每个api执行器模块迭代方框508-514。

在518,对每个api执行器模块的可用操作进行编译,例如组织和/或总结。处理单元208和/或统一执行层304可访问可用的操作,以决定如何将接收到的api请求映射到api执行器模块。

表520是存储每个api执行器类型的可用操作的数据结构的示例。列522列出了可用操作的签名。例如,api执行器模块a、b和c支持浮点数和整数的排序,而api执行器模块c和d支持整数的乘法运算。

现参考图6,图6是根据本发明一些实施例的描绘高级api请求从执行的计算机程序到用于在目标设备和/或处理器上执行的低级api指令的映射的示意图。

行602中的块描绘了应用发出的创建存储对象的api请求的映射。api请求映射到统一执行层处的统一存储对象,该存储对象映射到可用的api执行程序模块处的两个存储对象。每个api执行器模块使用不同的低级api来操作目标设备和/或处理器。

行604中的块描绘了创建队列的api请求的类似映射。

行606中的块描绘了创建操作指令的api请求的类似映射。值得注意的是,统一执行层处的统一操作对象映射到能够执行所请求的操作的api执行器模块,如与限定可用操作的低级命令的每个api执行器模块相关联的低级操作存储所定义。

现返回参考图1,在108,装置200的接口202接收一个或一系列api请求204。

api请求可以从在执行环境214中执行的计算机程序206(例如,应用)接收。可选地,处理单元208管理一个或多个统一执行层队列对象306c中的序列。序列可以包括放置在统一队列对象中的统一操作(来自可用的统一操作对象)。

可选地,处理单元208将接收到的序列划分为多个队列。或者,或另外,每个队列的结尾由api请求定义。

每一个队列可映射到一组生成的api执行器模块中的一个不同的api执行器模块并由该api执行器模块处理。可以根据支持序列中的操作命令的api执行器模块来执行映射。可以识别能够执行每个队列中的所有操作的api执行器模块(以便能够完成队列内的全套命令)。指定用于处理队列的api执行器模块可以可选地根据决策模块,例如分类器或一组规则,从所识别的集合(或从完整集合)中选择。决策模块可以例如根据设备上的对象可用性(例如,在存储器可用性和/或队列空间方面)、处理成本,运行时统计信息和/或其它度量来做出决定。

用于处理各个队列的api执行器模块的选择提高了系统性能,因为不同的api执行器模块可以处理具有不同性能级别的不同队列。可以为每个队列选择性能最好的api执行器模块。装置自动划分序列,并为序列的不同部分指定和使用不同的api执行器模块,而未必需要程序员划分序列。

在110,目标api执行器模块执行api请求序列的队列。api执行器模块将队列中的命令映射到基于低级api的指令中,这些指令在对应目标处理器上操作。从统一对象到本地api执行器模块对象的映射允许将高级抽象api请求选择性地映射到不同的低级api指令。

处理单元208使用一组指定的api执行器模块中的每一个的各组操作命令来执行各个子序列。如果适用,子序列可以并行地、依次按顺序地和/或不按顺序地执行。可选地,例如当子序列包括高级内存命令,根据统一执行层的统一执行存储对象与各个相应api执行器模块的一组存储对象之间的关联,来指导在各个相应的api执行器模块处执行各个子序列。或者或另外,例如当子序列包括高级操作命令时,根据统一执行层的统一执行操作命令与各个相应的api执行器模块的一组操作命令之间的关联来指导执行。绑定命令可以根据操作与存储对象之间传播的绑定来执行,如本文所述。

统一执行存储对象与该组不同的api执行器模块中的每一个的一组存储对象中的成员相关联。每个统一执行操作命令与该组不同的api执行器模块中的每一个的一组操作命令中的成员相关联。

所述一组指定的api执行器模块中的每一个的相应一组操作命令和/或一组存储对象用于指示不同处理器中的一个来执行api请求序列的每个子序列。api执行器模块以对应api的语法来生成低级命令,低级命令用于指示对应的处理器。

现参考图7,图7是描绘用于将接收的api请求的序列映射到用于指示执行环境中的目标设备上的执行的低级api的模块和/或对象之间的数据流的示例的示意图,如本文所述。

在702,在执行环境中执行的计算机程序(例如,应用程序)向统一执行层的一个或多个统一队列提供api请求序列。api请求包括根据子序列组织的一系列操作。每个子序列的结尾可以由应用定义,和/或由统一执行层自动定义。

在704,统一执行层可以将调度标记应用于统一队列中的操作以识别子序列。

如本文所述,每个子序列由统一执行层映射到api执行器模块之一。

如本文所述,将绑定到子序列中的操作的统一存储对象映射或复制到指定的api执行器模块的存储对象。

在706,将每个映射的子序列提供(例如,复制)给对应的指定api执行器模块的本地执行器队列。来自统一层的统一存储对象的数据可以被提供(例如,复制)给每个对应的指定api执行器模块的存储对象。

在708,指定的api执行器模块使用其关联的操作存储来执行执行器队列中的操作。api执行器模块可以调用操作存储,从而传递本地队列中的操作和任何已绑定的存储对象。

在710,存储在本地操作存储中的操作代码访问api运行时环境以执行相应设备上的代码。在设备上生成并执行低级api定义的指令。

对本发明各个实施例的描述只是为了说明的目的,而这些描述并不旨在穷举或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,本领域技术人员可以清楚理解许多修改和变化。相比于市场上可找到的技术,选择此处使用的术语可最好地解释本实施例的原理、实际应用或技术进步,或使本领域其他技术人员理解此处公开的实施例。

预期在从本申请开始走向成熟的专利的生命周期中,将会开发出许多相关处理器和应用编程接口,术语中间表示、处理器和api的范围旨在包括所有这类先验新技术。在从该应用成熟的专利期间,将开发许多相关处理器和应用编程接口,并且术语处理器和api的范围旨在将所有这些新技术包括在内。

本文所用的术语“约”是指±10%。

术语“包括”以及“有”表示“包括但不限于”。这个术语包括了术语“由……组成”以及“本质上由……组成”。

短语“基本上由……组成”是指构造或方法可包括额外的材料和/或步骤,但前提是额外的材料和/或步骤不会实质上改变所要求保护的构造或方法的基本和新颖特征。

除非上下文中另有明确说明,此处使用的单数形式“一个”和“所述”包括复数含义。例如,术语“一个复合物”或“至少一个复合物”可以包括多个复合物,包括其混合物。

此处使用的词“示例性的”表示“作为一个例子、示例或说明”。任何“示例性的”实施例并不一定理解为优先于或优越于其它实施例,和/或并不排除其它实施例特点的结合。

此处使用的词语“可选地”表示“在一些实施例中提供且在其它实施例中没有提供”。本发明的任意特定的实施例可以包括多个“可选的”特征,除非这些特征相互矛盾。

在整个本申请案中,本发明的各种实施例可以范围格式呈现。应理解,范围格式的描述仅为了方便和简洁起见,并且不应该被解释为对本发明范围的固定限制。因此,对范围的描述应被认为是已经具体地公开所有可能的子范围以及所述范围内的个别数值。例如,对例如从1到6的范围的描述应被认为是已经具体地公开子范围,例如从1到3、从1到4、从1到5、从2到4、从2到6、从3到6等,以及所述范围内的个别数字,例如1、2、3、4、5和6。不管范围的宽度如何,这都适用。

当此处指出一个数字范围时,表示包括了在指出的这个范围内的任意所列举的数字(分数或整数)。短语“在第一个所指示的数和第二个所指示的数范围内”以及“从第一个所指示的数到第二个所指示的数范围内”和在这里互换使用,表示包括第一个和第二个所指示的数以及二者之间所有的分数和整数。

单个实施例也可以提供某些特征的组合,这些特征在各个实施例正文中有简短的描述。相反地,本发明的各个特征在单个实施例的正文中有简短的描述,也可以分别提供这些特征或任何适合的子组合或者作为本发明所述的任何合适的其它实施例。不可认为各个实施例的正文中描述的某些特征是这些实施例的必要特征,除非没有这些元素,该实施例无效。

此处,本说明书中提及的所有出版物、专利和专利说明书都通过引用本说明书结合在本说明书中,同样,每个单独的出版物、专利或专利说明书也具体且单独地结合在此。此外,对本申请的任何参考的引用或识别不可当做是允许这样的参考在现有技术中优先于本发明。就使用节标题而言,不应该将节标题理解成必要的限定。

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