CN103858099B - 用于执行应用的方法和系统、具有机器指令的电路 - Google Patents
用于执行应用的方法和系统、具有机器指令的电路 Download PDFInfo
- Publication number
- CN103858099B CN103858099B CN201280038632.6A CN201280038632A CN103858099B CN 103858099 B CN103858099 B CN 103858099B CN 201280038632 A CN201280038632 A CN 201280038632A CN 103858099 B CN103858099 B CN 103858099B
- Authority
- CN
- China
- Prior art keywords
- executable
- logical block
- platform
- program
- entities
- 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.)
- Active
Links
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
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
Abstract
一种用于在异构计算机上编译和运行高级程序的技术可以包括将程序代码划分成两个或更多逻辑单元,并将每个所述逻辑单元编译成一个或多个可执行实体。将至少某些所述逻辑单元编译成两个或更多可执行实体,所述两个或更多可执行实体是同一逻辑单元的不同编译。所述两个或更多可执行实体兼容以便在具有不同体系架构的相应两个或更多平台上运行。
Description
技术领域
本申请一般地涉及计算机和应用,更具体地说,涉及用于在异构计算机或处理器上编译和运行程序的技术。
背景技术
构成计算机的计算元件的混合物变得越来越异构。当今计算机已经将传统处理器(例如,中央处理单元(CPU))与图形处理器(GPU)耦合,并且对GPU越来越感兴趣,不仅仅将其用于图形处理,因为其在具体问题上具有特殊计算能力。这样,具有CPU和GPU的计算机是异构的,因为它为适合其体系架构的计算任务提供专用计算元件(GPU),并且为所有其它任务(例如,如果需要,则包括非常适合于GPU的计算任务)提供真正通用计算元件(CPU)。GPU是硬件加速器的一个实例。除了GPU之外,越来越广泛地考虑其它形式的硬件加速器,并且已经具有现场可编程门阵列(FPGA)和固定功能加速器形式的加速器实例,这些加速器用于加密、XML解析、正则表达式匹配、物理引擎等。
存在单独用于CPU、GPU、FPGA和各种加速器的程序设计技术。例如,用于GPU的程序设计语言包括OpenMP、CUDA和OpenCL,所有这些语言均可以被视为C程序设计语言的扩展。GPU特定的编译器输入采用这些语言之一编写的程序,并且预处理程序以便将GPU特定的代码(此后称为设备代码)与其余程序代码(此后称为主机代码)分离。设备代码通常通过显式设备特定的语言扩展的存在、或编译器指令(例如,pragma)、或语法(例如,在CUDA中使用<<<…>>>启动内核)识别。将设备代码进一步转换并编译成设备特定的机器代码(此后称为工件(artifact))。将主机代码作为编译过程的一部分而修改,以便在执行程序时调用设备工件。可以将设备工件嵌入到主机代码中,或者它可以存在于储存库中并且通过作为调用过程的一部分的唯一标识符来标识。
用于包括FPGA的异构计算机的程序设计语言和解决方案堪比GPU程序设计解决方案,尽管FPGA仍未享受广为接受的C方言带来的好处。各种FPGA技术供应商提供的C语言具有多种扩展,所有这些供应商通常以非常类似于用于GPU的编译器所遵循的方式,编译采用其C方言编写的代码:编译器将程序划分成设备(FPGA)代码和主机代码,单独编译每种代码,修改主机代码以便调用设备工件。
无论计算机中的处理元件的异构混合为何,程序设计过程迄今为止通常是类似的,并且共有以下特征。第一,必须对不同体系架构进行编程采用的不同语言或方言使得单个程序员或程序设计团队难以同样很好地处理项目的所有方面。第二,对以下各项的关注度相对较小:共同执行、使用无缝共同工作的多个不同计算元件协调程序执行的问题。这需要将程序划分为可以映射到计算元件的任务、在计算元件上映射或调度任务,以及处理计算元件之间的通信,该通信本身需要对数据进行串行化并准备数据以便传输,在处理器之间路由数据,以及接收数据并对数据进行解串行化。给定与在异构计算机上协调程序执行关联的复杂性,必须尽早针对将在何处执行何种操作做出静态决策,随着项目的进展,重新访问该决策很困难并且很昂贵。这由于以下事实而加剧:某些加速器(例如,FPGA)难以很好地编程,并且为程序员增加沉重的工程负担。
发明内容
在一个方面,一种用于执行一个或多个应用的方法可以包括:由程序编译器自动将程序代码划分成两个或更多逻辑单元;以及将每个所述逻辑单元编译成一个或多个可执行实体,将至少某些所述逻辑单元编译成两个或更多可执行实体,所述两个或更多可执行实体是同一逻辑单元的不同机器特定的编译。
在另一个方面,一种执行一个或多个应用的方法可以包括:确定哪一或哪些平台可用于程序执行;在程序代码的每个指定点,确定用于执行的逻辑单元,以及选择与所确定的逻辑单元关联并与被确定为可用的一个或多个平台兼容的一个或多个可执行实体;以及将所选择的一个或多个可执行实体分配给被确定为可用的相应一个或多个平台。
在一个方面,一种用于执行一个或多个应用的系统可以包括:编译器模块,其可操作以将程序代码划分成两个或更多逻辑单元,并将每个所述逻辑单元编译成一个或多个可执行实体。可以将至少某些所述逻辑单元编译成两个或更多可执行实体。所述两个或更多可执行实体是同一逻辑单元的不同机器特定的编译。运行时模块可操作以确定哪一或哪些平台可用于程序执行。在所述程序代码的每个指定点,所述运行时模块还可操作以确定用于执行的逻辑单元。所述运行时模块还可操作以选择与所确定的逻辑单元关联并与被确定为可用的一个或多个平台兼容的一个或多个可执行实体。
还可以提供一种电路,所述电路在机器上嵌入要执行的指令,所述指令包括在此描述的方法。
下面参考附图详细描述各种实施例的其它特性以及结构和操作。在附图中,相同的参考标号指示相同或功能类似的元素。
附图说明
图1是示出一个实施例中的本公开的编译器和运行时方法的示意图;
图2是示出本公开的一个实施例中的编译器方法的流程图;
图3是示出本公开的一个实施例中的运行时方法的流程图;
图4是一个实施例中的本公开的编译和运行时体系架构的实例体系架构概览图;
图5示出本公开的一个实施例中的编译器框架和/或运行时系统可以在其上操作的实例系统。
具体实施方式
本公开描述多个过程,这些过程用于编译应用以便在不同处理器上(例如,在具有包含不同执行体系架构的两个或更多处理器的异构计算机(也称为混合计算机)上)执行。还可以提供运行时过程,该过程在适当的处理器上选择、分配和执行编译的组件。在一个方面,本公开的一种方法可以使能编译单一源语言以便在异构计算机上共同执行,并使用编译和/或运行时技术,这些技术解决现有解决方案中出现的早期划分和共同执行问题。例如,主机编译器可以处理整个程序(其可以采用单一源语言编写),并生成机器特定的代码以便在通用CPU上运行该程序。此外,还可以允许任何数量的设备特定的编译器处理整个程序,并且每个这种编译器可以选择独立于其它设备编译器进行的选择而执行设备特定的代码生成。这样,本公开的方法可以克服对程序进行一次预处理和划分(分为主机代码和设备代码)的问题,因为它允许不同编译器对同一源代码进行编译并且产生功能等效的机器特定的实现。保证至少一个所述编译器(通常为主机编译器)针对程序的所有部分生成代码。一个或多个编译器可以针对输入程序的子集生成代码。例如,因为设备编译器通常比主机编译器更具限制性,所以设备编译器可能针对输入程序的子集生成可执行代码(也称为可执行实体或工件)。因此,在本公开的一个实施例中,多个编译器可以针对输入程序生成可执行实体(工件),并且任何给定的编译器可以针对同一程序生成多个可执行实体(工件),它们例如对应于该程序的不同部分或子集。
在另一个方面,本公开还描述一种技术,该技术用于使用唯一标识符结构关联通过不同编译器编译的相同程序部分,该结构确保通过不同编译器编译的程序的相同部分始终生成相同标识符。例如,在本公开的方法的一个实施例中,每个工件使用其对应的标识符标记,并且放置在根据计算机中的一组所需设备组织的工件存储库中。工件存储库可以是各种编译器产生的所有工件的储存库。在一个实施例中,使用一对关键字从存储库中检索工件:一个关键字标识所需设备,另一个关键字标识唯一工件。例如, 第一个关键字标识所需设备,第二个关键字是唯一工件标识符。关键字的顺序并不重要。如果工件存在,则检索工件;否则,返回故障指示。
在本公开的一个实施例中,运行时层(在本公开的后面部分描述)使用工件存储库对程序进行动态划分。当程序执行时,并且在执行中的预定义事件(通常由程序源语言的语义决定,但并非一定如此)时,运行时可以检查工件存储库以便发现实施即将发生的程序执行部分的工件组。运行时可以采用试探法选择新工件以便代替默认工件执行。因此,并非执行默认主机代码,而是运行时可以动态加载备选设备工件以便运行。这样,当在异构计算机上执行程序时,运行时允许许多不同的程序分区。
图1示出一个具有实例软件/硬件配置的实施例中的本公开的编译器和运行时方法。在一个实施例中,本公开的编译技术编译单一源语言102,以便例如在异构计算机104上共同执行。所示的实例混合计算机104包括多个不同类型的处理器、CPU126、GPU128、FPGA130、XML132以及另一个专用集成电路(ASIC)134。主机编译器106可以生成可执行代码或实体116,其具有兼容性以便在CPU104上运行。此外,GPU编译器108可以处理相同源代码102,并且生成可执行实体或代码118,其具有兼容性以便在GPU128上运行;FPGA编译器110可以处理相同源代码102,并且生成可执行实体或代码120,其具有兼容性以便在FPGA130上运行;XML编译器112可以处理相同源代码102,并且生成可执行实体或代码122,其具有兼容性以便在XML处理器132上运行;另一个编译器114可以处理相同源代码102,并且生成可执行实体或代码124,其具有兼容性以便在另一个专用处理器或专用集成电路(ASIC)上运行。
保证至少一个所述编译器(通常为主机编译器,例如106)针对程序102的所有部分生成代码。一个或多个编译器可以针对输入程序102的子集生成代码。因此,在本公开的一个实施例中,多个编译器106、108、110、112、114可以针对输入程序102生成可执行实体(工件)116、118、120、122、124,并且任何给定的编译器可以针对同一程序生成多个可执行实体(工件),它们例如对应于该程序的不同部分或子集。可以将生成的可执 行实体116、118、120、122、124存储在工件存储库136中,工件存储库136例如作为数据库或者采用另一种格式位于存储器和/或持久性或永久性存储设备中。在运行时期间(例如,当程序在计算机104上运行或执行时),运行时环境138确定可用于计算机104上以便运行程序的处理器126、128、130、132、134的类型,并且根据处理器在计算机104上的可用性,从工件存储库136中选择和执行一个或多个可执行实体。因此,取决于计算机的处理器配置,可以在适当的处理器上选择、分配和运行不同的可执行实体。
图2是示出本公开的一个实施例中的编译器方法的流程图。在202,编译器将程序代码划分成两个或更多逻辑单元。在204,编译器将每个逻辑单元编译成一个或多个可执行实体。可以将至少某些逻辑单元编译成两个或更多可执行实体,这些可执行实体是同一逻辑单元的不同机器特定的编译。在206,可以为可执行实体分配对应的标识符。为对应于每个逻辑单元的一个或多个可执行实体分配唯一标识符。因此,为对应于同一逻辑单元的两个或更多可执行实体分配相同标识符。在一个实施例中,可以使用元组(tuple)标识每个可执行实体,该元组例如是对应于逻辑单元的唯一标识符,以及标识可以在其上执行可执行实体的特定处理器(或设备)的标识符。这样,可以通过设备标识符将对应于同一逻辑单元的共享唯一标识符的两个或更多可执行实体彼此区分开来。在208,可以将可执行实体与对应的标识符一起例如存储在永久性存储装置中。
图3是示出本公开的一个实施例中的运行时方法的流程图。在302,确定哪一或哪些平台可用于计算机上的程序执行。在306,在程序代码的每个指定点,确定用于执行的逻辑单元。选择一个或多个可执行实体,这些可执行实体与所确定的逻辑单元关联,并且与被确定为可用的所述一个或多个平台兼容。在308,可以将所选择的一个或多个可执行实体分配给被确定为可用的相应一个或多个平台。
在本公开的一个实施例中,可以提供综合的编译器基础架构和运行时系统,它们共同使能使用单一语言以便对具有异构加速器等的计算系统进 行程序设计,并且在这种体系架构上共同执行得到的程序。在一个方面,本公开的设计特性可以使得当在任何处理器(无论是顺序或线程并行(如多核CPU)、向量并行(如GPU)还是位并行(如FPGA))上执行时,可以具有相同的语义。
在一个实施例中,本公开的编译器可以首先将程序转换为中间表示,该中间表示将计算描述为独立但互连的计算节点或逻辑单元。例如,再次参考图1,可以将源程序102划分成这些计算节点(例如140),也称为逻辑单元,如在102所示。
本公开的编译器然后可以为一系列准独立的后端编译器提供一个机会,以便针对不同目标体系架构编译一组或多组计算节点。多数后端编译器没有义务编译每个事物。但是,在一个实施例中,一个后端始终专用于编译整个程序并且保证每个节点具有至少一个实现。
在一个实施例中,使用本公开的方法进行编译的结果是用于不同体系架构的工件集合,每个体系架构使用它实现的特定计算节点来标记。运行时然后可以为该集合提供大量功能等效的配置,具体取决于激活哪些节点。
在本公开的一个实施例中,例如使用试探法执行程序的动态划分以便共同执行。本公开的编译器可以通过跨可用处理元件对程序进行动态划分(例如,导向多核CPU、GPU和FPGA),解决早期的应用静态划分问题。在运行时进行划分的优点是它不需要是永久性的,并可以适应程序工作负载的更改、程序阶段更改、资源的可用性以及其它细粒度的动态特性。
在本申请中公开的编译框架和运行时可以提供以下特性,但并不仅限于这些特性。
一个源-多个体系架构:可以使用体系架构特定的编译器将同一组逻辑单元分别编译成可执行工件,因此允许可以例如采用JavaTM式语言编写代码,并且针对加速器或类似的处理器实现本机可执行代码。
自动编译到专用处理器(例如GPU、FPGA等):例如,在一个实施例中,本公开的编译框架能够生成JavaTM字节代码、用于在GPU上执行的OpenCL代码以及用于在FPGA上执行的Verilog代码。
用于流计算的受管运行时:在一个实施例中,本公开的编译框架可以提供完全采用一种语言(例如,JavaTM等)实现的语言运行时,并且能够由虚拟机(例如,任何JavaTM虚拟机(VM))托管;当它存在于程序中时,它可以使用本机并发机制调度逻辑单元的执行以便利用并行性。本公开中的逻辑单元也称为任务。本公开中的任务图称为连接任务网络(例如,按照其输入和输出连接)。例如,任务1可以连接到任务2,因此任务2的输入使用任务1的输出。用于共同执行的灵活配置:在一个实施例中,本公开的编译框架可以在不同处理器(例如,JavaTM VM、GPU和FPGA等)之间协调逻辑单元的共同执行(当这种工件存在时),包括管理通信以及对工件的数据进行串行化和解串行化。
图4是一个实施例中的本公开的编译和运行时体系架构的实例体系架构概览图。针对诸如GPU和FPGA之类的专用处理器,可以将体系架构组织为前端(FE)编译器402和一组体系架构特定的后端(BE)编译器404。框架(例如,框架的用户接口模块)接受一组源文件408并且产生工件410以便执行。工件是可执行实体,其可以对应于整个程序(例如,字节代码生成的情况)或其子集(例如,OpenCL/GPU和Verilog/FPGA后端的情况)。工件以这种一种方式打包:在运行时,可以使用与该工件具有等效语义的另一个工件替换该工件。
图4中所示的体系架构分别示出作为通用CPU的通用编译器的JavaTM字节代码编译器以及作为GPU和FPGA的后端编译器的OpenCL和Verilog。仅作为实例示出这些组件。应该注意,本公开的方法和框架并不仅限于图4中所示的该配置。相反,本公开中描述的操作和工作可以应用于其它通用和专用处理器和编译器。此外,作为一个实例,下面将JavaTM式程序设计语言及其语法和命令描述为用于对单一源程序进行程序设计的语言,该单一源程序可以使用本公开的编译器框架编译。但是,本公开的方法无需限于仅使用该语言或任何一种单一语言编程的程序。
参考图4,实例单一源语言408可以以任务图412的形式显示逻辑单元。只要提供数据项作为任务的输入,任务便会重复应用功能。通过将任 务连接在一起而产生任务图,使得一个任务的输出变成另一个任务的输入。
前端编译器402的一种实施方式可以包括字节代码编译器。例如,前端编译器402可以包括JavaTM兼容语言,并且可以通过对内置于Eclipse(ECJ)的现有强健的JavaTM编译器进行增量修改来构建。Eclipse编译器(以及传递性地FE402)可以执行浅层优化(shallowoptimization)。在内部,Eclipse编译器可以自始至终使用抽象语法树(AST)作为程序表示。FE402可以经由AST-AST重写实现语言特性,并且重用现有Eclipse字节代码生成阶段。
在一个实施例中,可以将FE402中的组件应用于AST,以便仅在字节代码生成之前,将AST转换成适合于后端404的中间表示。所述组件可以完成构建任务图的程序408各部分的解释执行,目的是静态发现程序将在运行时创建的多个任务图412的结构(包括任务图的拓扑,以及每个节点在内联、常量传播和其它优化之后的代码)。解释执行可能不会发现程序可以构建的所有可能任务图。
可以单独允许各种后端404编译构成这些图的任务。每个后端可以具有排除器(excluder)组件,该组件检查每个任务以便确定是否可以编译任务的方法;后端从进一步编译中排除以下任务:该任务包含的方法具有不适合于该后端的语言结构,并且不针对该任务产生工件。否则,后端针对其编译的每个任务产生工件410。后端可以针对在原始程序中什么是单独任务产生工件。备选地,后端可以产生工件410以便聚合连续任务,例如,整个流水线(即,连接任务序列),或者假设排除器可以拒绝某些任务,则至少为可能管线的最大子部分。
在本公开的一个实施例中,前端和后端编译器402、404协作以便产生清单,该清单描述每个生成的工件并且使用唯一任务标识符标记工件。运行时414使用清单组和工件410确定哪些任务实现在语义上彼此等效。将相同任务标识符纳入字节代码编译的最后阶段,使得在执行程序时,可以将程序中的任务结构和图结构表示连同这些标识符一起传递到运行时414。单个任务可以具有多个任务标识符,因为它可以是一个或多个后端 404产生的更大聚合任务的一部分。但是,任务标识符以这样一种方式生成:具有相同任务标识符的任务(无论是简单任务还是聚合任务)在功能上等效。
可以构成混合计算机的专用处理器的一个实例是GPU418。在该实例中,GPU的后端可以产生OpenCL代码,使用平台特定的OpenCL运行时编译器自动将该OpenCL代码编译成本机目标代码。OpenCL代码的生成可带来在提供OpenCL实现的各种平台上本机地运行代码408的额外优点。作为一个实例,在一个实施例中,本公开的框架可以将OpenCL视为用于单处理器、GPU和多核处理器的可移植“汇编”语言。
OpenCL后端422可以针对单独任务或连接任务图生成工件410。它可以将每个任务编译到OpenCL内核,执行任务调度以及管理任务间数据传输。可以优化不同内核之间的通信,以便在连接任务的后续运行之间,数据仍位于GPU设备存储器中。这可以避免主机CPU与GPU之间不需要的数据传输,因此最大化性能。
并行性可以显式存在于任务图中(例如,通过程序中的显式命令),或者由程序员以更具命令式的样式间接表示(例如,作为诸如映射或应用的集体操作)。当提取一段并行代码时,后端编译器404(例如,OpenCL后端422)可以在内部将其变成循环,该循环直接映射到与OpenCL并行执行模型关联的索引空间。生成的OpenCL代码可以适应任何输入大小以及在设备上执行的任何数量的线程。这与通常假设固定数量的线程或固定输入大小的手写代码形成对照。因此,生成的代码比手写代码更通用并且更灵活。
为了在GPU418上获得良好性能,本公开的编译器框架可以谨慎地将数据映射到不同存储器。通常,四种类型的存储器可用于OpenCL程序设计模型:全局、常量、局部和专用存储器。这些存储器从最慢且最大(全局存储器)到最快且最小(专用存储器)排序,并且位于GPU设备板上。可以访问全局存储器以便在设备上运行的所有线程进行读取/写入。这堪比CPU的主存储器(RAM)。常量存储器可以被视为小的只读全局存储器, 其主要用于存储程序常量。局部存储器是在同一计算单元上运行的所有线程之间共享的读取/写入存储器(类似于多核处理器中的共享L2高速缓存)。最后,专用存储器专用于每个线程,并且不能用于在线程之间交换数据。后端404(例如422)可以自动优化数据在不同存储器中的放置,并执行足够的程序转换以确保最佳性能。例如,可以向并行循环应用分块循环,并且可以将局部存储器用作暂时存储器以便最小化到全局存储器的业务。另一种优化可以包括检测全局存储器中的冗余负载,并且通过在快速专用存储器中存储值来消除这些负载。可以针对GPU418执行其它优化。
可以构成混合计算机的过程的另一个实例是FPGA420。在该实例中,FPGA后端424可以处理任务图,并且可以生成Verilog代码以实现流水线并生成其它显式指定的程序命令以实现并行性。简单地说,Verilog是硬件描述语言。在一个具有FPGA424的实施例中,本公开的后端编译器404可以支持处理原始数据类型的任务,并且排除具有无界数组分配的任务,然而允许有界数组分配。在一个方面,代码生成策略是一种双重方法、粗粒度流水线并行性(如在任务图中表示的)以及可用于任务方法的细粒度指令级别并行性。后端编译器424使用模型执行静态工作估计以便确定瓶颈任务,然后尝试主动将其工作方法划分为非常细粒度的块;如单一操作那样的细粒度。FPGA424的后端可以包括优化。后端424可以使用预生成的硬件块的库(包括通信固件),以便在CPU416和FPGA420之间传输数据。后端424可以自动执行生成的Verilog的逻辑合成,以便产生位文件(其用于在运行程序之前配置FPGA)。该步骤不需要任何用户干预,并且可以使用供应商特定的EDA(电子设计自动化)工具。作为一个实例,可以支持基于PCIe的Xilinx FPGA。还可以支持其它FPGA。
本公开中的运行时组件使能在适当的硬件或处理器上执行编译后的代码(可执行实体或工件)。作为一个实例,运行时模块414可以在JavaTM中实现并且能够由任何JVM托管。在本公开的一个实施例中,运行时模块414可以包括一个或多个虚拟机等以便执行一个或多个可执行实体。它可以在运行时构造任务图、从可用工件410中选择要使用的任务的实现、 执行任务调度,并且如果需要,协调封送(marshaling)以及与本机工件的通信。在本公开的一个实施例中,运行时模块414可以包括执行阶段以便执行这些任务,例如,具体化任务图、调度和运行任务图、任务替换以及本机连接和封送。
在运行时模块414的实现的一个实施例中,运行时414可以针对每个不同种类的任务包含一个类,该任务可以例如在用于对单一源程序408进行编程的程序设计语言中产生。当字节代码编译器针对任务产生代码时,它直接针对这些运行时类之一生成对象分配,或者生成对适当的运行时类进行子类化的类(从而添加定制的行为),然后针对所生成的类生成对象分配。
将一个任务的输出连接到另一个任务的输入的连接操作生成对运行时提供的方法(导致形成连接)的方法调用。该具体化策略的结果是当程序执行时,语言的任务创建和连接操作符反映在运行时对象的实际图中。所生成的实例化任务的字节代码还为运行时提供唯一标识符,这些标识符由后端编译器404生成以便通告一组可用的任务工件。
在一个实施例中,调度和运行可执行实体可以按如下方式发生。“启动”方法(当在任何任务图上调用时)激活运行时的调度部分。浏览具体化后的图以便查找构成图的任务,并且计算每个任务的比率。“比率”指针对每个输入产生的输出数。由用户方法产生的任务具有1:1的比率,而内置任务可以具有其它比率,这些比率可以是静态已知(尽管未必为1:1),或者可以动态变化。
一旦知道所有任务的比率,调度器将图分为同步区域,以便(1)同步区域中的所有任务具有静态已知的比率,或者(2)同步区域具有比率动态变化的单一任务。对于第一种的每个同步区域,计算静态调度,这将导致每个任务执行正确的次数以使任务比率保持平衡。因此,同步区域中的任务之间的连接不需要具有弹性缓冲区;但是,连接同步区域的那些连接具有此类缓冲区以便适应变化的比率。
假设图中的任务仅具有字节代码工件,运行时针对每个同步区域创建 一个线程。这些线程将阻止区域的入站连接,直到足够的数据可用于区域调度的一次迭代,从而在其出站连接上产生数据。这些线程的创建和启动将完成start()操作的运行时实现。
在一个实施例中,任务替换(即,计算机中的处理器之间的动态程序划分)可以按如下方式执行。如果图中的任务具有非字节代码工件,则运行时在检查具体化的任务图时获悉这一点,因为可以在后端404填充的工件存储库(例如参见图1,136)中高效地查找存储在该任务图中的任务的唯一标识符。对于具有备选实现(例如,多个可用的可执行实体)的每个任务或连续任务序列,运行时可以有能力实现替换。在一个实施例中,运行时算法可以使用一个或多个规则以便自动执行替换。例如,规则可以指定优选更大替换(包含更多数量的连续任务)而不是更小替换。另一个规则可以指定支持GPU和FPGA工件而不是字节代码。还可以手动定向选择。可以考虑更复杂的算法,该算法计算通信成本,执行动态迁移或运行时自适应等。实现实际替换包括下面描述的本机连接和封送。替换可以在上面描述的线程创建和启动之前,但在其它方面通常不会影响运行时的其余部分。
在一个实施例中,本机连接和封送可以按如下方式执行。所有非字节代码工件的特征可以是在JVM域和后端的硬件域之间具有某种独特类型的连接。例如,与JVM并行的GPU共同执行需要首先加载目前采用动态链接库形式的本机二进制代码(一次性出现),并且执行JavaTM本机接口(JNI)调用以便将数据从JVM传输到GPU。同样,在FPGA的情况下,使用位文件对设备本身进行编程,并且还加载库以便处理与FPGA设备驱动程序的本机通信。在所有情况下,可以对数据进行某种串行化和解串行化。在技术上,JNI支持通过引用传递JavaTM数据结构,通过回调访问单独字段和相关对象。在实践中,可以使用数据的串行化避免大量JNI交叉。简单地说,JNI允许JavaTM在JVM中运行以便调用特定于硬件或操作系统的本机程序或者由这些本机程序调用。
为了减轻多数本机连接的延迟,可以针对连接创建和使用某种缓冲。 因此,在运行JavaTM字节代码的任务之中存在本机任务可以中断同步区域,从而将本机任务放置在就线程调度而言被类似地分离的本机区域中。然而JVM中的同步区域可以通过简单数据队列分离,可以至少部分地在本机代码中隐藏本机区域之间的排队,并且详细信息可以根据后端的类型而变化。
作为一个实例,本公开的编译器框架和运行时系统支持的一种语言可以是JavaTM式语言。此类语言可被设计为具有必需的语义,以便允许对高度不同的体系架构进行简洁的程序设计和高效编译。所述语言可以提供基于任务的数据流程序设计模型,该模型允许以任务粒度进行程序划分。可以严格隔离任务以便任务可能无法访问可变的全局程序状态,并且不存在对任务的外部引用,使得无法改变其状态(除了在任务中,如果改变的话)。通过将任务连接在一起而产生任务图,以便一个任务的输出变成另一个任务的输入。仅可以允许值类型在任务之间沿着任务连接流动。值类型表示不可变的对象,因此不能违反任务隔离。所述语言可以保证隔离和不可变性,以便理想地执行动态程序划分以及将任务图映射到异构体系架构以实现共同执行。在一个实施例中,这种程序设计语言可以为JavaTM增加多个特性,这些特性旨在显示并行性。可以在以下各项中找到一种实例单一程序设计语言,该语言包括可以用于对各种不同类型的处理器进行编程的特性:Joshua Auerbach、David F.Bacon、Perry Cheng和Rodric Rabbah的Lime:a Java-compatible andsynthesizable language for heterogeneous architectures in OOPSLA(Lime:用于采用OOPSLA的异构体系架构的Java兼容且可合成的语言),2010年;以及Joshua Auerbach、David F.Bacon、Perry Cheng和Rodric Rabbah的LIME:The Liquid Metal ProgrammingLanguage–Language Reference Manual(LIME:液体金属程序设计语言—语言参考手册),技术报告,RC25004,IBM Research,2010年。参见http://domino.research.ibm.com/library/cyberdig.nsf。可以在以下各项中找到StreamIt的更多详细信息:Thies,William的Language and compiler support for stream programs(流程序的语言和编译器支持), 博士论文,麻省理工学院,2009年;以及Thies,William、Karczmarek Michal和Amarasinghe,Saman P.的StreamIt:A Language for Streaming Applications(StreamIt:流应用的语言),CC,2002年。
应该注意,本公开的编译器和运行时方法和框架并不限于使用特定语言。相反,仅作为实例提供上面的语言描述。
图5示出本公开的一个实施例中的可以在其上运行编译器框架和/或运行时系统的实例系统。此类系统可以包括一个或多个处理器502、存储器504,并且可以具有与网络、存储装置和其它设备的连接。本公开的编译器框架和运行时系统506可以位于计算机存储器504中,并且由处理器(多个)502执行。例如,编译器框架和运行时系统506可以从永久性存储器件加载和/或从网络加载。程序可以由上面描述的本公开的编译器编译。生成的可执行实体可以由上面描述的本公开的运行时系统506存储和/或执行。应该注意,不需要在同一机器上编译和执行程序。即,例如,可以使用本公开的编译器框架在一个机器上编译程序,并且将存储的可执行实体传送到另一个机器以便由本公开的运行时系统在该机器上执行。作为一个实例,图5示出机器A和机器B,它们可以具有不同的处理器配置。可以使用机器B的处理器510和存储器508,在机器B上编译程序,然后在机器A上运行,反之亦然。图5中的计算机配置仅作为实例示出;本公开的方法可以应用于任何其它配置。
以上在本公开中描述了一种编译器基础架构和运行时系统,它们共同使能使用单一语言以便对具有异构加速器(例如,具有传统CPU核心、GPU和FPGA的混合物)的计算系统进行程序设计,并且在此类体系架构上共同执行得到的程序。例如,描述了JavaTM兼容语言,其具有利用现有JavaTM编译器并且显示多种适用的编译技术的框架,这些技术包括但不限于(1)对动态图结构表示进行解释执行,以便静态发现生成的图的结构和代码,以及(2)多版本策略,其针对多个后端进行冗余编译,排除无法针对给定后端轻松编译的代码。启用运行时模块以便选择针对计算元件优化的划分。
尽管存在单独用于CPU、GPU、FPGA和各种加速器的程序设计技术,但它们是不同的语言和方言,需要采用这些语言和方言对不同的体系架构进行编程。另一方面,在一个实施例中,本公开的方法允许使用单一程序对不同处理器进行编程。此外,本公开的方法允许共同执行,包括将程序协调到在不同体系架构上执行的不同计算元件中,并且无缝地共同工作。此外,本公开的方法允许动态和自动进行决策以便确定将在何处执行何种操作。
在一个实施例中,本公开的方法和/或一个或多个组件可以在现场可编程门阵列(FPGA)、图形处理单元(GPU)、或其它专用处理器或电路、或中央处理单元(CPU)或它们的任意组合上实现。可以使用诸如硬件描述语言(HDL)之类的语言对此类硬件或集成电路进行编程。在本公开的一个实施例中,例如,程序的主逻辑可以在FPGA上运行,而程序的辅助逻辑在CPU上运行。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是—但不限于—电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。 在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括例如在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括—但不限于—电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括—但不限于—无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的各个方面的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言、脚本语言—诸如Perl、VBS或类似的语言和/或功能语言—诸如Lisp和ML以及面向逻辑的语言—诸如Prolog。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其它设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
附图中的流程图和框图显示了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本公开的系统和方法可以在计算机系统中执行或实行,该计算机系统包括处理单元,其存放一个或多个处理器和/或核心、存储器以及其它实现计算机处理系统的系统组件(未在图中明确示出),或者该计算机系统包括计算机,其可以执行计算机程序产品。计算机程序产品可以包括介质,例如硬盘、紧凑存储介质(例如紧凑盘)或其它存储器件,它们可以由处理单元通过技术人员已知或将要已知的任何技术读取,以便为处理系统提供计算机程序产品以执行。
计算机程序产品可以包括所有相应的特性,这些特性使能实现在此描 述的方法,当加载到计算机系统时,所述计算机程序产品能够执行多种方法。当前上下文中的计算机程序、软件程序、程序或软件是指一组指令的以任何语言、代码或符号表示的任何表达,旨在使具有信息处理能力的系统直接执行特定的功能,或者执行以下两者之一或全部后执行特定的功能:(a)转换为另一种语言、代码或符号;和/或(b)以不同的材料形式再现。
执行本公开的系统和方法的计算机处理系统还可以包括诸如显示器或显示屏之类的显示设备,以便呈现输出显示并且提供显示器,用户可以例如与输入设备(例如键盘和鼠标设备或指点设备)协作,通过该显示器输入数据并且与处理系统交互。计算机处理系统还可以直接或通过远程连接来连接或耦合到一个或多个外围设备,例如打印机、扫描仪、扬声器以及任何其它设备。计算机处理系统可以通过局域以太网、WAN连接、因特网等中的一个或多个,或者通过任何其它联网方法(连接不同的计算系统并且允许它们彼此通信)连接或耦合到一个或多个其它处理系统,例如服务器、其它远程计算机处理系统、网络存储器件。本公开的系统和方法的各种功能和模块可以在不同处理系统上或者在任何单一平台上以分布方式实现或执行,例如访问在本地存储或者在网络上以分布方式存储的数据。
在此使用的术语只是为了描述特定的实施例并且并非旨在作为本发明的限制。如在此所使用的,单数形式“一”、“一个”和“该”旨在同样包括复数形式,除非上下文明确地另有所指。还将理解,当在此说明书中使用时,术语“包括”和/或“包含”指定了声明的特性、整数、步骤、操作、元素和/或组件的存在,但是并不排除一个或多个其它特性、整数、步骤、操作、元素、组件和/或其组合的存在或增加。
下面权利要求中的对应结构、材料、操作以及所有功能性限定的装置或步骤的等同替换,旨在包括任何用于与在权利要求中具体指出的其它元件相组合地执行该功能的结构、材料或操作。出于示例和说明目的给出了对本发明的描述,但所述描述并非旨在是穷举的或是将本发明限于所公开的形式。在不偏离本发明的范围和精神的情况下,对于所属技术领域的普通技术人员来说许多修改和变化都将是显而易见的。实施例的选择和描述 是为了最佳地解释本发明的原理和实际应用,并且当适合于所构想的特定使用时,使得所属技术领域的其它普通技术人员能够理解本发明的具有各种修改的各种实施例。
本公开的不同方面可以实现为在计算机或机器可用或可读介质中包含的程序、软件或计算机指令的形式,该可用或可读介质在计算机、处理器和/或机器上执行时,导致计算机或机器执行所述方法的步骤。还提供一种程序存储器件,其可由机器读取,有形地包含指令程序,该指令程序可由机器执行以便执行在本公开中描述的各种功能和方法。
本公开的系统和方法可以在通用计算机或专用计算机系统上实现和运行。计算机系统可以是任何类型的已知或将要已知的系统,并且通常可以包括处理器、存储设备、存储器件、输入/输出设备、内部总线和/或通信接口,以便结合通信硬件和软件等与其它计算机系统通信。
可用于本申请的术语“计算机系统”和“计算机网络”可以包括固定和/或便携式计算机硬件、软件、外围设备和存储器件的各种组合。计算机系统可以包括多个单独组件,这些组件联网或以其它方式链接以便协作执行,或者可以包括一个或多个独立组件。本申请的计算机系统的硬件和软件组件可以包括并且可以包括在固定和便携式设备(例如台式计算机、膝上型计算机和/或服务器)中。模块可以是实现某种“功能”的设备、软件、程序或系统的一个组件,其可以实现为软件、硬件、固件、电子电路等。
上面描述的实施例是示例性实例,并且不应该被解释为本发明限于这些特定的实施例。因此,所属技术领域的技术人员可以实现各种更改和修改,而不偏离所附权利要求中限定的本发明的精神或范围。
Claims (20)
1.一种用于执行一个或多个应用的方法,包括:
由程序编译器自动将程序代码划分成两个或更多逻辑单元;以及
将每个所述逻辑单元编译成一个或多个可执行实体,将至少某些所述逻辑单元编译成两个或更多可执行实体,所述两个或更多可执行实体是同一逻辑单元的不同机器特定的编译,其中所述编译进一步包括向不同的机器特定的编译器输入逻辑单元以产生所述两个或更多可执行实体;
将所述一个或多个可执行实体与至少两个关键字一起存储,一个关键字标识从中编译所述一个或多个可执行实体的逻辑单元,以及另一个关键字标识所述一个或多个可执行实体所兼容的平台。
2.根据权利要求1的方法,还包括:
为从所述同一逻辑单元编译的所有可执行实体分配相同标识符。
3.根据权利要求1的方法,还包括:
确定哪一或哪些平台可用于程序执行;以及
在所述程序代码的每个指定点,确定用于执行的逻辑单元,以及选择与所确定的逻辑单元关联并与被确定为可用的一个或多个平台兼容的一个或多个可执行实体。
4.根据权利要求3的方法,将所选择的一个或多个可执行实体分配给被确定为可用的相应一个或多个平台。
5.根据权利要求1的方法,其中在所述程序代码中的数据流边界处进行所述划分。
6.根据权利要求1的方法,其中针对至少一个特定机器的所述程序的所有部分生成可执行实体。
7.根据权利要求1的方法,其中所述不同机器特定的编译包括可在通用计算平台、专用计算平台或可重新配置的计算平台的两个或更多组合上执行的编译。
8.一种执行一个或多个应用的方法,包括:
确定哪一或哪些平台可用于程序执行;
在程序代码的每个指定点,确定用于执行的逻辑单元,以及选择与所确定的逻辑单元关联并与被确定为可用的一个或多个平台兼容的一个或多个可执行实体,其中至少某些所述逻辑单元被编译成两个或更多可执行实体,所述两个或更多可执行实体是同一逻辑单元的不同机器特定的编译,所述两个或更多可执行实体是基于编译包括多个逻辑单元的所述程序代码而产生的;以及
将所选择的一个或多个可执行实体分配给被确定为可用的相应一个或多个平台;
其中所述一个或多个可执行实体包括至少两个关键字,一个关键字标识从中编译所述一个或多个可执行实体的逻辑单元,以及另一个关键字标识所述一个或多个可执行实体所兼容的平台。
9.根据权利要求8的方法,其中针对通用计算平台、专用计算平台或可重新配置的计算平台的两个或更多组合编译所述逻辑实体。
10.一种具有机器指令的电路,所述机器指令用于执行一种执行一个或多个应用的方法,所述方法包括:
将程序代码划分成两个或更多逻辑单元;以及
将每个所述逻辑单元编译成一个或多个可执行实体,将至少某些所述逻辑单元编译成两个或更多可执行实体,所述两个或更多可执行实体是同一逻辑单元的不同机器特定的编译,其中所述编译进一步包括向不同的机器特定的编译器输入逻辑单元以产生所述两个或更多可执行实体;
将所述一个或多个可执行实体与至少两个关键字一起存储,一个关键字标识从中编译所述一个或多个可执行实体的逻辑单元,以及另一个关键字标识所述一个或多个可执行实体所兼容的平台。
11.根据权利要求10的电路,其中针对通用计算平台、专用计算平台或可重新配置的计算平台的两个或更多组合编译所述逻辑单元。
12.根据权利要求11的电路,其中在现场可编程门阵列上执行所述逻辑单元的主程序,以及在中央处理单元上执行所述逻辑单元的辅助程序。
13.根据权利要求11的电路,其中所述方法还包括:
为从同一逻辑单元编译的所有可执行实体分配相同标识符。
14.根据权利要求11的电路,其中所述方法还包括:
确定哪一或哪些平台可用于程序执行;以及
在所述程序代码的每个指定点,确定用于执行的逻辑单元,以及选择与所确定的逻辑单元关联并与被确定为可用的一个或多个平台兼容的一个或多个可执行实体。
15.根据权利要求14的电路,其中所述方法还包括:将所选择的一个或多个可执行实体分配给被确定为可用的相应一个或多个平台。
16.一种用于执行一个或多个应用的系统,包括:
编译器模块,其可操作以将程序代码划分成两个或更多逻辑单元,并将每个所述逻辑单元编译成一个或多个可执行实体,将至少某些所述逻辑单元编译成两个或更多可执行实体,所述两个或更多可执行实体是同一逻辑单元的不同机器特定的编译,其中所述两个或更多可执行实体是基于编译包括多个逻辑单元的所述程序代码而产生的;以及
运行时模块,其可操作以确定哪一或哪些平台可用于程序执行,并且在所述程序代码的每个指定点,其可操作以确定用于执行的逻辑单元以及选择与所确定的逻辑单元关联并与被确定为可用的一个或多个平台兼容的一个或多个可执行实体;
其中所述一个或多个可执行实体包括至少两个关键字,一个关键字标识从中编译所述一个或多个可执行实体的逻辑单元,以及另一个关键字标识所述一个或多个可执行实体所兼容的平台。
17.根据权利要求16的系统,其中所述编译器模块进一步可操作以为从同一逻辑单元编译的所有可执行实体分配相同标识符。
18.根据权利要求16的系统,其中所述运行时模块进一步可操作以将所选择的一个或多个可执行实体分配给被确定为可用的相应一个或多个平台。
19.根据权利要求16的系统,其中在通用计算平台、专用计算平台或可重新配置的计算平台的两个或更多组合上将所述逻辑单元编译为可执行实体。
20.根据权利要求16的系统,其中针对至少一个特定机器的所述程序的所有部分生成可执行实体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/196,300 US8789026B2 (en) | 2011-08-02 | 2011-08-02 | Technique for compiling and running high-level programs on heterogeneous computers |
US13/196,300 | 2011-08-02 | ||
PCT/US2012/048440 WO2013019575A2 (en) | 2011-08-02 | 2012-07-27 | Technique for compiling and running high-level programs on heterogeneous computers |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103858099A CN103858099A (zh) | 2014-06-11 |
CN103858099B true CN103858099B (zh) | 2017-03-01 |
Family
ID=47627786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280038632.6A Active CN103858099B (zh) | 2011-08-02 | 2012-07-27 | 用于执行应用的方法和系统、具有机器指令的电路 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8789026B2 (zh) |
JP (1) | JP5984158B2 (zh) |
CN (1) | CN103858099B (zh) |
DE (1) | DE112012002905B4 (zh) |
GB (1) | GB2508545B (zh) |
WO (1) | WO2013019575A2 (zh) |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8671401B2 (en) * | 2007-04-09 | 2014-03-11 | Microsoft Corporation | Tiling across loop nests with possible recomputation |
US8832699B2 (en) | 2009-05-11 | 2014-09-09 | Accenture Global Services Limited | Migrating processes operating on one platform to another platform in a multi-platform system |
US8813048B2 (en) | 2009-05-11 | 2014-08-19 | Accenture Global Services Limited | Single code set applications executing in a multiple platform system |
US8789026B2 (en) * | 2011-08-02 | 2014-07-22 | International Business Machines Corporation | Technique for compiling and running high-level programs on heterogeneous computers |
KR101894752B1 (ko) | 2011-10-27 | 2018-09-05 | 삼성전자주식회사 | 가상 아키텍쳐 생성 장치, 런타임 시스템, 멀티 코어 시스템 및 그 동작 방법 |
CN103959238B (zh) * | 2011-11-30 | 2017-06-09 | 英特尔公司 | 使用gpu/cpu体系结构的rsa的高效实现 |
US9483235B2 (en) | 2012-05-09 | 2016-11-01 | Nvidia Corporation | Method and system for separate compilation of device code embedded in host code |
US10261807B2 (en) | 2012-05-09 | 2019-04-16 | Nvidia Corporation | Method and system for multiple embedded device links in a host executable |
US10025643B2 (en) * | 2012-05-10 | 2018-07-17 | Nvidia Corporation | System and method for compiler support for kernel launches in device code |
US20140068581A1 (en) * | 2012-08-30 | 2014-03-06 | International Business Machines Corporation | Optimized division of work among processors in a heterogeneous processing system |
US9378179B2 (en) | 2012-11-21 | 2016-06-28 | International Business Machines Corporation | RDMA-optimized high-performance distributed cache |
US9569400B2 (en) | 2012-11-21 | 2017-02-14 | International Business Machines Corporation | RDMA-optimized high-performance distributed cache |
US9332083B2 (en) * | 2012-11-21 | 2016-05-03 | International Business Machines Corporation | High performance, distributed, shared, data grid for distributed Java virtual machine runtime artifacts |
US9766910B1 (en) | 2013-03-07 | 2017-09-19 | Amazon Technologies, Inc. | Providing field-programmable devices in a distributed execution environment |
US9619364B2 (en) | 2013-03-14 | 2017-04-11 | Nvidia Corporation | Grouping and analysis of data access hazard reports |
US9367291B2 (en) | 2013-03-29 | 2016-06-14 | Samsung Electronics Co., Ltd. | Apparatus and method for generating vector code |
US9348560B2 (en) * | 2013-06-04 | 2016-05-24 | Qualcomm Incorporated | Efficient execution of graph-based programs |
WO2015012711A1 (en) * | 2013-07-23 | 2015-01-29 | Huawei Technologies Co., Ltd | Method for constructing a graph-based intermediate representation in a compiler |
DE102013216409A1 (de) * | 2013-08-19 | 2015-02-19 | Carl Zeiss Microscopy Gmbh | Mikroskop |
US9229698B2 (en) | 2013-11-25 | 2016-01-05 | Nvidia Corporation | Method and apparatus for compiler processing for a function marked with multiple execution spaces |
US10086566B2 (en) * | 2014-01-02 | 2018-10-02 | Old World Labs | Apparatus for production of three-dimensional objects by stereolithography |
CA2925753A1 (en) * | 2014-01-13 | 2015-07-16 | Huawei Technologies Co., Ltd. | Method for pattern processing |
US9632761B2 (en) * | 2014-01-13 | 2017-04-25 | Red Hat, Inc. | Distribute workload of an application to a graphics processing unit |
US9886736B2 (en) | 2014-01-20 | 2018-02-06 | Nvidia Corporation | Selectively killing trapped multi-process service clients sharing the same hardware context |
US10152312B2 (en) | 2014-01-21 | 2018-12-11 | Nvidia Corporation | Dynamic compiler parallelism techniques |
GB2524346B (en) * | 2014-09-19 | 2016-12-21 | Imagination Tech Ltd | Separating Cores |
CN104317754B (zh) * | 2014-10-15 | 2017-03-15 | 中国人民解放军国防科学技术大学 | 面向异构计算系统的跨步数据传输优化方法 |
DE102014118042A1 (de) * | 2014-12-05 | 2016-06-09 | Schneider Electric Automation Gmbh | Verfahren zur nachverfolgbaren Programmierung und Konfigurierung eines Geräts |
US10241761B2 (en) | 2014-12-29 | 2019-03-26 | Nvidia Corporation | System and method for compiler support for compile time customization of code |
WO2016114532A1 (ko) * | 2015-01-16 | 2016-07-21 | 서울대학교 산학협력단 | 프로그램 컴파일 장치 및 프로그램 컴파일 방법 |
US9400685B1 (en) * | 2015-01-30 | 2016-07-26 | Huawei Technologies Co., Ltd. | Dividing, scheduling, and parallel processing compiled sub-tasks on an asynchronous multi-core processor |
CN107250985B (zh) * | 2015-02-27 | 2020-10-16 | 华为技术有限公司 | 用于异构计算应用编程接口(api)的系统和方法 |
US11436045B2 (en) | 2015-05-26 | 2022-09-06 | Blaize, Inc. | Reduction of a number of stages of a graph streaming processor |
US10437637B1 (en) * | 2015-05-26 | 2019-10-08 | Thin CI, Inc. | Configurable scheduler for graph processing on multi-processor computing systems |
US11416282B2 (en) | 2015-05-26 | 2022-08-16 | Blaize, Inc. | Configurable scheduler in a graph streaming processing system |
US11379262B2 (en) | 2015-05-26 | 2022-07-05 | Blaize, Inc. | Cascading of graph streaming processors |
US11150961B2 (en) | 2015-05-26 | 2021-10-19 | Blaize, Inc. | Accelerated operation of a graph streaming processor |
US20170052799A1 (en) * | 2015-08-21 | 2017-02-23 | Microchip Technology Incorporated | Integrated Circuit Device With Selectable Processor Core |
US10108448B2 (en) * | 2015-10-27 | 2018-10-23 | International Business Machines Corporation | Dynamic SMT |
US10409560B1 (en) * | 2015-11-18 | 2019-09-10 | Amazon Technologies, Inc. | Acceleration techniques for graph analysis programs |
KR101906823B1 (ko) * | 2016-03-07 | 2018-12-05 | 주식회사 럭스로보 | 멀티 모듈 컴파일 시스템 및 멀티 모듈 컴파일 방법, 그리고 컴파일러 프로그램을 갖는 컴퓨터 판독가능 저장매체 |
US10157440B2 (en) * | 2016-09-20 | 2018-12-18 | Intel Corporation | Static data sharing mechanism for a heterogeneous processing environment |
CN106843045A (zh) * | 2017-01-23 | 2017-06-13 | 张军 | 一种基于多核异构cpu‑gpu‑fpga系统架构的嵌入式操作系统原型 |
CN106708777A (zh) * | 2017-01-23 | 2017-05-24 | 张军 | 一种多核异构cpu‑gpu‑fpga系统架构 |
JP2018132981A (ja) * | 2017-02-16 | 2018-08-23 | 日本電気株式会社 | アクセラレータを有する情報処理装置および情報処理方法 |
CN109388428B (zh) * | 2017-08-11 | 2021-05-04 | 华为技术有限公司 | 图层遍历方法、控制装置及数据处理系统 |
JP7278716B2 (ja) * | 2018-05-18 | 2023-05-22 | ヤフー株式会社 | 調整装置、調整方法および調整プログラム |
CN116126333A (zh) | 2018-06-20 | 2023-05-16 | 华为技术有限公司 | 自动化编译的系统和方法 |
US11416228B2 (en) | 2018-09-13 | 2022-08-16 | The University Of Chicago | System and method of optimizing instructions for quantum computers |
CA3055859A1 (en) * | 2018-09-24 | 2020-03-24 | Quadient Group Ag | Method and system for operating a software application on a processor of a mobile device |
CN110968320A (zh) * | 2018-09-30 | 2020-04-07 | 上海登临科技有限公司 | 针对异构硬件架构的联合编译方法和编译系统 |
CN111124656B (zh) * | 2018-10-31 | 2023-09-15 | 伊姆西Ip控股有限责任公司 | 用于向专用计算资源分配任务的方法、设备和计算机可读存储介质 |
US11468881B2 (en) * | 2019-03-29 | 2022-10-11 | Samsung Electronics Co., Ltd. | Method and system for semantic intelligent task learning and adaptive execution |
US11567555B2 (en) * | 2019-08-30 | 2023-01-31 | Intel Corporation | Software assisted power management |
US10996960B1 (en) | 2019-11-22 | 2021-05-04 | Blaize, Inc. | Iterating single instruction, multiple-data (SIMD) instructions |
US11307860B1 (en) | 2019-11-22 | 2022-04-19 | Blaize, Inc. | Iterating group sum of multiple accumulate operations |
US11366664B1 (en) | 2019-12-08 | 2022-06-21 | Blaize, Inc. | Single instruction multiple data (simd) execution with variable width registers |
CN113031954A (zh) * | 2019-12-24 | 2021-06-25 | 阿里巴巴集团控股有限公司 | 代码编译方法、装置、电子设备、存储介质及异构系统 |
US11347486B2 (en) | 2020-03-27 | 2022-05-31 | Advanced Micro Devices, Inc. | Compiler-initiated tile replacement to enable hardware acceleration resources |
US11474798B2 (en) * | 2020-08-24 | 2022-10-18 | Huawei Technologies Co., Ltd. | Method and system for optimizing access to constant memory |
US11126436B1 (en) * | 2020-10-05 | 2021-09-21 | Unisys Corporation | Compilation and execution of parallel code fragments |
US11513845B2 (en) | 2020-11-06 | 2022-11-29 | Blaize, Inc. | Configurable scheduler with pre-fetch and invalidate threads in a graph stream processing system |
CN112685605A (zh) * | 2020-12-24 | 2021-04-20 | 深圳科安达电子科技股份有限公司 | 一种报警分析方法及系统 |
CN113553061B (zh) * | 2021-09-22 | 2021-12-17 | 西安芯瞳半导体技术有限公司 | 一种提升源程序执行性能的方法、装置及计算机存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1506816A (zh) * | 2002-12-10 | 2004-06-23 | 英特尔公司 | 用于网络处理器的虚拟机 |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3602857B2 (ja) * | 1991-04-23 | 2004-12-15 | 株式会社日立製作所 | 多機種対応型情報処理システム、および、方法 |
US6738967B1 (en) * | 2000-03-14 | 2004-05-18 | Microsoft Corporation | Compiling for multiple virtual machines targeting different processor architectures |
US20030033588A1 (en) | 2001-01-29 | 2003-02-13 | John Alexander | System, method and article of manufacture for using a library map to create and maintain IP cores effectively |
US20030028864A1 (en) | 2001-01-29 | 2003-02-06 | Matt Bowen | System, method and article of manufacture for successive compilations using incomplete parameters |
US7603663B2 (en) * | 2003-05-20 | 2009-10-13 | Intel Corporation | Apparatus and methods for restoring synchronization to object-oriented software applications in managed runtime environments |
US7165162B2 (en) * | 2004-01-13 | 2007-01-16 | Hewlett-Packard Development Company, L.P. | Partitioning modules for cross-module optimization |
US7073159B2 (en) * | 2004-03-31 | 2006-07-04 | Intel Corporation | Constraints-directed compilation for heterogeneous reconfigurable architectures |
US7278122B2 (en) | 2004-06-24 | 2007-10-02 | Ftl Systems, Inc. | Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization |
US7721069B2 (en) * | 2004-07-13 | 2010-05-18 | 3Plus1 Technology, Inc | Low power, high performance, heterogeneous, scalable processor architecture |
US7769974B2 (en) * | 2004-09-10 | 2010-08-03 | Microsoft Corporation | Increasing data locality of recently accessed resources |
US20060123401A1 (en) * | 2004-12-02 | 2006-06-08 | International Business Machines Corporation | Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system |
US7478376B2 (en) * | 2004-12-02 | 2009-01-13 | International Business Machines Corporation | Computer program code size partitioning method for multiple memory multi-processing systems |
US7793255B1 (en) * | 2005-03-01 | 2010-09-07 | Oracle America, Inc. | System and method for maintaining alternate object views |
US20070283324A1 (en) * | 2005-08-30 | 2007-12-06 | Geisinger Nile J | System and method for creating programs that comprise several execution layers |
US7689980B2 (en) * | 2005-09-30 | 2010-03-30 | Intel Corporation | Splitting the computation space to optimize parallel code |
US7757222B2 (en) * | 2005-09-30 | 2010-07-13 | Intel Corporation | Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal |
US7793278B2 (en) * | 2005-09-30 | 2010-09-07 | Intel Corporation | Systems and methods for affine-partitioning programs onto multiple processing units |
JP4936517B2 (ja) * | 2006-06-06 | 2012-05-23 | 学校法人早稲田大学 | ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ |
US8453132B2 (en) * | 2006-07-28 | 2013-05-28 | Hewlett-Packard Development Company, L.P. | System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems |
US20080189690A1 (en) | 2007-02-01 | 2008-08-07 | International Business Machines Corporation | Method for persisting or transferring an xcodes execution plan in a self-contained, platform independent format |
US8286196B2 (en) * | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8296743B2 (en) * | 2007-12-17 | 2012-10-23 | Intel Corporation | Compiler and runtime for heterogeneous multiprocessor systems |
US8386664B2 (en) * | 2008-05-22 | 2013-02-26 | International Business Machines Corporation | Reducing runtime coherency checking with global data flow analysis |
US8281295B2 (en) * | 2008-05-23 | 2012-10-02 | International Business Machines Corporation | Computer analysis and runtime coherency checking |
US8286198B2 (en) * | 2008-06-06 | 2012-10-09 | Apple Inc. | Application programming interfaces for data parallel computing on multiple processors |
US8527962B2 (en) * | 2009-03-10 | 2013-09-03 | International Business Machines Corporation | Promotion of a child procedure in heterogeneous architecture software |
US8799879B2 (en) * | 2009-06-30 | 2014-08-05 | Oracle America, Inc. | Method and apparatus for protecting translated code in a virtual machine |
CN102741828B (zh) | 2009-10-30 | 2015-12-09 | 英特尔公司 | 对计算机平台的异构处理器的双向通信支持 |
US8495604B2 (en) * | 2009-12-30 | 2013-07-23 | International Business Machines Corporation | Dynamically distribute a multi-dimensional work set across a multi-core system |
US8407322B1 (en) * | 2010-08-24 | 2013-03-26 | Adobe Systems Incorporated | Runtime negotiation of execution blocks between computers |
US8789026B2 (en) * | 2011-08-02 | 2014-07-22 | International Business Machines Corporation | Technique for compiling and running high-level programs on heterogeneous computers |
-
2011
- 2011-08-02 US US13/196,300 patent/US8789026B2/en active Active
-
2012
- 2012-07-27 WO PCT/US2012/048440 patent/WO2013019575A2/en active Application Filing
- 2012-07-27 DE DE112012002905.4T patent/DE112012002905B4/de active Active
- 2012-07-27 GB GB1403456.5A patent/GB2508545B/en active Active
- 2012-07-27 JP JP2014523983A patent/JP5984158B2/ja active Active
- 2012-07-27 CN CN201280038632.6A patent/CN103858099B/zh active Active
- 2012-09-14 US US13/618,523 patent/US8938725B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1506816A (zh) * | 2002-12-10 | 2004-06-23 | 英特尔公司 | 用于网络处理器的虚拟机 |
Also Published As
Publication number | Publication date |
---|---|
JP5984158B2 (ja) | 2016-09-06 |
GB2508545A (en) | 2014-06-04 |
WO2013019575A3 (en) | 2014-05-08 |
CN103858099A (zh) | 2014-06-11 |
US8938725B2 (en) | 2015-01-20 |
JP2014524607A (ja) | 2014-09-22 |
DE112012002905T5 (de) | 2014-03-27 |
US8789026B2 (en) | 2014-07-22 |
US20130036409A1 (en) | 2013-02-07 |
DE112012002905B4 (de) | 2022-08-25 |
GB201403456D0 (en) | 2014-04-16 |
GB2508545B (en) | 2020-05-20 |
WO2013019575A2 (en) | 2013-02-07 |
US20130036408A1 (en) | 2013-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103858099B (zh) | 用于执行应用的方法和系统、具有机器指令的电路 | |
Chen et al. | {TVM}: An automated {End-to-End} optimizing compiler for deep learning | |
Ma et al. | Rammer: Enabling holistic deep learning compiler optimizations with {rTasks} | |
Wei et al. | DLVM: A modern compiler infrastructure for deep learning systems | |
JP2008535074A (ja) | 複数の発行ポートを有するプロセッサにおける命令グループの作成 | |
Zheng et al. | AStitch: enabling a new multi-dimensional optimization space for memory-intensive ML training and inference on modern SIMT architectures | |
US20210342184A1 (en) | Method, electronic device, and computer program product for processing computing job | |
WO2021000971A1 (zh) | 操作数据的生成方法、装置及相关产品 | |
US9772887B2 (en) | Composable and cancelable dataflow continuation passing | |
Suhan et al. | LazyTensor: combining eager execution with domain-specific compilers | |
Brahmakshatriya et al. | Taming the zoo: The unified graphit compiler framework for novel architectures | |
Katel et al. | High performance GPU code generation for matrix-matrix multiplication using MLIR: some early results | |
CN116861359A (zh) | 面向深度学习推理任务编译器的算子融合方法和系统 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
Ozen | Compiler and runtime based parallelization & optimization for GPUs | |
Park et al. | XLA-NDP: Efficient Scheduling and Code Generation for DL Model Training on Near-Data Processing Memory | |
Roesch | Principled Optimization of Dynamic Neural Networks | |
Corral-García et al. | Towards automatic parallelization of sequential programs and efficient use of resources in HPC centers | |
US20240078098A1 (en) | Analysis assistant for determining execution inefficiencies in dataflow programs | |
Aumage | Instruments of Productivity for High Performance Computing | |
Li et al. | swTVM: Towards Optimized Tensor Code Generation for Deep Learning on Sunway Many-Core Processor | |
Stratikopoulos et al. | Towards High Performance Java-based Deep Learning Frameworks | |
Wickramasinghe | Role of High-Performance Computing in Deep Learning | |
Budea et al. | TensorBow: Supporting Small-Batch Training in TensorFlow | |
Al Shehri | A Parallel HPC-based Resource Management System for Big Data Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |