CN102985908A - 在计算平台中分布工作负荷 - Google Patents
在计算平台中分布工作负荷 Download PDFInfo
- Publication number
- CN102985908A CN102985908A CN2011800295040A CN201180029504A CN102985908A CN 102985908 A CN102985908 A CN 102985908A CN 2011800295040 A CN2011800295040 A CN 2011800295040A CN 201180029504 A CN201180029504 A CN 201180029504A CN 102985908 A CN102985908 A CN 102985908A
- Authority
- CN
- China
- Prior art keywords
- group
- processor
- instruction
- task
- territory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
Abstract
公开与在处理器之间分布工作负荷相关的技术。在一个实施例中,计算机系统包括第一处理器和第二处理器。所述第一处理器执行程序指令以接收指定第一组任务的第一组字节代码并确定是否要将所述第一组任务卸载到所述第二处理器。响应于确定要将所述第一组任务卸载到所述第二处理器,所述程序指令还可执行以促使生成用来执行所述第一组任务的一组指令,其中该组指令采用与所述第一组字节代码的格式不同的格式,并且其中所述第二处理器支持该格式。所述程序指令还可执行以通过促使将该组指令提供到所述第二处理器来促使所述第二处理器执行该组指令。
Description
技术领域
本发明公开涉及计算机处理器,更确切地来说,涉及在处理器之间分布工作负荷。
背景技术
为了提高计算性能,现代处理器实现多种技术来并发地执行任务。例如,常常对处理器实现管线化和/或多线程。许多处理器还包括多核以进一步提高性能。此外,可以将多个处理器与单个计算机系统包括在一起。可以将这些处理器的其中一些专用于各种任务,如图形处理器、数字信号处理器(DSP)等。
在所有这些不同资源之间分布工作负荷可能成问题,尤其是当资源具有不同接口(例如,具有用于第一处理器的第一格式的代码可能无法用于与第二处理器实现接口,因为第二处理器需要具有第二不同格式的代码)时。希望在此类异构计算平台内使用多种资源的开发者因此必须常常编写包含针对每种资源的特定支持的软件。因此,开发了若干“域相关的”(domain-specific)语言,以使程序员能够编写可帮助跨异构计算平台分布任务的软件。此类语言包括OPENCL、CUDA、DIRECT COMPUTE等。然而,使用这些语言可能是繁琐的。
发明内容
公开用于自动地在处理器之间分布工作负荷的多种实施例。在一个实施例中,一种计算机可读存储介质其上存储有程序指令,这些程序指令可在计算机系统的第一处理器上执行以便执行接收第一组字节代码,其中该第一组字节代码指定第一组任务。这些程序指令还可执行以执行响应于确定要将第一组任务卸载到计算机系统的第二处理器而促使用来执行第一组任务的一组指令的生成。该组指令采用与第一组字节代码的格式不同的格式,其中该格式被第二处理器支持。这些程序指令还可执行以执行促使该组指令被提供到第二处理器以供执行。
在一个实施例中,计算机可读存储介质包括源程序指令,这些源程序指令可被编译器编译以作为已编译源代码包含在已编译代码中。这些源程序指令包括对库例行程序的应用编程接口(API)调用,其中该API调用指定一组任务。该库例行程序可被编译器编译以便作为已编译库例行程序包括在已编译代码中。已编译源代码可被计算系统的第一处理器的虚拟机解释以将该组任务传递到已编译库例行程序。已编译库例行程序可被该虚拟机解释以响应于确定要将该组任务卸载到计算机系统的第二处理器而促使生成采用第二处理器的域相关语言格式的一组域相关指令,并促使该组域相关指令被提供到第二处理器。
在一个实施例中,计算机可读存储介质包括库例行程序的源程序指令,这些源程序指令可被编译器编译以作为已编译库例行程序包含在已编译代码中。该已编译库例行程序可在计算机系统的第一处理器上执行以执行接收第一组字节代码,其中该第一组字节代码指定一组任务。已编译库例行程序还可执行以执行响应于确定要将该组任务卸载到计算机系统的第二处理器而生成一组域相关指令来执行该组任务,并促使这些域相关指令被提供到第二处理器以供执行。
在一个实施例中,一种方法包括接收第一组指令,其中该第一组指令指定一组任务,并且其中接收由在计算机系统的第一处理器上执行的库例行程序来执行。该方法还包括库例行程序确定是否要将该组任务卸载到计算机系统的第二处理器。该方法还包括响应于确定要将该组任务卸载到第二处理器而促使生成用于执行第一组任务的第二组指令,其中该第二组指令采用与第一组指令的格式不同的格式,其中该格式被第二处理器支持,以及促使第二组指令被提供到第二处理器以供执行。
在一个实施例中,一种方法包括计算机系统接收指定一组任务的第一组字节代码。该方法还包括计算机系统响应于确定要将该组任务从计算机系统的第一处理器卸载到计算机系统的第二处理器而生成用于执行该组任务的一组域相关指令。该方法还包括计算机系统促使这些域相关指令被提供到第二处理器以供执行。
附图说明
图1是图示配置成将字节代码转换到域相关语言的异构计算平台的一个实施例的框图。
图2是图示可执行以运行可并行处理的指定任务的模块的一个实施例的框图。
图3是图示提供域相关语言支持的驱动程序的一个实施例的框图。
图4是图示可执行以并行地运行指定任务的模块的确定单元的一个实施例的框图。
图5是图示可执行以并行地运行指定任务的模块的优化单元的一个实施例的框图。
图6是图示可执行以并行地运行指定任务的模块的转换单元的一个实施例的框图。
图7是图示用于在计算平台中自动地部署工作负荷的方法的一个实施例的流程图。
图8是图示用于在计算平台中自动地部署工作负荷的方法的另一个实施例的流程图。
图9是图示程序指令的示范编译的一个实施例的框图。
图10是图示示范计算机系统的一个实施例的框图。
图11是图示示范计算机可读存储介质的实施例的框图。
具体实施方式
本说明书包括对“一个实施例”或“实施例”的引述。本说明书中出现的短语“在一个实施例中”或“在实施例中”不一定指同一实施例。可以与本发明公开一致的任何适合方式将特定的特征、结构或特性进行组合。
术语。以下段落提供本发明公开(包括权利要求书)中出现的术语的定义和/或语境。
“包括/包含”。此术语是开放性的。正如所附权利要求中所使用的,此术语不排除另外的结构或步骤。考虑权利要求,其列举:“一种装置,其包括一个或多个处理器单元…”此类权利要求不排除该装置包括另外的组件(例如,网络接口单元、图形电路等)。
“配置成”。可以将多种单元、电路或其他组件描述为或要求权利为“配置成”执行一个或多个任务。在此类语境中,“配置成”用于通过指示单元/电路/组件包括在操作期间执行这些一个或多个任务的结构(例如电路)来暗含结构。因此,即使指定的单元/电路/组件当前未工作(例如,未开启),仍可以说单元/电路/组件配置成执行该任务。与“配置成”语言一起使用的单元/电路/组件包括硬件–例如,电路、存储可执行以执行操作的程序指令的存储器等。列举单元/电路/组件“配置成”执行一个或多个任务显性地意味着不对该单元/电路/组件援用35U.S.C.§112,第六段。此外,“配置成”还可以包括由软件和/或固件(例如,FPGA或执行软件的通用处理器)操控以通过能够执行涉及的任务的方式工作的通用结构(例如,通用电路)。
“可执行”。正如本文所使用的,此术语不仅是指采用与特定和处理器关联的格式的指令(例如,对于该处理器的指令集体系结构(ISA)是可执行或可在从文件转换的存储器序列执行的文件格式,其中该转换是从一个平台到另一个平台而不将文件写入到另一个平台),而且还指采用能够被控制程序(例如,JAVA虚拟机)解释以产生用于该处理器的ISA的指令的中间(即,非源代码)格式。因此,术语“可执行”涵盖如本文使用的术语“可解释”。但是,当称处理器称“执行”或“运行”程序或指令时,此术语用于实际表示在ISA内执行一组指令的操作以生成任何相关结果(例如,发布、解码、执行和完成该组指令–该术语不限于例如处理器的管线的“执行”阶段)。
“异构计算平台”。此术语具有本领域中的常规且公认的含义,并且包括含不同类型的计算单元的系统,这些不同类型的通信单元诸如,通用处理器(GPP)、专用处理器(即,数字信号处理器(DSP)或图形处理单元(GPU))、协处理器或定制加速逻辑(专用集成电路(ASIC)、可现场编程门阵列(FPGA)等。
“字节代码”。正如本文所使用的,此术语广义地指已编译源代码的机器可读表示。在一些实例中,字节代码可以在不进行任何修改的情况下由处理器执行。在其他实例中,字节代码可以由如解释器(例如,JAVA虚拟机、PYTHON解释器等)的控制程序来处理以产生用于处理器的可执行指令。正如本文所使用的,“解释器”还可以指虽然未实际地将任何代码转换到底层平台,但是协同调度预写的函数,每个预写的函数相当于单个字节代码指令。
“虚拟机”。此术语具有本领域中常规和公认的含义,并且包括物理计算机系统的软件实现,其中虚拟机可执行以接收和执行用于该物理计算机系统的指令。
“域相关语言”。此术语具有本领域中常规和公认的含义,并且包括为特定应用设计的专用编程语言。相比而言,“通用编程语言”是为在多种应用中使用而设计的编程语言。域相关语言的示例包括SQL、VERILOG、OPENCL等。通用编程语言的示例包括C、JAVA、BASIC、PYTHON等。
“应用编程接口(API)”。此术语具有本领域中常规和公认的含义,并且包括使软件能够与其他软件交互的接口。程序可以执行API调用以使用应用、库例行程序、操作系统等的功能。
本发明公开认识到,在具有异构资源的计算平台的环境中使用域相关语言存在若干缺点。此类配置需要软件开发者精通多种编程语言。例如,为了与目前的JAVA技术互操作,开发者需要以OPENCL编写OPENCL“内核”(或方法),编写C/C++代码以协调此内核与JVM的执行,以及编写Java代码以使用Java的JNI(Java本地接口)API与此C/C++代码通信。(有开源纯Java绑定,这将允许避开C/C++步骤,但是其不是Java语言或SDK/JDK的部分。)因此,不太熟悉这些语言和接口的开发者可能不情愿制作此类软件。对于支持域相关语言的系统和不支持域相关语言的系统,需要开发不同版本的软件。相应地,不支持OPENCL的计算机系统可能无法运行部分使用OPENCL编写的程序。当源代码包含不同语言时,调试代码也更难。(调试软件一般针对特定编程语言。)虽然用户或许能够调试源代码的部分,但是调试软件可能略过域相关代码的部分。
相应地,本发明公开提供一种供开发者利用异构计算平台的资源而不会强制要求开发者使用常规情况下使用此类资源所必需的域相关语言的机制。在下文论述中,公开一种机制的实施例,其用于将字节代码(例如,从如JAVA、FLASH、CLR等受控运行时)转换到域相关语言(例如,OPENCL、CUDA等),以及用于在异构计算平台中自动地部署此类工作负荷。正如本文所使用的,术语“自动地”表示任务无需用户输入来执行。例如,正如下文将描述的,在一个实施例中,可以将一组指令传递到库例行程序,其中库例行程序可执行以自动地确定是否能够将该组指令卸载到另一个处理器。在此处,术语“自动地”表示库例行程序在被请求时执行此确定而无需用户提供指示该确定应该怎样的输入;而是,库例行程序执行以根据编码到库例行程序的一个或多个标准来作出确定。
现在转到图1,其中示出配置成将字节代码转换到域相关语言的异构计算平台10的一个实施例。如图所示,平台10包括存储器100、处理器110和处理器120。在图示的实施例中,存储器100包含字节代码102、任务运行器112、控制程序113、指令114、驱动程序116、操作系统(OS)117和指令122。在某些实施例中,处理器110配置成执行部件112-117(如虚线所示),而处理器120配置成执行指令122。在其他实施例中,可以以不同方式配置平台10。
在一个实施例中,存储器100配置成存储平台10可使用的信息。虽然存储器100示出为单个实体,但是在一些实施例中,存储器100可以对应于平台10内配置成存储如图1所示的那些不同部件的多个结构。在一个实施例中,存储器100可以包括主存储装置,如闪存存储器、随机存取存储器(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、只读存储器(PROM、EEPROM等)。在一个实施例中,存储器100可以包括辅助存储装置,如硬盘存储装置、软盘存储装置、移动盘存储装置等。在一个实施例中,存储器100可以包括处理器110和/或120的高速缓冲存储器。在一些实施例中,存储器100可以包括主存储器、辅助存储器和高速缓冲存储器的组合。在不同实施例中,存储器100可以包括比图1中所示更多(或更少)的部件。
在一个实施例中,处理器110是通用处理器。在一个实施例中,处理器110是用于平台10的中央处理单元(CPU)。在一个实施例中,处理器110是多线程超标量处理器。在一个实施例中,处理器110包括配置成彼此独立工作的多个多线程执行核。在一些实施例中,平台10可以包括与处理器110相似的附加处理器。简言之,处理器110可以表示任何适合的处理器。在一个实施例中,处理器120是配置成执行已从处理器110卸载的工作负荷(即,指令或任务的组)的协处理器。在一个实施例中,处理器120是专用处理器,如DSP、GPU等。在一个实施例中,处理器120是加速逻辑,如ASIC、FPGA等。在一些实施例中,处理器120是多线程超标量处理器。在一些实施例中,处理器120包括多个多线程执行核。
在一个实施例中,字节代码102是已编译源代码。在一个实施例中,字节代码102可以由通用编程语言(如BASIC、C/C++、FORTRAN、JAVA、PERL等)的编译器创建。在一个实施例中,字节代码102可直接由处理器110执行。即,字节代码102可以包含处理器110的指令集体系结构(ISA)内定义的指令。在另一个实施例中,字节代码102是可(例如由虚拟机)解释的,以产生可由处理器110执行的指令(或协调其调度)。在一个实施例中,字节代码102可以对应于整个可执行程序。在另一个实施例中,字节代码102可以对应于可执行程序的一部分。在不同实施例中,字节代码102可以对应于JAVA编译器javac为给定程序生成的多个JAVA.class文件之一。
在一个实施例中,字节代码102指定多个任务104A和104B(即,工作负荷)以实现并行化。正如下文将描述的,在不同实施例中,任务104可以在处理器110和/或处理器120上并发地执行。在一个实施例中,字节代码102通过调用与任务运行器112关联的应用编程接口(API)来指定任务104,其中该API使程序员能够以用于编写其余源代码所的相同格式(例如语言)表示数据并行问题(即,可通过并发地执行多个任务104来执行的问题)。例如,在一个特定实施例中,开发者通过扩充基类以将数据并行问题编码来编写指定多个任务104的JAVA源代码,其中基类在API内定义,并且字节代码102表示扩充类。然后,可以将扩充类的实例提供到任务运行器112以执行任务104。在一些实施例中,字节代码102可以指定不同组任务104以进行并行化(或考虑进行并行化)。
在一个实施例中,任务运行器112是可执行以确定是否要将字节代码102指定的任务104卸载到处理器120的模块。在一个实施例中,字节代码102可以将(指定任务的)指令集合传递到任务运行器112,任务运行器112从而可以确定是否要将指定的指令集合卸载到处理器120。任务运行器112可以基于多种标准来作出其确定。例如,在一个实施例中,任务运行器112可以至少部分地基于驱动程序116是否支持特定的域相关语言来确定是否要卸载任务。在一个实施例中,如果任务运行器112确定要将任务104卸载到处理器120,则任务运行器112通过以域相关语言生成表示任务104的一组指令来促使处理器120执行任务104。(正如本文所使用的,“域相关指令”是以域相关语言编写的指令)。在一个实施例中,任务运行器112通过使用.class文件中包含的与字节代码102对应的元数据将字节代码102转换到域相关指令来生成该组指令。在其他实施例中,如果原始源代码仍可用(例如,正如BASIC/JAVA/PERL等的可能情况),则任务运行器112可以执行原始源代码至域相关指令的文本转换。在图示的实施例中,任务运行器112将这些生成的指令提供到驱动程序116,驱动程序116又生成供处理器120执行的指令122。在一个实施例中,任务运行器112可以从驱动程序116接收任务104的一组对应结果,其中这些结果以域相关语言所使用的格式表示。在一些实施例中,在处理器120计算了一组任务104的结果之后,任务运行器112可执行以将这些结果从域相关语言格式转换成指令114可使用的格式。例如,在一个实施例中,任务运行器112可以将一组结果从OPENCL数据类型转换到JAVA数据类型。任务运行器112可以支持各种域相关语言中的任一种,如OPENCL、CUDA、DIRECT COMPUTE等。在一个实施例中,如果任务运行器112确定不卸载任务104,则处理器110执行任务104。在不同实施例中,任务运行器112可以通过为处理器110生成(或促使生成)可执行以执行任务104的指令114来促使任务104的执行。在一些实施例中,任务运行器112可执行以优化字节代码102,以便在处理器110上并行地执行任务104。在一些实施例中,任务运行器112还可以处理原有代码。例如,在一个实施例中,如果字节代码102是原有代码,则任务运行器112可以促使将原有代码执行的任务卸载到处理器120或可以优化原有代码以供在处理器110上执行。
在多种实施例中,任务运行器112可执行以确定是否要卸载任务104,生成一组域相关指令和/或在运行时(在即包含字节代码102的程序正在被平台10执行时)优化字节代码102。在其他实施例中,任务运行器112可以在运行时之前确定是否要卸载任务104。例如,在一些实施例中,任务运行器112可以为包含字节代码102的程序的后续执行预处理字节代码102。在一个实施例中,任务运行器112是可直接由处理器110执行的程序。即,存储器100可以包含在处理器110的ISA内定义的任务运行器112的指令。在另一个实施例中,存储器100可以包含可由控制程序113解释以产生可由处理器110执行的指令的任务运行器112的字节代码。下文结合图2和图4-6描述任务运行器。
在一个实施例中,控制程序113可执行以管理任务运行器112和/或字节代码102的执行。在一些实施例中,控制程序113可以管理任务运行器112与平台10中的其他部件(例如驱动程序116和OS 117)的交互。在一个实施例中,控制程序113是配置成从字节代码(例如,字节代码102和/或任务运行器112的字节代码)产生可由处理器110执行的指令(例如,指令114)的解释器。例如,在一些实施例中,如果任务运行器112确定要在处理器110上执行一组任务,则任务运行器112可以将字节代码102的部分提供到控制程序113以产生指令114。控制程序113可以支持各种解释的语言中的任一种,如BASIC、JAVA、PERL、RUBY等。在一个实施例中,控制程序113可执行以实现虚拟机,该虚拟机配置成实现物理机器的一个或多个属性并执行字节代码。在一些实施例中,控制程序113可以包括垃圾收集器,垃圾收集器用于回收不再使用的存储器位置。控制程序113可以对应于各种虚拟机中的任一种,包括SUN公司的JAVA虚拟机、ADOBE公司的AVM2、MICROSOFT公司的CLR等。在一些实施例中,平台10中可以不包括控制程序113。
在一个实施例中,指令114表示可由处理器110执行以执行任务104的指令。在一个实施例中,由解释字节代码102的控制程序113产生指令114。正如上文所提到的,在一个实施例中,指令可以由与控制程序113协同工作的任务运行器112来产生。在另一个实施例中,在字节代码102内包含指令114。在不同实施例中,指令114可以包括可执行以处理从已卸载到处理器120来执行的任务104已产生的结果的指令。例如,指令114可以包括依赖于任务104中的各种任务的结果的指令。在一些实施例中,指令114可以包括从字节代码102生成的附加指令,其不与特定任务104关联。在一些实施例中,指令114可以包括从任务运行器112的字节代码生成的指令(或包括来自任务运行器112的指令)。
在一个实施例中,驱动程序116可执行以管理处理器120与平台10内的其他部件之间的交互。驱动程序116可以对应于各种驱动程序中的任一种,如图形卡驱动程序、声卡驱动程序、DSP卡驱动程序、其他类型的外设驱动程序等。在一个实施例中,驱动程序116为处理器120提供域相关语言支持。即,驱动程序116可以接收一组域相关指令并生成可由处理器120执行的一组对应的指令122。例如,在一个实施例中,驱动程序116可以将用于一组给定任务104的OPENCL指令转换成处理器120的ISA指令,并将这些ISA指令提供到处理器120以促使该组任务104的执行。当然,驱动程序116可以支持各种域相关语言中的任一种。下文结合图3进一步描述驱动程序116。
在一个实施例中,OS 117可执行以管理平台10上程序的执行。OS 117可以对应于各种已知操作系统中的任一种,如LINUX、WINDOWS、OSX、SOLARIS等。在一些实施例中,OS 117可以是分布式操作系统的一部分。在多种实施例中,OS可以包括多种驱动程序以协调平台10上的软件与平台10的一个或多个硬件组件的交互。在一个实施例中,将驱动程序116集成在OS117内。在其他实施例中,驱动程序116不是OS 117的组件。
在一个实施例中,指令122表示可由处理器120执行以执行任务104的指令。正如上文所提到的,在一个实施例中,由驱动程序116生成指令122。在另一个实施例中,可以用不同方式(例如由任务运行器112、控制程序113等)生成指令122。在一个实施例中,在处理器120的ISA内定义指令122。在另一个实施例中,指令122可以是处理器120用于生成可由处理器120执行的一组对应指令的命令。
在多种实施例中,平台10提供一种使程序员能够开发使用平台10的多个资源(例如处理器110和120)的软件的机制。在一些实例中,程序员可以使用一种通用语言(例如,JAVA)编写软件而不必了解特定域相关语言(例如,OPENCL)。因为可以使用相同的语言编写软件,所以支持该语言的调试器(例如通过ECLIPSE IDE调试JAVA的GNU调试器)能够调试包括进行API调用以执行任务104的部分的整个软件。在一些实例中,可以为多个平台编写一个版本的软件,而不考虑这些平台是否提供对特定域相关语言的支持,因为在多种实施例中,任务运行器112可执行以确定是否要在运行时卸载任务,并且能够确定在给定的平台10上是否存在这种支持。例如,如果平台10无法卸载任务104,则任务运行器112仍可以能够优化开发者的软件,使得它执行得更有效率。实际上,在一些实例中,任务运行器112在优化软件以实现并行化时比开发者尝试自己优化软件更好。
现在转到图2,其中示出任务运行器软件模块112的一个实施例的表示。正如所提到的,任务运行器112是可执行以接收一组指令(例如指定到处理器110的那些指令)和确定是否要将这些指令卸载(即,重新指定)到不同的处理器(例如处理器120)的代码(或存储此类代码的存储器)。如图所示,任务运行器112包括确定单元210、优化单元220和转换单元230。在一个实施例中,控制程序113(图2未示出)是虚拟机,任务运行器112在该虚拟机中执行。例如,在一个实施例中,控制程序113对应于JAVA虚拟机,其中任务运行器112是已解释的JAVA字节代码。在其他实施例中,处理器110可以不使用控制程序113而执行任务运行器112。
在一个实施例中,确定单元210表示可执行以确定是否要将任务104卸载到处理器120的程序指令。在图示的实施例中,任务运行器210包括在确定单元210中响应于接收到字节代码102(或字节代码102的至少一部分)而执行指令。在一个实施例中,任务运行器210响应于接收到包含字节代码102的JAVA.class文件而启动确定单元210中指令的执行。
在一个实施例中,确定单元210可以包含可执行以基于与平台10的特性关联的一组一个或多个初始标准和/或对字节代码102的初始分析来确定是否要卸载任务的指令。在多种实施例中,此类确定是自动的。在一个实施例中,确定单元210可以执行以至少部分地基于平台10是否支持域相关语言来作出初始确定。如果不存在支持,则在多种实施例中,确定单元210可以不执行任何进一步的分析。在一些实施例中,确定单元210至少部分地基于字节代码102是否引用无法以域相关语言表示的数据类型或调用无法以域相关语言表示的方法来确定是否要卸载任务104。例如,特定域相关语言可能不支持IEEE双精度数据类型。因此,确定单元210可以确定不卸载包括双精度的JAVA工作负荷。相似地,JAVA支持String数据类型(实际为类)的概念,不同于大多数类,它被JAVA虚拟机所理解,但是在OPENCL中没有此类表示。因此,在一个实施例中,确定单元210可以确定引用此类String数据类型的JAVA工作负荷不被卸载。在其他实施例中,确定单元210可以执行进一步分析以确定String的使用是否“可映射”到其他OPENCL可表示的类型–例如是否可以移除String引用并以其他代码表示替代此类引用。在一个实施例中,如果满足一组初始标准,则任务运行器112可以启动在转换单元230中指令的执行以将字节代码102转换成域相关指令。
在一个实施例中,在转换单元230执行的同时,确定单元210继续执行基于另外一组标准确定是否要卸载任务104。例如,在一个实施例中,确定单元210至少部分地基于字节代码102是否被确定为具有导致无限循环的执行路径来确定是否要卸载任务104。在一个实施例中,确定单元210至少部分地基于字节代码102是否试图执行如使用递归的非法动作来确定是否要卸载任务104。
此外,确定单元210还可以执行以至少部分地基于一组任务104的一个或多个先前执行来确定是否要卸载任务104。例如,在一个实施例中,确定单元210可以存储有关针对多组任务104的先前确定的信息,如是否成功卸载过一组特定任务104的指示。在一些实施例中,确定单元210至少部分地基于任务运行器112是否存储用于该组任务104的一组先前生成的域相关指令来确定是否要卸载任务104。在多种实施例中,确定单元210可以收集有关字节代码102的一个部分的先前迭代(例如其中如在循环中那样,字节代码102的该部分多次指定一组相同的任务104)的信息。或者,确定单元210可以收集有关由执行在程序的不同部分中多次包括字节代码102的程序所产生的先前执行的信息。在一个实施例中,确定单元210可以收集有关任务104的先前执行的效率的信息。例如,在一些实施例中,任务运行器112可以促使任务104被处理器110和被处理器120执行。如果确定单元210确定处理器110执行该组任务比处理器120更有效率(例如,使用更少的时间),则确定单元210可以确定不卸载任务104的后续执行。或者,如果确定单元210确定处理器120在执行该组任务时更有效率,则单元210可以例如缓存卸载该组任务的后续执行的指示。
下文结合图4进一步描述确定单元210。
在一个实施例中,优化单元220表示可执行以为任务104在处理器110上的执行来优化字节代码102的程序指令。在一个实施例中,一旦确定单元210确定不卸载任务104,则任务运行器112可以启动优化单元220的执行。在多种实施例中,优化单元220分析字节代码102以识别字节代码102中可被修改以改善并行化的部分。在一个实施例中,如果识别出此类部分,则优化单元220可以修改字节代码102以为任务104添加线程池支持。在其他实施例中,优化单元220可以使用其他技术来提高任务104的性能。一旦修改了字节代码102的部分,则在一些实施例中,优化单元220将修改的字节代码102提供到控制程序113以解释成指令114。下文结合图5进一步描述字节代码102的优化。
在一个实施例中,转换单元230表示可执行以为任务104在处理器120上的执行来生成一组域相关指令的程序指令。在一个实施例中,任务运行器112的执行可以包括:一旦确定单元210确定对于卸载任务104已满足一组初始标准,则启动转换单元230的执行。在图示的实施例中,转换单元230将一组域相关指令提供到驱动程序116以促使处理器120执行任务104。在一个实施例中,转换单元230可以从驱动程序116接收任务104的一组对应结果,其中这些结果以域相关语言的格式表示。在一些实施例中,转换单元230将这些结果从域相关语言的格式转换成指令114可使用的格式。例如,在一个实施例中,在任务运行器112已从驱动程序116接收到一组计算的结果之后,任务运行器112可以将一组结果从OPENCL数据类型转换成JAVA数据类型。在一个实施例中,任务运行器112(例如,转换单元230)可执行以存储一组已生成的域相关指令以用于任务104的后续执行。在一些实施例中,转换单元230通过将字节代码102转换到中间表示并且然后由中间表示生成一组域相关指令来生成该组域相关指令。下文结合图6进一步描述将字节代码102转换到域相关语言。
注意,单元210、220和230是示范性的;在任务运行器112的多种实施例中,可以通过不同方式将指令分组。
现在参考图3,示出驱动程序116的一个实施例。如图所示,驱动程序116包括域相关语言单元310。在图示的实施例中,将驱动程序116集成在OS 117内。在其他实施例中,驱动程序116可以与OS 117分开来实现。在一个实施例中,域相关语言单元310可执行以提供对域相关语言的驱动程序支持。在一个实施例中,单元310从转换单元230接收一组域相关指令,并产生一组对应的指令122。在多种实施例中,单元310可以支持如上文所述的各种域相关语言中的任一种。在一个实施例中,单元310产生处理器120的ISA内定义的指令122。在另一个实施例中,单元310产生促使处理器120执行任务104的非ISA指令-例如,处理器120可以使用指令122来生成可由处理器120执行的一组对应指令。
一旦处理器120执行一组任务104,则在一个实施例中,域相关语言单元310接收一组结果,并将这些结果转换成域相关语言的数据类型。例如,在一个实施例中,单元310可以将接收到的结果转换成OPENCL数据类型。在图示的实施例中,单元310将转换的结果提供到转换单元230,转换单元230又可以将这些结果从域相关语言的数据类型转换成指令114支持的数据类型(例如,JAVA数据类型)。
现在转到图4,其中示出确定单元210的一个实施例。在图示的实施例中,确定单元210包括用于对接收到的字节代码102执行多种测试的多个单元410-460。在其他实施例中,确定单元210可以包括额外的单元、更少的单元或与所示那些单元不同的单元。在一些实施例中,确定单元210可以并行地执行多种所示的测试。在一个实施例中,确定单元210可以在由字节代码102生成域相关指令期间的不同阶段测试各种标准。
在一个实施例中,支持检测单元410表示可执行以确定平台10是否支持域相关语言的程序指令。在一个实施例中,单元410基于从OS 117(例如系统寄存器)接收的信息确定存在支持。在另一个实施例中,单元410基于从驱动程序116接收的信息确定存在支持。在其他实施例中,单元410基于来自其他源的信息确定存在支持。在一个实施例中,如果单元410确定不存在支持,则确定单元210可以得出不能将任务104卸载到处理器120的结论。
在一个实施例中,数据类型映射确定单元420表示可执行以确定字节代码102是否引用无法以目标域相关语言(即驱动程序116支持的域相关语言)表示的任何数据类型的程序指令。例如,在一个实施例中,如果字节代码102是JAVA字节代码,则如int、float、double、byte或此类元素的数组的数据类型可以具有在OPENCL中的对应数据类型。在一个实施例中,如果单元420确定字节代码102引用无法以用于一组任务104的目标域相关语言表示的数据类型,则确定单元210可以确定不卸载该组任务104。
在一个实施例中,函数映射确定单元430表示可执行以确定字节代码102是否调用目标域相关语言不支持的任何函数(例如,例行程序/方法)的程序指令。例如,如果字节代码102是JAVA字节代码,则单元430可以确定该JAVA字节代码是否调用在OPENCL中没有等效方式的JAVA专有函数(例如,System.out.println)。在一个实施例中,如果单元430确定字节代码102为一组任务104调用不支持的函数,则确定单元210可以确定要中止卸载该组任务104。另一方面,如果字节代码的代码102仅调用在目标域相关语言中支持的那些函数(例如,与OPENCL的sqrt()函数兼容的JAVA的Math.sqrt()函数),则确定单元210可以允许卸载继续。]
在一个实施例中,成本转移确定单元440表示可执行以确定一组任务104的集合大小(即,并行任务的数量)是否低于预定阈值(指示卸载的成本不可能是成本有效的)的程序指令。在一个实施例中,如果单元440确定集合大小低于阈值,则确定单元210可以确定要中止卸载该组任务104。单元440可以执行多种其他检查以将卸载的预期获益与预期成本比较。
在一个实施例中,非法特征检测单元450表示可执行以确定字节代码102是否在使用在语法上可接受但却为非法的特征的程序指令。例如,在多种实施例中,驱动程序116可以支持禁止方法/函数使用递归的OPENCL版本(例如,该版本无法表示递归所需的堆栈帧)。在一个实施例中,如果单元450确定JAVA代码可以执行递归,则确定单元210可以确定不部署该JAVA代码,因为部署可能会导致意想不到的运行时错误。在一个实施例中,如果单元450检测到用于一组任务104的此类使用,则确定单元210可以确定要中止卸载。
在一个实施例中,无限循环检测单元460表示可执行以确定字节代码102是否具有可能无限地循环(即导致无限/无穷循环)的任何执行路径的程序指令。在一个实施例中,如果单元460检测到与一组任务104关联的任何此类路径,则确定单元210可以确定要中止卸载该组任务104。
如上文提到的,确定单元210可以在字节代码102的转换过程期间的不同阶段测试多种标准。如果对于一组任务在任何点处这些测试之一未通过,则在不同实施例中,确定单元210可以即刻确定要中止卸载。通过以此方式测试标准,在一些实例中,确定单元210可以快速地达成确定以在将大量资源花费在字节代码102的转换上之前中止卸载。
现在转到图5,其中示出优化单元220的一个实施例。在一个实施例中,任务运行器112可以响应于确定单元210确定要中止一组任务104的卸载而启动优化单元220的执行。在另一个实施例中,任务运行器112可以例如在确定单元210已确定是否要中止卸载之前启动优化单元220与转换单元230的协同执行。在图示的实施例中,优化单元220包括优化确定单元510和线程池修改单元520。在一些实施例中,优化单元220包括用于使用其他技术优化字节代码102的附加单元。
在一个实施例中,优化确定单元510表示可执行以识别字节代码102中可被修改以改善任务104被处理器110的执行的部分的程序指令。在一个实施例中,单元510可以识别字节代码102中包含对与任务运行器112关联的API的调用的部分。在一个实施例中,单元510可以识别字节代码102中的特定结构元素(例如,循环),以便进行并行化。在一个实施例中,单元510可以通过分析由转换单元230生成的字节代码102的中间表示来识别这些部分(如下文结合图6所述)。在一个实施例中,如果单元510确定字节代码102的这些部分可修改以改善一组任务104的性能,则优化单元210可以启动线程池修改单元520的执行。如果单元510确定字节代码102的这些部分无法通过预定义机制改善,则在一个实施例中,单元510将这些部分提供到控制程序113而不进行任何修改,由此促使控制程序113产生对应的指令114。
在一个实施例中,线程池修改单元520表示可执行以添加对创建处理器110用于执行任务104的线程池的支持的程序指令。例如,在多种实施例中,单元520可以假定没有可能卸载而在准备在原目标平台(例如处理器110)上执行数据并行工作负荷时修改字节代码102。由此,通过使用任务运行器112和提供程序员可扩充的基类,程序员能够声明代码要被并行化(例如,以有效率的数据并行方式执行)。在JAVA环境中,这意味着任务运行器112的缺省JAVA实现可以通过协调代码的执行来使用线程池而不变换代码。如果代码是可卸载的,则假定该代码所卸载到的平台协调并行执行。正如本文所使用的,“线程池”是包含用于执行的多个线程的队列。在一个实施例中,为一组给定的任务中的每个任务104创建线程。当使用线程池时,处理器(例如,处理器110)在资源变得可供用于执行这些线程时从该池移除线程。一旦线程完成执行,则在一些实施例中,将线程执行的结果置于对应的队列中,直到可以使用该结果为止。
考虑字节代码102指定一组2000个任务104的情况。在一个实施例中,单元520可以对字节代码102添加支持,以使它可执行以创建包含2000个线程的线程池(每个任务104对应于一个线程)。在一个实施例中,如果处理器110是四核处理器,则每个核可以执行任务104中的500个任务。如果每个核一次能够执行4个线程,则能够并发执行16个线程。相应地,处理器110能够比在顺序地执行任务104的情况下显著更快地执行一组任务104。
现在转到图6,其中示出转换单元230的一个实施例。正如上文所提到的,在一个实施例中,任务运行器112可以响应于确定单元210确定已满足用于卸载一组任务104的一组初始标准而启动转换单元230的执行。在另一个实施例中,任务运行器112可以启动转换单元230与优化单元220的协同执行。在图示的实施例中,转换单元230包括具化单元610、域相关语言生成单元620和结果转换单元630。在其他实施例中,转换单元230可以通过不同方式配置。
在一个实施例中,具化单元610表示可执行以将字节代码102具化并产生字节代码102的中间表示的程序指令。正如本文所使用的,具化是指解码字节代码102以抽象其中包含的信息的过程。在一个实施例中,单元610开始于解析字节代码102以识别在执行期间使用的常量。在一些实施例中,单元610通过解析JAVA.class文件的constant_pool部分以查找如整数、Unicode、字符串等的常量来识别字节代码102中的常量。在一些实施例中,单元610还解析.class文件的属性部分以重构可用于产生字节代码102的中间表示的属性信息。在一个实施例中,单元610还解析字节代码102以识别字节代码使用的任何方法。在一些实施例中,单元610通过解析JAVA.class文件的方法部分来识别方法。在一个实施例中,一旦单元610已确定有关常量、属性和/或方法的信息,则单元610可以开始将字节代码102中的指令解码。在一些实施例中,单元610可以通过从解码的指令和解析的信息构造表达式树来产生中间表示。在一个实施例中,在单元610完成将信息添加到表达式树之后,单元610识别字节代码102中的更高级别结构,如循环、嵌套的if语句等。在一个实施例中,单元610可以识别已知将由字节代码102读取的特定变量或数组。有关具化的附加信息可以参见Cristina Cifuentes所著的“A Structuring Algorithm for Decompilation(1993)”。
在一个实施例中,域相关语言生成单元620表示可执行以根据具化单元610生成的中间表示生成域相关指令的程序指令。在一个实施例中,单元620可以生成包含具化单元610在字节代码102中识别的对应常量、属性或方法的域相关指令。在一些实施例中,单元620可以生成具有对应于字节代码102中的那些结构的更高级别结构的域相关指令。在多种实施例中,单元620可以基于由具化单元610收集的其他信息生成域相关指令。在一些实施例中,如果具化单元610识别出已知将由字节代码102读取的特定变量或数组,则单元620可以生成域相关指令以将这些数组/值置于“只读”存储中或将这些数组/值标记为只读,以便允许代码优化。相似地,单元620可以生成域相关指令以将值标为WRITE_ONLY或READ_WRITE。
在一个实施例中,结果转换单元630表示可执行以将任务104的结果从域相关语言的格式转换到字节代码102支持的格式的程序指令。例如,在一个实施例中,单元630可以将结果(例如,整型数、布尔量、浮点数等)从OPENCL数据类型格式转换到JAVA数据类型格式。在一些实施例中,单元630通过复制数据将结果转换到解释器(例如控制程序113)所支持的数据结构表示。在一些实施例中,单元630可以将数据从大端(big-endian)表示更改为小端(little-endian)表示。在一个实施例中,任务运行器112预留一组存储器位置以存储由一组任务104的执行生成的该组结果。在一些实施例中,任务运行器112可以在域相关语言生成单元620将域相关指令提供到驱动程序116之前预留该组存储器位置。在一个实施例中,在处理器120正在产生该组任务104的结果时,单元630防止控制程序113的垃圾收集器重新分配这些存储器位置。以此方式,当从驱动程序116接收到结果时,单元630能够将这些结果存储在这些存储器位置中。
接下来,提供采用上文描述的单元的功能的多种方法。
现在转到图7,其中示出用于在计算平台中自动地部署工作负荷的方法700的一个实施例。在一个实施例中,平台10执行方法700以将程序(例如,字节代码102)指定的工作负荷(例如,任务104)卸载到协处理器(例如,处理器120)。在一些实施例中,平台10通过(例如在处理器110上)执行解释(例如,任务运行器112的)字节代码的控制程序(例如,控制程序113)所生成的程序指令来执行方法700。在图示的实施例中,方法700包括步骤710-750。在其他实施例中,方法700可以包括额外(或更少)的步骤。可以至少部分地并发执行步骤710-750中的各步骤。
在步骤710中,平台10接收使用通用语言开发的且包含数据并行问题的程序(例如,对应于字节代码102或包括字节代码102)。在一些实施例中,该程序可以是使用API以JAVA开发的,且该API允许开发者通过扩充在API内定义的基类来表示数据并行问题。在其他实施例中,该程序可以使用不同语言来开发,例如上文描述的各种语言。在其他实施例中,可以使用其他技术来表示数据并行问题。在一个实施例中,该程序可以是可解释的字节代码(例如由控制程序113解释的字节代码)。在另一个实施例中,该程序可以是不可解释的可执行字节代码。
在步骤720中,平台10(例如使用确定单元210)分析该程序以确定是否要将一个或多个工作负荷(例如,任务104)卸载到例如协处理器(如处理器120)(术语“协处理器“用于表示执行方法800的处理器以外的处理器)。在一个实施例中,平台10可以分析该程序的JAVA.class文件以确定是否要执行卸载。平台10的确定可以是上文描述的标准的各种组合。在一个实施例中,平台10基于一组初始标准来作出初始确定。在一些实施例中,如果满足初始标准中的每个标准,则方法700可以进行到步骤730和740。在一个实施例中,平台10可以在步骤730和740正在执行时,继续基于各种附加标准来确定是否要卸载工作负荷。在多种实施例中,平台10的分析可以基于针对先前卸载的工作负荷的缓存的信息。
在步骤730中,平台10(例如使用转换单元230)将该程序转换到中间表示。在一个实施例中,平台10通过解析该程序的JAVA.class文件以识别该程序所使用的常量、属性和/或方法来转换该程序。在一些实施例中,平台10将该程序中的指令解码以识别该程序中的更高级别结构,如循环、嵌套的if语句等。在一些实施例中,平台10创建表达式树以表示通过具化该程序所收集的信息。在多种实施例中,平台10可以使用上文描述的各种技术中的任一种。在一些实施例中,可以分析此中间表示以进一步确定是否要卸载工作负荷。
在步骤740中,平台10(例如使用转换单元230)将该中间表示转换到域相关语言。在一个实施例中,平台10基于在步骤730中收集的信息来生成域相关指令(例如,OPENCL)指令。在一些实施例中,平台10根据在步骤730中构造的表达式树来生成域相关指令。在一个实施例中,平台10将这些域相关指令提供到协处理器的驱动程序(例如处理器120的驱动程序116)以促使协处理器执行卸载的工作负荷。
在步骤750中,平台10(例如使用转换单元230)将卸载的工作负荷的结果转换回该程序支持的数据类型。在一个实施例中,平台10将这些结果从OPENCL数据类型转换回JAVA数据类型。一旦转换了结果,则可以执行该程序中使用所转换的结果的指令。在一个实施例中,平台10可以在将域相关指令提供到协处理器的驱动程序之前分配存储器位置以存储结果。在一些实施例中,平台10可以在协处理器正在产生结果时,防止这些位置被控制程序的垃圾收集器回收。
注意,对于接收到的不同程序可以多次执行方法700。如果再次接收到相同的程序(例如,一组指令),则还可以重复方法700。如果两次接收到相同的程序,则可以省略步骤710-750中的各步骤。如上文所提到的,在一些实施例中,平台10可以缓存有关先前卸载的工作负荷的信息,如在步骤720-740期间生成的信息。如果再次接收到程序,则在一个实施例中,平台10可以在步骤720中执行快速确定,如确定先前是否成功卸载工作负荷。在一些实施例中,平台10然后可以使用先前缓存的域相关指令而不执行步骤730-740。在再次接收到一组相同的指令的一些实施例中,仍可以按与上文所述相似的方式来执行步骤750。
如果程序指定应使用不同输入多次执行一组工作负荷,则也可以重复方法700的各步骤。在此类实例中,步骤730-740可以被省略,并可以使用先前缓存的域相关指令。在多种实施例中,仍可以执行步骤750。
现在转到图8,其中示出用于在计算平台中自动地部署工作负荷的方法的另一个实施例。在一个实施例中,平台10执行任务运行器112以执行方法800。在一些实施例中,平台10通过执行控制程序113在运行时解释任务运行器112的字节代码时其(控制程序113)所产生的指令来在处理器110上执行任务运行器112。在图示的实施例中,方法800包括步骤810-840。在其他实施例中,方法800可以包括额外(或更少)的步骤。可以并发地执行步骤810-840中的各步骤。
在步骤810中,任务运行器112接收指定一组任务(例如任务104)的一组字节代码(例如,字节代码102)。正如上文所提到的,在一个实施例中,字节代码102可以包含对与任务运行器112关联的API的调用以指定任务104。例如,在一个特定实施例中,开发者通过扩充在API内定义的基类来编写指定多个任务104的JAVA源代码,其中字节代码102表示扩充的类。然后,可以将扩充的类的实例提供到任务运行器112以执行任务104。在一些实施例中,步骤810可以采用与上文描述的步骤710相似的方式来执行。
在步骤820中,任务运行器112确定是否要将该组任务卸载到协处理器(例如,处理器120)。在一个实施例中,任务运行器112可以(例如使用确定单元210)分析该程序的JAVA.class文件以确定是否要卸载任务104。在一个实施例中,任务运行器112可以基于一组初始标准来作出初始确定。在一些实施例中,如果满足初始标准中的每个标准,则方法800可以进行到步骤830。在一个实施例中,平台10可以在步骤830正在执行时,继续基于各种附加标准来确定是否要卸载工作负荷。在多种实施例中,任务运行器112的分析还可以至少部分地基于针对先前卸载的任务104的缓存信息。任务运行器112的确定可以基于上文描述的各标准中的任何一个。在一些实施例中,步骤820可以采用与上文描述的步骤720相似的方式来执行。
在步骤830中,任务运行器112促使生成用来执行该组任务的一组指令。在一个实施例中,任务运行器112通过生成具有域相关语言格式的一组域相关指令并将该组域相关指令提供到驱动程序116以生成采用不同的格式的该组指令来促使该组指令的生成。例如,在一个实施例中,任务运行器112可以生成一组OPENCL指令并将这些指令提供到驱动程序116。在一个实施例中,驱动程序116又可以生成用于协处理器的一组指令(例如,在该协处理器的ISA内的指令)。在一个实施例中,任务运行器112可以通过将该组字节代码具化以产生该组字节代码的中间表示并转换该中间表示以产生该组域相关指令来生成该组域相关指令。
在步骤840中,任务运行器112通过促使将该组指令提供到协处理器来促使协处理器执行该组指令。在一个实施例中,任务运行器112可以通过向驱动程序116提供该组生成的域相关指令来促使将该组指令提供到协处理器。一旦协处理器执行了通过驱动程序116提供的该组指令,则在一个实施例中,该协处理器可以向驱动程序116提供执行该组指令的结果。在一个实施例中,任务运行器112将这些结果转换回字节代码102支持的数据类型。在一个实施例中,任务运行器112将这些结果从OPENCL数据类型转换回JAVA数据类型。在一些实施例中,任务运行器112可以防止垃圾收集器回收用于存储所生成的结果的存储器位置。一旦转换了结果,则可以执行该程序中使用所转换的结果的指令。
与方法700的情况一样,对于接收到的不同程序的字节代码可以多次执行方法800。如果再次接收到相同的程序或同一程序包含相同字节代码的多个实例,则还可以重复方法800。如果两次接收到相同的字节代码,则可以省略步骤810-840中的各步骤。如上文所提到的,在一些实施例中,任务运行器112可以缓存有关先前卸载的任务104的信息,如在步骤820-840期间生成的信息。如果再次接收到字节代码,则在一个实施例中,任务运行器112可以在步骤820中执行快速确定以卸载任务104。然后,任务运行器112可以使用先前缓存的域相关指令执行步骤840而不执行步骤830。
注意,在其他实施例中,可以采用不同方式来执行方法800。在一个实施例中,任务运行器112可以接收指定一组任务的一组字节代码(如在步骤810那样)。然后,任务运行器112可以响应于确定要将该组任务卸载到协处理器而促使生成用来执行该组任务的一组指令(如在步骤830中那样),其中该确定可以由任务运行器112以外的软件来执行。然后,任务运行器112可以促使将该组指令提供到协处理器以供执行(如在步骤840中那样)。由此,在一些实施例中,方法800可以不包括步骤820。
现在转到图9,其中示出程序指令的示范编译900的一个实施例。在图示的实施例中,编译器930编译源代码910和库920以产生程序940。在其他实施例中,编译900可以包括编译附加的源代码段和/或库源代码段。在一些实施例中,可以根据正在使用的程序语言以不同方式执行编译900。
在一个实施例中,源代码910是开发者为执行数据并行问题而编写的源代码。在图示的实施例中,源代码910包括为指定一组或多组任务以便进行并行化而对库920的一个或多个API调用912。在一个实施例中,API调用912指定在库920内定义的API基类922的扩充的类914以表示数据并行问题。源代码910可以采用各种语言中的任一种来编写,如上文描述的那些语言。
在一个实施例中,库920是用于任务运行器112的API库,其包含API基类922和任务运行器源代码924。(注意,任务运行器源代码924在本文中可以称为“库例行程序”)。在一个实施例中,API基类922包括可与源代码910一起编译以产生字节代码942的库源代码。在多种实施例中,API基类922可以定义可被源代码910使用的一个或多个变量和/或一个或多个函数。如上文所提到的,在一些实施例中,API基类922是可被开发者扩充以产生一个或多个扩充的类914来表示数据并行问题的类。在一个实施例中,任务运行器源代码924是可编译以产生任务运行器字节代码944的源代码。在一些实施例中,任务运行器字节代码944对于一组给定字节代码942可以是唯一的。在另一个实施例中,任务运行器字节代码944可以与独立于任务运行器字节代码944而被编译的多组不同字节代码942一起使用。
正如上文所提到的,在一个实施例中,编译器930可执行以编译源代码910和库920以产生程序940。在一个实施例中,编译器930产生要被处理器(例如处理器110)执行的程序指令。在另一个实施例中,编译器产生在运行时要被解释以生成可执行指令的程序指令。在一个实施例中,源代码910指定要与源代码910一起编译的库(例如,库920)。然后,编译器930可以检索这些库的库源代码,并将其与源代码910一起编译。编译器930可以支持如上文所述的各种语言中的任一种。
在一个实施例中,程序940是可被平台10执行(或可被在平台10上执行的控制程序113解释)的已编译程序。在图示的实施例中,程序940包括字节代码942和任务运行器字节代码944。例如,在一个实施例中,程序940可以对应于包括字节代码942和字节代码944的相应.class文件的JAVA.jar文件。在其他实施例中,字节代码942和字节代码944可以对应于单独的程序940。在多种实施例中,字节代码942对应于上文描述的字节代码102。(注意,字节代码944在本文中可以称为“已编译库例行程序”)。正如参考图11将描述的,可以将元素910-940中的各元素或元素910-940中的元素的部分包括在计算机可读存储介质上。
下文提供可以被使用库920来产生程序940的编译器930编译的可能的源代码的一个示例。在此示例中,利用一组随机值将浮点数组(values[])初始化。然后,处理该数组以对该数组中的给定元素确定相同数组中多少个其他元素落在预定义窗口(例如,+/-2.0)内。然后,将这些确定的结果存储在对应的整型数组(counts[])内的相应位置中。
为了初始化数组(values[])中values中的值,可以运行如下代码:
在传统方式下,可以使用如下代码序列解决上文的问题:
根据本发明公开,在一个实施例中现在可以使用如下代码解决上文的问题:
此代码扩充覆盖例行程序run()的基类“Task”。即,该基类可以包括方法/函数run(),并且扩充的类可以为一组任务104指定run()的优选实现。在多种实施例中,为任务运行器112提供此扩充的类的字节代码(例如,与字节代码102一样),以用于实现自动转换和部署。在多种实施例中,如果转换并部署(即,卸载)了方法Task.run(),则可以不执行方法Task.run(),而是(例如由处理器120)执行Task.run()的已转换/部署版本。但是,如果未转换和部署Task.run(),则可以(例如由处理器110)执行Task.run()。
在一个实施例中,执行如下代码以创建任务运行器112的实例以执行上文指定的任务。注意,术语“TaskRunner”对应于任务运行器112。
TaskRunner taskRunner=new TaskRunner(task);
taskRunner.execute(size,16);
第一行创建任务运行器112的实例,并向任务运行器112提供扩充的基类“task”的实例作为输入。
在一个实施例中,在执行任务运行器112时,任务运行器112可以产生如下OPENCL指令:
如上所述,在一些实施例中,可以将此代码提供到驱动程序116以生成用于处理器120的一组指令。
示范计算机系统
现在转到图10,其中示出可以实现平台10的示范计算机系统1000的一个实施例。计算机系统1000包括处理器子系统1080,处理器子系统1080经由互连1060(例如,系统总线)耦合到系统存储器1020和I/O接口1040。I/O接口1040耦合到一个或多个I/O设备1050。计算机系统1000可以是各种类型的设备中的任一种,包括但不限于,服务器系统、个人计算机系统、桌面型计算机、膝上型或笔记本计算机、主机计算机系统、手持计算机、工作站、网络计算机、如移动电话、传呼机或个人数字助理(PDA)的消费设备。计算机系统1000还可以是任何类型的联网的外设,如存储设备、交换机、调制解调器、路由器等。虽然出于方便原因,图10中示出一个计算机系统1000,但是系统1000还可以作为一起工作的两个或更多个计算机系统来实现。
处理器子系统1080可以包括一个或多个处理器或处理单元。例如,处理器子系统1080可以包括耦合到一个或多个资源控制处理部件1020的一个或多个处理部件。在计算机系统1000的多种实施例中,可以将处理器子系统1080的多个实例耦合到互连1060。在多种实施例中,处理器子系统1080(或1080内的每个处理器单元)可以包含高速缓存或其他形式的板载存储器。在一个实施例中,处理器子系统1080可以包括上文描述的处理器110和处理器120。
系统存储器1020可以被处理器子系统1080使用。系统存储器1020可以使用不同物理存储介质来实现,如硬盘存储装置、软盘存储装置、移动盘存储装置、闪存存储器、随机存取存储器(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、只读存储器(PROM、EEPROM等)等。计算机系统1000中的存储器不限于如存储器1020的主存储装置。计算机系统1000还可以包括其他形式的存储装置,如处理器子系统1080中的高速缓冲存储器和I/O设备1050上的辅助存储装置(例如,硬盘驱动器、存储装置阵列等)。在一些实施例中,这些其他形式的存储装置还可以存储处理器子系统1080可执行的程序指令。在一些实施例中,上文描述的存储器100可以包括系统存储器1020(或包含在其中)。
根据多种实施例,I/O接口1040可以是配置成耦合到其他设备并与之通信的各种类型的接口中的任一种。在一个实施例中,I/O接口1040是从前端到一个或多个后端总线的桥芯片(例如,南桥)。I/O接口1040可以经由一个或多个对应总线或其他接口耦合到一个或多个I/O设备1050。I/O设备的实例包括存储设备(硬盘驱动器、光盘驱动器、移动闪存装置、存储阵列、SAN或其关联的控制器)、网络接口设备(例如到局域网或广域网)或其他设备(例如,图形设备、用户接口设备等)。在一个实施例中,计算机系统1000经由网络接口设备连接到网络。
示范计算机可读存储介质
现在转到图11,其中示出示范计算机可读存储介质1110-1140的实施例。计算机可读存储介质1100-1140是存储平台10可执行的(或在平台10上执行的控制程序113可解释的)指令的制造品的实施例。如图所示,计算机可读存储介质1110包含任务运行器字节代码944。计算机可读存储介质1120包含程序940。计算机可读存储介质1130包含源代码910。计算机可读存储介质1140包含库920。图11不是旨在限制可根据平台10使用的可能的计算机可读存储介质的范围,而是为了图示此类介质的示范内容。简言之,计算机可读介质可以存储用来执行本文描述的操作的各种程序指令和/或数据中的任一种。
计算机可读存储介质1110-1140指存储在执行期间使用的程序指令和/或数据的各种有形(即,非瞬时性)介质中的任一种。在一个实施例中,计算机存储可读介质1100-1140中的介质可以包括存储器子系统1710的各部分。在其他实施例中,计算机可读存储介质1100-1140中的介质可以包括外设存储设备1020的存储介质,如磁介质(例如磁盘)或光学介质(例如,CD、DVD和相关技术等)。计算机可读存储介质1110--1140可以是易失性或非易失性存储器。例如,计算机可读存储介质1110-1140中的介质可以是(无限制地)FB-DIMM、DDR/DDR2/DDR3/DDR4 SDRAM、闪存和各种类型的ROM等。注意:正如本文所使用的,计算机可读存储介质不用于仅表示如载波的瞬时性介质,而是指如上文枚举的那些的某种非瞬时性介质。
虽然上文描述了特定实施例,但是这些实施例不是旨在限制本发明公开的范围,即使针对特定特征仅描述了一个实施例。除非另行声明,否则本发明公开提供的特征的示例应理解为说明性的,而非限制性的。正如从本发明公开获益的本领域技术人员应显见到的,上文描述应涵盖此类替代、修改和等效物。
本发明公开的范围包含本文公开的任何特征或多个特征的组合(无论显性还是隐含的)或其任何推广,无论它是否缓解了本文涉及的问题的任何一个或全部。相应地,可以在本申请(或对其要求优先权的申请)提交审查期间可以提出对特征的任何此类组合的新权利要求。具体来说,参考权利要求书,可以将从属权利要求中的特征与独立权利要求的特征组合,以及可以将相应的独立权利要求中的特征以任何适合的方式且不仅是权利要求书中枚举的特定组合中来进行组合。
Claims (22)
1.一种计算机可读存储介质,其上存储有程序指令,所述程序指令可在计算机系统的第一处理器上执行以执行如下操作:
接收第一组字节代码,其中所述第一组字节代码指定第一组任务;
响应于确定要将所述第一组任务卸载到所述计算机系统的第二处理器,促使生成用来执行所述第一组任务的一组指令,其中所述一组指令采用与所述第一组字节代码的格式不同的格式,其中所述第二处理器支持所述格式;以及
促使将所述一组指令提供到所述第二处理器以供执行。
2.如权利要求1所述的计算机可读存储介质,其中所述程序指令可被所述第一处理器上的控制程序解释以产生所述第一处理器的指令集体系结构(ISA)内的指令。
3.如权利要求2所述的计算机可读存储介质,其中所述程序指令还可被所述控制程序解释以执行如下操作:
接收第二组字节代码,其中所述第二组字节代码指定第二组任务;以及
响应于确定不将所述第二组任务卸载到所述第二处理器,促使所述控制程序解释所述第二组字节代码以产生所述第一处理器的所述ISA内的指令,其中所述第一处理器配置成通过执行由所述第二组字节代码的解释所产生的所述指令来执行所述第二组任务。
4.如权利要求3所述的计算机可读存储介质,其中所述程序指令还可被所述控制程序解释以执行如下操作:
响应于确定不将所述第二组任务卸载到所述第二处理器,生成可被所述控制程序解释的一组对应的字节代码以创建线程池,所述线程池包含对应于所述第二组任务内的多个任务中的每个任务的线程;以及
促使所述控制程序解释所述一组对应的字节代码以产生所述第一处理器的所述ISA内的指令,其中所述第一处理器配置成通过执行从所述一组对应的字节代码产生的所述指令来执行所述第二组任务。
5.如权利要求2所述的计算机可读存储介质,其中所述控制程序可执行以实现虚拟机。
6.如权利要求1所述的计算机可读存储介质,其中促使自动生成采用所述不同格式的所述一组指令包括:
生成具有域相关语言格式的一组域相关指令;
将所述一组域相关指令提供到所述第二处理器的驱动程序,所述驱动程序可执行以生成采用所述不同格式的所述一组指令。
7.如权利要求6所述的计算机可读存储介质,其中生成具有所述域相关语言格式的所述一组指令包括:
将所述第一组字节代码具化以产生所述第一组字节代码的中间表示;以及
转换所述第一组字节代码的所述中间表示以产生所述一组域相关指令。
8.如权利要求6所述的计算机可读存储介质,其中所述程序指令可执行以执行如下操作:
存储所述一组域相关指令;
再次接收所述第一组字节代码;
响应于确定存储了所述一组域相关指令,将存储的所述一组域相关指令提供到所述第二处理器的所述驱动程序以促使生成用来执行所述第一组任务的所述一组指令。
9.如权利要求1所述的计算机可读存储介质,其中所述确定基于对所述第一处理器和所述第二处理器对所述第一组任务的先前执行的分析。
10.如权利要求9所述的计算机可读存储介质,其中所述第一处理器使用线程池来执行所述第一组任务的所述先前执行的其中之一。
11.如权利要求1所述的计算机可读存储介质,其中所述程序指令还可执行以执行如下操作:
在所述第二处理器执行所述一组指令之前,预留一组存储器位置以存储所述第一组任务的一组结果;
在所述第二处理器正在产生所述一组结果时,防止垃圾收集器重新分配所述一组存储器位置;以及
将所述一组结果存储在所述一组存储器位置中。
12.如权利要求1所述的计算机可读存储介质,其中所述第一组字节代码通过包含对应用编程接口的一个或多个调用来指定所述第一组任务。
13.如权利要求1所述的计算机可读存储介质,其中所述第二处理器是图形处理器。
14.一种计算机可读存储介质,其包含:
源程序指令,所述源程序指令可被编译器编译以作为已编译源代码包含在已编译代码中;
其中所述源程序指令包括对库例行程序的应用编程接口(API)调用,其中所述API调用指定一组任务,并且其中所述库例行程序可被所述编译器编译以便作为已编译库例行程序包括在所述已编译代码中;
其中所述已编译源代码可被计算系统的第一处理器的虚拟机解释以将所述一组任务传递到所述已编译库例行程序;并且
其中所述已编译库例行程序可被所述虚拟机解释以执行如下操作:
响应于确定要将所述一组任务卸载到所述计算系统的第二处理器,促使生成采用所述第二处理器的域相关语言格式的一组域相关指令;
促使将所述一组域相关指令提供到所述第二处理器。
15.如权利要求14所述的计算机可读存储介质,其中所述第二处理器是图形处理器,并且其中生成所述一组域相关指令包括具化所述已编译源代码。
16.如权利要求14所述的计算机可读存储介质,其中所述API调用指定与所述库例行程序关联的基类的扩充的类。
17.一种计算机可读存储介质,其包括:
库例行程序的源程序指令,所述库例行程序的源程序指令可被编译器编译以作为已编译库例行程序包含在已编译代码中;
其中所述已编译库例行程序可在计算机系统的第一处理器上执行以执行如下操作:
接收第一组字节代码,其中所述第一组字节代码指定一组任务;
响应于确定要将所述一组任务卸载到所述计算机系统的第二处理器,生成一组域相关指令以执行所述一组任务;
促使将所述域相关指令提供到所述第二处理器以供执行。
18.如权利要求17所述的计算机可读存储介质,其中所述已编译库例行程序可被所述第一处理器的虚拟机解释,其中所述虚拟机可执行以解释已编译指令以产生所述第一处理器的指令集体系结构(ISA)内的指令。
19.一种方法,其包括:
接收第一组指令,其中所述第一组指令指定一组任务,并且其中所述接收由在计算机系统的第一处理器上执行的库例行程序来执行;
所述库例行程序确定是否要将所述一组任务卸载到所述计算机系统的第二处理器;
响应于确定要将所述一组任务卸载到所述第二处理器,促使生成用于执行所述第一组任务的第二组指令,其中所述第二组指令采用与所述第一组指令的格式不同的格式,其中所述第二处理器支持所述格式;
促使将所述第二组指令提供到所述第二处理器以供执行。
20.如权利要求19所述的方法,其中所述例行程序可被虚拟机解释,所述虚拟机可执行以产生所述第一处理器的指令集体系结构(ISA)内的指令,并且其中所述第二处理器是图形处理器。
21.一种方法,其包括:
计算机系统接收指定一组任务的第一组字节代码;
响应于确定要将所述一组任务从所述计算机系统的第一处理器卸载到所述计算机系统的第二处理器,所述计算机系统生成用于执行所述一组任务的一组域相关指令;以及
所述计算机系统促使将所述域相关指令提供到所述第二处理器以供执行。
22.如权利要求21所述的计算机可读存储介质,其中所述生成由已编译库例行程序来执行,所述已编译库例行程序可被所述第一处理器的虚拟机解释,其中所述虚拟机可执行以解释已编译指令以产生所述第一处理器的指令集体系结构(ISA)内的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/785,052 | 2010-05-21 | ||
US12/785,052 US20110289519A1 (en) | 2010-05-21 | 2010-05-21 | Distributing workloads in a computing platform |
PCT/US2011/037029 WO2011146642A1 (en) | 2010-05-21 | 2011-05-18 | Distributing and parallelizing workloads in a computing platform |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102985908A true CN102985908A (zh) | 2013-03-20 |
Family
ID=44121324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011800295040A Pending CN102985908A (zh) | 2010-05-21 | 2011-05-18 | 在计算平台中分布工作负荷 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20110289519A1 (zh) |
EP (1) | EP2572275A1 (zh) |
JP (1) | JP2013533533A (zh) |
KR (1) | KR20130111220A (zh) |
CN (1) | CN102985908A (zh) |
WO (1) | WO2011146642A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015096135A1 (en) * | 2013-12-27 | 2015-07-02 | Intel Corporation | Electronic device having two processors to process data |
CN104834630A (zh) * | 2014-02-10 | 2015-08-12 | 瑞萨电子株式会社 | 运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备 |
CN105760239A (zh) * | 2016-02-03 | 2016-07-13 | 北京元心科技有限公司 | 在第二系统中访问用于第一系统的第三方库的方法及系统 |
CN109712064A (zh) * | 2017-04-24 | 2019-05-03 | 英特尔公司 | 使用低精度和高精度的混合推理 |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080270653A1 (en) * | 2007-04-26 | 2008-10-30 | Balle Susanne M | Intelligent resource management in multiprocessor computer systems |
US8566831B2 (en) | 2011-01-26 | 2013-10-22 | International Business Machines Corporation | Execution of work units in a heterogeneous computing environment |
US8533720B2 (en) * | 2011-02-25 | 2013-09-10 | International Business Machines Corporation | Offloading work from one type to another type of processor based on the count of each type of service call instructions in the work unit |
US9451012B1 (en) * | 2011-08-30 | 2016-09-20 | CSC Holdings, LLC | Heterogeneous cloud processing utilizing consumer devices |
US9430807B2 (en) | 2012-02-27 | 2016-08-30 | Qualcomm Incorporated | Execution model for heterogeneous computing |
WO2014058854A1 (en) * | 2012-10-09 | 2014-04-17 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
US9477313B2 (en) | 2012-11-20 | 2016-10-25 | Samsung Electronics Co., Ltd. | User gesture input to wearable electronic device involving outward-facing sensor of device |
US8994827B2 (en) | 2012-11-20 | 2015-03-31 | Samsung Electronics Co., Ltd | Wearable electronic device |
US11157436B2 (en) | 2012-11-20 | 2021-10-26 | Samsung Electronics Company, Ltd. | Services associated with wearable electronic device |
US10551928B2 (en) | 2012-11-20 | 2020-02-04 | Samsung Electronics Company, Ltd. | GUI transitions on wearable electronic device |
US11372536B2 (en) | 2012-11-20 | 2022-06-28 | Samsung Electronics Company, Ltd. | Transition and interaction model for wearable electronic device |
US10423214B2 (en) * | 2012-11-20 | 2019-09-24 | Samsung Electronics Company, Ltd | Delegating processing from wearable electronic device |
US10185416B2 (en) | 2012-11-20 | 2019-01-22 | Samsung Electronics Co., Ltd. | User gesture input to wearable electronic device involving movement of device |
US11237719B2 (en) | 2012-11-20 | 2022-02-01 | Samsung Electronics Company, Ltd. | Controlling remote electronic device with wearable electronic device |
US9619229B2 (en) | 2012-12-27 | 2017-04-11 | Intel Corporation | Collapsing of multiple nested loops, methods and instructions |
US20140354658A1 (en) * | 2013-05-31 | 2014-12-04 | Microsoft Corporation | Shader Function Linking Graph |
US9201659B2 (en) * | 2013-08-19 | 2015-12-01 | Qualcomm Incorporated | Efficient directed acyclic graph pattern matching to enable code partitioning and execution on heterogeneous processor cores |
JP2015095132A (ja) * | 2013-11-13 | 2015-05-18 | 富士通株式会社 | 情報処理システム、情報処理システムの制御方法及び管理装置の制御プログラム |
US10691332B2 (en) | 2014-02-28 | 2020-06-23 | Samsung Electronics Company, Ltd. | Text input on an interactive display |
US9400683B2 (en) * | 2014-10-16 | 2016-07-26 | Sap Se | Optimizing execution of processes |
US10007561B1 (en) * | 2016-08-08 | 2018-06-26 | Bitmicro Networks, Inc. | Multi-mode device for flexible acceleration and storage provisioning |
US10216596B1 (en) | 2016-12-31 | 2019-02-26 | Bitmicro Networks, Inc. | Fast consistent write in a distributed system |
US10726605B2 (en) * | 2017-09-15 | 2020-07-28 | Intel Corporation | Method and apparatus for efficient processing of derived uniform values in a graphics processor |
US11036477B2 (en) | 2019-06-27 | 2021-06-15 | Intel Corporation | Methods and apparatus to improve utilization of a heterogeneous system executing software |
US11269639B2 (en) | 2019-06-27 | 2022-03-08 | Intel Corporation | Methods and apparatus for intentional programming for heterogeneous systems |
US11392464B2 (en) | 2019-11-01 | 2022-07-19 | EMC IP Holding Company LLC | Methods and systems for mirroring and failover of nodes |
US11741056B2 (en) | 2019-11-01 | 2023-08-29 | EMC IP Holding Company LLC | Methods and systems for allocating free space in a sparse file system |
US11409696B2 (en) | 2019-11-01 | 2022-08-09 | EMC IP Holding Company LLC | Methods and systems for utilizing a unified namespace |
US11288238B2 (en) | 2019-11-01 | 2022-03-29 | EMC IP Holding Company LLC | Methods and systems for logging data transactions and managing hash tables |
US11288211B2 (en) | 2019-11-01 | 2022-03-29 | EMC IP Holding Company LLC | Methods and systems for optimizing storage resources |
US11294725B2 (en) * | 2019-11-01 | 2022-04-05 | EMC IP Holding Company LLC | Method and system for identifying a preferred thread pool associated with a file system |
US11150845B2 (en) | 2019-11-01 | 2021-10-19 | EMC IP Holding Company LLC | Methods and systems for servicing data requests in a multi-node system |
US20220350545A1 (en) * | 2021-04-29 | 2022-11-03 | EMC IP Holding Company LLC | Method and systems for storing data in a storage pool using memory semantics with applications utilizing object semantics |
US11740822B2 (en) | 2021-04-29 | 2023-08-29 | EMC IP Holding Company LLC | Methods and systems for error detection and correction in a distributed storage system |
US11892983B2 (en) | 2021-04-29 | 2024-02-06 | EMC IP Holding Company LLC | Methods and systems for seamless tiering in a distributed storage system |
US11567704B2 (en) | 2021-04-29 | 2023-01-31 | EMC IP Holding Company LLC | Method and systems for storing data in a storage pool using memory semantics with applications interacting with emulated block devices |
US11579976B2 (en) | 2021-04-29 | 2023-02-14 | EMC IP Holding Company LLC | Methods and systems parallel raid rebuild in a distributed storage system |
US11669259B2 (en) | 2021-04-29 | 2023-06-06 | EMC IP Holding Company LLC | Methods and systems for methods and systems for in-line deduplication in a distributed storage system |
US11604610B2 (en) * | 2021-04-29 | 2023-03-14 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using offload components |
US11677633B2 (en) | 2021-10-27 | 2023-06-13 | EMC IP Holding Company LLC | Methods and systems for distributing topology information to client nodes |
US11762682B2 (en) | 2021-10-27 | 2023-09-19 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using offload components with advanced data services |
US11922071B2 (en) * | 2021-10-27 | 2024-03-05 | EMC IP Holding Company LLC | Methods and systems for storing data in a distributed system using offload components and a GPU module |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6694506B1 (en) * | 1997-10-16 | 2004-02-17 | International Business Machines Corporation | Object oriented programming system with objects for dynamically connecting functioning programming objects with objects for general purpose operations |
US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
US6631515B1 (en) * | 1998-09-24 | 2003-10-07 | International Business Machines Corporation | Method and apparatus to reduce code size and runtime in a Java environment |
US20040139424A1 (en) * | 2003-01-13 | 2004-07-15 | Velare Technologies Inc. | Method for execution context reification and serialization in a bytecode based run-time environment |
US9417914B2 (en) * | 2008-06-02 | 2016-08-16 | Microsoft Technology Licensing, Llc | Regaining control of a processing resource that executes an external execution context |
-
2010
- 2010-05-21 US US12/785,052 patent/US20110289519A1/en not_active Abandoned
-
2011
- 2011-05-18 JP JP2013512085A patent/JP2013533533A/ja not_active Withdrawn
- 2011-05-18 WO PCT/US2011/037029 patent/WO2011146642A1/en active Application Filing
- 2011-05-18 CN CN2011800295040A patent/CN102985908A/zh active Pending
- 2011-05-18 EP EP11722689A patent/EP2572275A1/en not_active Withdrawn
- 2011-05-18 KR KR1020127032420A patent/KR20130111220A/ko not_active Application Discontinuation
Non-Patent Citations (3)
Title |
---|
AART J.C. BIK,DENNIS B. GANNON: "《javab a prototype bytecode parallelization tool》", 《JAVAB A PROTOTYPE BYTECODE PARALLELIZATION TOOL》 * |
ALAN LEUNG,ONDˇREJ LHOTÁK,GHULAM LASHARI: "《Automatic Parallelization for Graphics Processing Units》", 《PPPJ 09 PROCEEDINGS OF THE 7TH INTERNATIONAL CONFERENCE ON PRINCIPLES AND PRACTICE OF PROGRAMMING IN JAVA》 * |
PETER CALVERT: "《Parallelisation of Java for Graphics Processors》", 《PARALLELISATION OF JAVA FOR GRAPHICS PROCESSORS》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015096135A1 (en) * | 2013-12-27 | 2015-07-02 | Intel Corporation | Electronic device having two processors to process data |
US10721684B2 (en) | 2013-12-27 | 2020-07-21 | Intel Corporation | Electronic device having two processors to process data |
CN104834630A (zh) * | 2014-02-10 | 2015-08-12 | 瑞萨电子株式会社 | 运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备 |
CN104834630B (zh) * | 2014-02-10 | 2019-08-16 | 瑞萨电子株式会社 | 运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备 |
CN105760239A (zh) * | 2016-02-03 | 2016-07-13 | 北京元心科技有限公司 | 在第二系统中访问用于第一系统的第三方库的方法及系统 |
CN105760239B (zh) * | 2016-02-03 | 2019-04-16 | 北京元心科技有限公司 | 在第二系统中访问用于第一系统的第三方库的方法及系统 |
CN109712064A (zh) * | 2017-04-24 | 2019-05-03 | 英特尔公司 | 使用低精度和高精度的混合推理 |
CN109712064B (zh) * | 2017-04-24 | 2023-05-02 | 英特尔公司 | 使用低精度和高精度的混合推理 |
Also Published As
Publication number | Publication date |
---|---|
WO2011146642A1 (en) | 2011-11-24 |
KR20130111220A (ko) | 2013-10-10 |
EP2572275A1 (en) | 2013-03-27 |
US20110289519A1 (en) | 2011-11-24 |
JP2013533533A (ja) | 2013-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102985908A (zh) | 在计算平台中分布工作负荷 | |
US9720708B2 (en) | Data layout transformation for workload distribution | |
US7987458B2 (en) | Method and system for firmware image size reduction | |
TWI423133B (zh) | 設定為處理轉譯應用程式的運算系統 | |
US8522223B2 (en) | Automatic function call in multithreaded application | |
JP5893038B2 (ja) | ユーザ定義型のコンパイル時境界検査 | |
US8570333B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
US20070169059A1 (en) | Compiler method for extracting and accelerator template program | |
KR101615907B1 (ko) | 트랜잭션을 지원하는 컴퓨터 아키텍처에서 코드 특수화에 대한 예외를 사용하는 방법 및 시스템 | |
US8843920B2 (en) | Systems and methods for deferring software implementation decisions until load time | |
CN1570870A (zh) | 终极管道和最优重排技术 | |
CN104011679A (zh) | 异构并行处理平台的软件库 | |
US20120198428A1 (en) | Using Aliasing Information for Dynamic Binary Optimization | |
US8436862B2 (en) | Method and system for enabling managed code-based application program to access graphics processing unit | |
US20040083467A1 (en) | System and method for executing intermediate code | |
JP5401561B2 (ja) | クラスファイル内にネイティブコードを埋め込むことによる仮想メカニズム内でのプラットフォーム依存ルーチンの適用 | |
US20110113409A1 (en) | Symbol capabilities support within elf | |
US8612929B2 (en) | Compiler implementation of lock/unlock using hardware transactional memory | |
Papadimitriou et al. | Transparent compiler and runtime specializations for accelerating managed languages on fpgas | |
Janik et al. | An overview of altera sdk for opencl: A user perspective | |
JP2016192152A (ja) | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 | |
Baloukas et al. | Mapping embedded applications on MPSoCs: the MNEMEE approach | |
CN112631662B (zh) | 众核异构架构下的多类型目标代码的透明加载方法 | |
CN115543331A (zh) | 虚拟线性内存的硬件、软件协同扩展方法及电子设备 | |
US20030135535A1 (en) | Transferring data between threads in a multiprocessing computer system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130320 |