CN104137070A - 用于异构cpu-gpu计算的执行模型 - Google Patents
用于异构cpu-gpu计算的执行模型 Download PDFInfo
- Publication number
- CN104137070A CN104137070A CN201380010528.0A CN201380010528A CN104137070A CN 104137070 A CN104137070 A CN 104137070A CN 201380010528 A CN201380010528 A CN 201380010528A CN 104137070 A CN104137070 A CN 104137070A
- Authority
- CN
- China
- Prior art keywords
- gpu
- instruction
- execution model
- kernel
- processor
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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
-
- 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/457—Communication
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- 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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
技术一般涉及在图形处理单元GPU上实施数据处理算法的管线拓扑。开发者可以平台独立的方式界定所述管线拓扑。处理器可接收所述管线拓扑的指示且产生界定将在所述GPU上实施所述管线拓扑的平台相依的方式的指令。
Description
本申请案主张2012年2月27日申请的美国临时申请案61/603,771的权益,所述申请案的全部内容在此以全文引用的方式并入本文中。
技术领域
本发明涉及应用的执行,且更确切地说,涉及各种处理单元中的应用的执行。
背景技术
图形处理单元(GPU)正用于除图形处理之外的目的。举例来说,非图形相关应用可通过采用GPU的大量并行度而以增加的速度执行。此已导致提供额外的非图形相关处理功能性并且被称作通用GPU(GPGPU)的GPU。举例来说,GPGPU包含一或多个着色器核心,并且所述着色器核心经配置以执行例如图形相关应用以及非图形相关应用等应用。
发明内容
一般来说,本发明涉及用于产生用于实施计算管线的执行模型的技术。举例来说,多个数据处理算法可表示为计算管线,其中所述管线的一个单元接收并处理数据,并输出所述经处理数据以供所述管线的另一单元进一步处理。本发明中描述的技术可允许以一种方式表示所述计算管线,使得其可在各种类型的平行计算装置上有效地被执行,其一实例是图形处理单元(GPU)。举例来说,所述技术可以平台独立的方式表示所述计算管线(例如,不取决于将实施所述计算管线的计算装置)。
通过所述计算管线的表示,所述技术可利用平台相依的编译来产生可用的计算装置专有的指令,例如可用的GPU或甚至中央处理单元(CPU)。举例来说,所述计算管线可以平台独立的方式来界定并且编译器产生将在其上实施所述计算管线的平台专有的指令。
在一个实例中本发明描述一种用于异构计算的方法。所述方法包含使用处理器接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑。所述方法还包含使用所述处理器产生指令,所述指令指示将在图形处理单元(GPU)上实施所述执行模型的管线拓扑的平台相依的方式。在此实例中,将在所述GPU上实施所述执行模型的管线拓扑的所述平台相依的方式是基于GPU的平台。所述方法还包含使用所述处理器将所述指令传输到所述GPU。
在一个实例中,本发明描述一种设备。所述设备包含图形处理单元(GPU)和处理器。所述处理器经配置以接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑的指示。所述处理器还经配置以产生指令,所述指令指示将在GPU上实施所述执行模型的管线拓扑的平台相依的方式。在此实例中,将在所述GPU上实施所述执行模型的管线拓扑的所述平台相依的方式是基于GPU的平台。所述处理器还经配置以将所述指令传输到所述GPU。
在一个实例中,本发明描述一种计算机可读存储媒体,所述计算机可读存储媒体具有储存在其上的指令,所述指令在由一或多个处理器执行时致使所述一个或多个处理器接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑。所述指令还致使所述一个或多个处理器产生指令,所述指令指示将在图形处理单元(GPU)上实施所述执行模型的所述管线拓扑的平台相依的方式。在此实例中,将在所述GPU上实施所述执行模型的管线拓扑的所述平台相依的方式是基于GPU的平台。所述指令还致使所述一个或多个处理器将所述指令传输到所述GPU。
在一个实例中,本发明描述一种设备。所述设备包含图形处理单元(GPU)和处理器。所述处理器包含用于接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑的装置。所述处理器还包含用于产生指令的装置,所述指令指示将在GPU上实施所述执行模型的管线拓扑的平台相依的方式。在此实例中,将在所述GPU上实施所述执行模型的管线拓扑的所述平台相依的方式是基于GPU的平台。所述处理器还包含用于将所述指令传输到所述GPU的装置。所述处理器还包含用于将所述指令传输到所述GPU的装置。
一个或一个以上实例的细节陈述于附图及以下描述中。其它特征、目标和优点将从所述描述和图式以及权利要求书而显而易见。
附图说明
图1是说明执行模型的实例的概念图。
图2是说明根据本发明中所描述的一或多个实例的装置的实例的框图。
图3是说明根据本发明所描述的一或多个实例的实例技术的流程图。
图4是进一步详细地说明图2的装置的框图。
具体实施方式
图形处理单元(GPU)可经配置以并行地快速并且有效地处理数据。开发者可以在GPU上执行的应用的形式开发数据处理算法。举例来说,GPU可包含着色器处理器,其经配置以执行一或多个应用。这些应用的实例包含着色器程序,例如顶点着色器、壳着色器、几何着色器、以及与图形处理相关的其它此类应用。
此外,某些应用开发者可认为采用GPU的大型并行度且在GPU上执行非图形相关应用是有益的。举例来说,由GPU提供的处理平行度可适合于执行并行矩阵操作,甚至当所述矩阵操作与图形处理不相关时也如此。非图形相关应用的其它实例包含与流体动力学或线性代数相关的技术,其中并行操作的快速执行可为有益的。所述非图形相关应用还可在所述着色器处理器上执行。
能够执行此类非图形相关应用的GPU可被视为通用GPU(GPGPU)。举例来说,当GPU执行非图形相关应用时相关申请案所述GPU充当GPGPU。大部分GPU可经配置以充当GPGPU。
出于说明的目的,本发明相对于充当GPGPU的GPU描述多种技术。然而,所述技术不限于其中GPU充当GPGPU(即,执行非图形相关应用)的例子,并且所述技术还可适用于其中GPU执行图形相关应用的例子。此外本发明中描述的技术可由任何类型的处理单元实施,例如中央处理单元(CPU)、加速器、或任何其它定制的装置。虽然相对于GPU所述技术,但应理解,所述技术可扩展到其它类型的处理单元。
GPU内的着色器处理器可包含多个着色器核心(还被称作可编程计算单元以指示这些核心可执行用于图形及非图形相关应用两者的指令)。所述可编程计算单元中的每一者可包含为了将由所述可编程计算单元执行的指令以及由指令的执行而产生的数据(例如,在指令的执行期间而产生的中间结果)而保留的本地存储器。所述可编程计算单元的本地存储器可能不可由其它可编程计算单元存取。在一些情况下,将在GPU上执行的不同应用可由不同可编程计算单元执行。
在本发明中描述的技术中,图形相关应用被称作着色器,并且非图形相关应用被称作内核。举例来说,着色器(即,图形相关应用)的实例包含(但不限于)顶点着色器、片段着色器及几何着色器。内核(即,非图形相关应用)的实例包含用以执行矩阵操作、流体动力学、图像处理操作、视频处理操作及类似者的应用。
此外,所述内核不一定需要限于仅由执行的应用,而是还包含GPU的固定功能单元(即,非可编程单元)。仅出于说明的目的,本发明中描述的技术是相对于所述内核是在GPU上执行的应用来描述的。举例来说,所述技术是相对于在GPU的着色器处理器上执行的非图形相关应用来描述的,使得GPU充当GPGPU。
内核可包含工作群组、任务或线程(其全部在本发明中同义地使用)。举例来说,线程可为所述内核的可与所述内核的另一线程独立地执行的一组指令。在一些实例中,为了执行内核,可编程计算单元中的一或多者可各自执行所述内核的一或多个线程。举例来说第一可编程计算单元可执行所述内核的第一线程,并且第二可编程计算机单元可执行同一内核的第二线程。在一些实例中,一个可编程计算单元可执行一个内核的一或多个线程,而另一可编程计算单元执行另一内核的一或多个线程。在一些实例中,所述两者的组合可为可能的(即,某些可编程计算单元执行同一内核的不同线程,而某些其它可编程计算单元执行不同内核的线程)。
虽然GPU提供处理的大规模平行度,但例如内核的开发者等开发者可认为难以开发在各种类型的GPU上以管线方式有效地执行的内核。以管线方式执行内核意味着执行内核以使得由一个内核产生的数据由另一内核消耗。作为另一实例,以管线方式执行内核意味着执行内核的线程,其产生将由同一内核的另一线程消耗的数据。在本发明中,产生所述数据的线程可被称为产生者线程并且接收所述数据的线程可被称为消费者线程。
在一些实例中,所述产生者线程及所述消费者线程可为同一内核的线程。在一些实例中,所述产生者线程及所述消费者线程可为不同内核的线程。在这些实例中,包含所述产生者线程的内核可被称为产生者内核,并且包含所述消费者线程的内核可被称为消费者内核。
作为一个实例,为了实施数据处理算法,例如图像处理或视频处理,开发者可开发多个内核,其中每一内核实施整个算法的一部分。第一内核可接收待处理的数据(例如,非图形相关数据)、处理所述数据,并且输出所述数据以供第二内核消耗。所述第二内核可接收由所述第一内核输出的数据、进一步处理所述数据,并且输出所述数据以供第三内核消耗,以此类推。
在此实例中,所述第一、第二和第三内核可被设想为形成管线,借此第一内核(例如,产生者内核)产生将由第二内核(例如,从第一内核的角度的消费者内核)消耗的数据。所述第二内核产生将由第三内核消耗的数据。在此实例中,所述第二内核是从所述第三内核的角度的产生者内核,并且所述第三内核是消费者内核。以此方式,GPU可以管线方式执行所述第一、第二和第三内核。
在一些实例中,以管线方式执行内核可意味着依序执行所述内核(例如,执行第一内核,接着执行第二内核,接着执行第三内核,以此类推)。然而,本发明中描述的技术不限于此。在一些实例中,以管线方式执行内核可意味着并行地(例如,同时或在实际上重叠)执行内核。举例来说,GPU可同时执行所述第一、第二和第三内核中的两者或更多者,即使第二内核是第一内核的消费者内核,并且第三内核是第二内核的消费者内核也如此。
虽然开发者可能够开发以管线方式执行以实施数据处理算法的内核,但开发者可能不能够确保所述内核跨各种类型的GPU的最佳执行。举例来说,开发者可编写在处理器上执行的指令。这些指令致使处理器指令所述GPU何时执行内核。如上文所描述,所述内核可在一或多个计算单元上执行;然而,开发者可能不知道特定GPU上可用的计算单元的数目,或更一般来说,不知道特定GPU的并行处理能力。
在此情况下,开发者可不能够预先确定内核应何时执行,因为开发者不知晓所述GPU的处理能力。此可导致开发者编写不同指令,所述指令各自指定给不同类型的GPU。举例来说,开发者可编写在所述处理器上执行的第一组指令,所述指令特定针对于第一GPU类型。举例来说,如果第一类型包含三个计算单元,那么所述第一组指令可界定将在GPU上使用三个计算单元执行内核的方式。开发者还可编写在处理器上执行的第二组指令,所述指令特定针对于第二GPU类型。举例来说,如果第二类型包含四个计算单元,那么所述第二组指令可界定将在GPU上使用四个计算单元执行内核的方式。
在一些实例中,不针对不同的GPU类型编写指令,开发者可仅针对一种类型的GPU(例如,假定最差情况情境GPU)编写指令。在这些实例中,仅一种类型的GPU可能够有效地实施数据处理算法,并且其它GPU类型可能不有效地实施所述数据处理算法。
换句话说,可能不存在开发者可编写指令的致使内核以有效方式在GPU上执行的平台独立方式。而是,开发者可能编写在其它GPU类型上低效地执行的通用指令(例如,其不取决于GPU类型)。否则,开发者可编写产生非便携指令的平台相依的指令。举例来说,开发者可能必须针对不同GPU类型中的每一者编写单独的指令,其可为过度繁琐的。
本发明中描述的技术允许有效地执行内核而以平台独立方式实施数据处理算法(即,用于异构计算)。在本发明中描述的技术中,异构计算涉及以平台独立方式进行计算。如更详细描述的,根据本发明中描述的技术,开发者指定内核的管线执行模型来用于实施所述数据处理算法。
为了指定所述管线执行模型,开发者可界定所述管线的拓扑。所述管线的拓扑可被视为包含互连的内核及缓冲器的执行图表。举例来说,如果第一内核将产生将由第二内核消耗的数据。开发者可界定所述拓扑以使得所述第一内核耦合到缓冲器,例如先入先出(FIFO)缓冲器,并且所述缓冲器耦合到所述第二内核。在此实例中,所述执行图表可指示第一内核将把数据输出到缓冲器,并且第二内核将从缓冲器接收数据。
除了界定所述拓扑之外,开发者还可界定所述拓扑的特征以作为执行模型的一部分。作为一个实例,开发者可界定每一内核的放大因数。所述放大因数可指示所述内核将针对所述内核将接收的给定量的数据而产生的最大量的数据。举例来说,如果所述放大因数对于内核是五,并且所述内核接收两个数据包,那么所述内核将产生的最大量的数据是十个数据包。
作为另一实例,开发者可界定所述缓冲器的大小。举例来说,开发者可界定缓冲器的宽度(例如,可存储在缓冲器的存储位置内的数据的量)及缓冲器的长度(例如,缓冲器内的存储位置的数目)。
以此方式,开发者可界定用于数据处理算法的平台独立的执行模型。举例来说,开发者可不需要顾及将在其上实施数据处理算法的特定GPU。而是,每一GPU类型的执行模型可为相同的。
本发明中描述的技术可允许开发者以有限制的方式界定执行模型。举例来说,开发者可充分界定需要哪些内核,且哪些内核形成为产生者内核及哪些内核形成为消费者内核。以有限制的方式界定所述执行模型可被视为界定静态执行模型(例如,在执行之前界定的执行模型)。
以有限制的方式界定所述执行模型与以无限制的方式界定执行模型相比可实现计算效率上的增益。在执行模型的无限制的界定中,开发者在执行之前可不界定将需要的内核的数目,或哪些内核将是产生者内核及哪些内核将是消费者内核(即,不界定所述内核之间的互连)。与有限制的执行模型相比,此可产生无限制的执行模型的次最佳性能。
举例来说,在本发明中描述的技术中,处理器可接收执行模型且可将所述执行模型编译为可由GPU处理的目标代码(即,二进制代码)。所述编译步骤可为平台相依的步骤。举例来说,处理器可被预先配置有信息,所述信息指示将在其上实施数据处理算法的GPU的处理能力。作为一个实例,处理器可被预先配置有指示GPU内的计算单元的数目的信息。
在编译步骤中,处理器可产生用于元调度器的指令。元调度器可为在GPU上执行的软件或可为GPU内的硬件。用于所述元调度器的指令可界定将执行所述执行模型的方式。在此实例中,因为所述执行模型可为有限制的(例如,内核的数目及内核的互连是已知的)且处理器可被预先配置有指示的处理能力的信息,所以编译器可能够界定用于所述元调度器的指令,所述指令优化GPU实施所述执行模型的方式。对于无限制的执行模型,内核的数目及其相应的互连可不是已知的,且编译器可不能够恰当地优化GPU上的执行模型的执行。
图1是说明执行模型的实例的概念图。举例来说,图1说明执行模型10。开发者可界定用以实施数据处理算法的执行模型10。举例来说,开发者可界定用以实施图像处理、视频处理、线性代数操作,或计算流体动力学的算法的执行模型10。一般来说开发者可界定用以实施任何数据处理算法的执行模型10,所述数据处理算法利用由图形处理单元(GPU)提供的大规模并行计算效率,包含用于非图形相关目的。在其中GPU实施非图形相关算法的实例中,GPU可被视为像通用GPU(GPGPU)一样起作用。
如所说明,执行模型10包含缓冲器12A到12D及内核14A到14C。在一些实例中,可存在比图1中说明的缓冲器及内核更多或更少的缓冲器及内核。缓冲器12A到12D的实例包含(但不限于)先入先出(FIFO)缓冲器及环形缓冲器。
内核14A-14C的实例包含由开发者开发的应用,所述应用实施执行模型10经界定以实施的整个数据处理算法的至少一部分。开发者可利用任何编程语言来开发内核14A到14C。
可存在开发者可界定执行模型10的各种方式。作为一个实例,开发者可在例如桌上型计算机或膝上型计算机等计算装置上界定执行模型。开发者可在呈现图形用户接口(GUI)的计算装置上执行应用。开发者可利用所述GUI以图1中所说明的方式将缓冲器12A到12D及内核14A到14C互连。此外,开发者可利用所述GUI界定缓冲器12A到12D及内核14A到14D的特性。
作为另一实例,开发者可根据特定应用处理接口(API)来界定利用命令的执行模型。此类API的实例包含的API、Khronos集团的,及Khronos集团的;然而,本发明的方面不限于DirectX、OpenGL或OpenCL API,而是可扩展到已经开发、当前正在开发,或将来待开发的其它类型的API。此外,不需要本发明中描述的技术根据API而起作用。
举例来说,命令可包含指示开发者正在界定执行模型的命令。所述命令还可包含允许开发者界定缓冲器12A到12D及内核14A到14C属于执行模型10且界定将缓冲器12A到12D及内核14A到14C互连的方式的命令。
在任一实例(即,基于GUI或基于命令)中,在其上开发者界定的执行模型10可转换执行模型10的计算装置包含指定执行模型10的拓扑的命令列表。举例来说,如所说明,内核14A接收来自缓冲器12A的数据、处理所述数据,且将所述数据存储在缓冲器12B及12C中。内核14B接收来自缓冲器12B的数据、处理所述数据,且将所述数据存储在缓冲器12D中。内核14C接收来自缓冲器12D及12C的数据且处理所述数据。
以此方式,缓冲器12A到12D以及内核14A到14C经配置为计算管线。举例来说,内核14A是内核14B和14C的产生者内核。内核14B是内核14A的消费者内核及内核14C的产生者内核。内核14C是内核14A和14B两者的消费者内核。
为了辅助理解,图1可被视为说明执行模型10的管线拓扑。举例来说,开发者可被视为界定执行图表,所述执行图表界定执行模型10的管线拓扑。在此执行图表中,内核14A到14C可被视为与缓冲器12A到12D互连的节点。
在一些实例中,开发者还可将不同的执行模型互连。举例来说,不是界定用于数据处理算法的一个执行模型,开发者可开发多个执行模型,其中每一执行模型实施数据处理算法的一部分。在这些实例中,执行模型中的每一者内的内核可实施整个数据处理算法的所述部分的子部分。开发者可以类似于将内核14A到14C及缓冲器12A到12D互连的方式将实施执行模型互连。举例来说,开发者可将缓冲器12A互连到另一执行模型且/或将内核14C互连到另一执行模型。
界定多个执行模型可为有益的。如更详细地描述,处理器可将例如执行模型10等执行模型编译为目标代码且存储所得的目标代码。在其中执行模型10是多个执行模型中的一者的实例中,处理器可能不需要重新编译执行模型10。换句话说,可将执行模型视为用于整个数据处理算法的建筑块,或可界定数据处理算法的整体。于是不需要针对其中使用执行模型的每个例子重新编译通常使用的执行模型。
除了界定执行模型10的拓扑之外,开发者还可界定缓冲器12A到12D及内核14A到14D的特性。开发者可使用上文所描述的GUI或基于命令的格式来界定所述特性。开发者可界定缓冲器12A到12D内的存储位置的数目(即,缓冲器12A到12D的长度)。开发者还可界定可存储于缓冲器12A到12D的每一存储位置内的数据量(即,缓冲器12A到12D的宽度)。
在一些实例中,开发者可界定缓冲器12A到12D的尺寸。举例来说,例如卷积等一些图像处理技术发生在像素块(例如,7×7像素块)上。在这些实例中,缓冲器12A到12D是二维缓冲器从而以块形式存储像素可为有益的。举例来说,如果像素块是7×7像素块,那么缓冲器12A到12D中的一或多者可被配置有7×7个存储位置(即,配置为二维缓冲器),而不是具有49个存储位置的线性缓冲器。
对于内核14A到14C,作为一个实例,开发者可界定放大因数。所述放大因数可指示所述内核针对所述内核所消耗的给定数据量而产生的最大数据量。举例来说,如果内核14B的所述放大因数是二,并且内核14B从缓冲器12B接收五个数据包,那么内核14B将产生的最大数据量是十个数据包。作为另一实例,对于内核14A到14C中的一或多者,开发者还可界定内核将产生的最大数据量(例如,独立于所接收的数据量)。
作为又另一实例,开发者可将相对重要性指派给内核14A到14C。举例来说,所述重要性可指示内核14A到14C中的哪一者应无中断地执行,使得内核14A到14C中的更重要的内核无中断地执行,而内核14A到14C中的较不重要的内核可无中断地或中断地执行(即,间歇地暂停所述执行以可用于其它执行)。
内核14A到14C及缓冲器12A到12D的特性是出于说明的目的而描述,切不应被视为是限制性的。开发者可能不需要界定上文所描述的所有实例特性。举例来说,开发者可能界定缓冲器12A到12D的大小(例如,长度和宽度),且不界定内核14A到14C的任何特性。在这些实例中,内核14A到14C产生或消耗的数据量可为不重要的,因为缓冲器12A到12D的大小已经界定。作为另一实例,开发者可界定内核14A到14C产生的数据的放大因数或最大量,且不界定缓冲器12A到12D的任何特性。在这些实例中,编译执行模型10的处理器可能够基于内核14A到14C产生的数据的所述放大因数和/或最大量而确定缓冲器12A到12D的大小。而且,在这些实例中,编译执行模型10的处理器可能够确定缓冲器12A到12D是应为一维(即,线性)缓冲器还是多维缓冲器。
一般来说,开发者或处理器可确定内核14A到14C和缓冲器12A到12D的特性以避免“死锁”情形,同时确保缓冲器12A到12D不过大。当消费者内核期望未存储于消费者内核从其接收数据的缓冲器中的数据时,或当缓冲器数据溢出时(因为产生者内核比消费者内核消耗数据更快地存储数据),可发生死锁情形。在死锁情形中,内核可“悬挂”,且停止实施数据处理算法,除非采取额外的步骤来确保内核不在死锁情形中悬挂。在一些例子中,界定内核14A到14C及缓冲器12A到12D的特性可为较佳的,使得不发生死锁,而不是配置GPU来实施额外的任务来避免在发生死锁时悬挂。
开发者或处理器界定大小相对大的缓冲器12A到12D来减轻死锁可为可能的。然而,如果缓冲器12A到12D的大小不必要地大,那么处理器可能要比所需的存储器空间为缓冲器12A到12D保留多得多的存储器空间,这可导致低效的存储器使用。
因此,通过界定缓冲器12A到12D和/或内核14A到14C的特性,开发者可能够界定执行模型10,使得降低死锁的机会,同时有效地使用存储器。以此方式,开发者可界定完全有限制的静态执行模型10。举例来说,开发者可在实施之前界定实施执行模型10所需的内核14A到14C及缓冲器12A到12D的数目以及缓冲器12A到12D和/或内核14A到14C的特性,而不是动态地(即,在实施期间)界定实施执行模型10所需的内核和缓冲器的数目。
开发者可将执行模型10存储在包含实施数据处理算法的GPU的装置上。举例来说,开发者可存储命令列表,所述命令列表指定包含GPU的装置上的执行模型10的管线拓扑。在一些实例中,开发者不将执行模型10存储在装置上,装置的用户可下载执行模型10以供存储在装置上。一般来说,包含实施数据处理算法的GPU的装置存储执行模型10的方式可不是对本发明中所描述的技术的约束。换句话说,可利用任何技术将执行模型10(例如,执行模型10的命令的列表)存储在包含将在其上实施数据处理算法的GPU的装置上。举例来说,开发者在其上界定执行模型10的计算装置是包含将实施数据处理算法的GPU的相同计算装置可甚至是可能的。
如更详细地描述,包含GPU的装置还可包含处理器。所述处理器可接收执行模型10且将执行模型10编译为目标代码,GPU将执行所述目标代码来实施由执行模型10界定的数据处理算法。根据本发明中所描述的技术,处理器可在虑及GPU的处理能力的情况下编译执行模型10。
因此,开发者可以平台独立的方式界定执行模型10的管线拓扑(即,不考虑将实施数据处理算法的GPU的类型)。包含GPU的装置的处理器可基于执行模型10产生指令,所述指令界定GPU将实施执行模型10的方式。举例来说,处理器可编译执行模型10,且产生指令以作为所述编译的部分。在执行模型10的编译期间,处理器可虑及GPU的处理能力。以此方式,处理器可优化执行模型10以用于在GPU上实施。这可允许开发者将执行模型10开发为产生高度便携的执行模型的灵活且容易理解的方式(即,可有效地实施于不同类型的GPU上以用于异构计算的模型)。开发者可不需要在GPU的平台专有或实施方案界定的行为中关注自身。
此外,以有限制的方式界定孩子厦门行10可允许对执行模型10进行某一内置的调试。作为一个实例,界定执行模型10可减少死锁的机会,如上文所描述。另外,对于无限制的执行模型,以下情况可为可能的:开发者界定第一内核以输出将由第二内核消耗的数据,且在实施期间无意地界定第二内核以致使第一内核执行,使得所述第一内核消耗由第二内核产生的数据。这实际上产生无限循环。对于无限制的执行模型,可不存在在实施之前确定此情形存在的方式。
然而,在有限制的执行模型10的情况下,开发者可能够容易地避免产生此类无限循环。举例来说,开发者可能够在GUI上查看他或她曾创建此无限循环。作为另一实例,当应用将执行模型10的管线拓扑转换为执行模型10的命令列表时,所述应用可能够确定是否存在任何此类无限循环。
图2是说明根据本发明中所描述的一或多个实例的装置的实例的框图。举例来说,图2说明装置16。装置16的实例包含,但不限于,例如媒体播放器等视频装置、机顶盒、例如移动电话等无线手持机、个人数字助理(PDA)、桌上型计算机、膝上型计算机、游戏控制台、视频会议单元、平板计算装置等。装置16可包含除了图2中所说明的组件之外的组件。
如所说明,装置16包含集成电路(IC)18和全局存储器20。全局存储器20可被视为装置16的存储器。举例来说,全局存储器20可在IC 18的外部,且IC 18和全局存储器20可经由系统总线36进行通信。存储装置20可包括一或多个计算机可读存储媒体。全局存储器20的实例包含,但不限于,随机存取存储器(RAM),或可用于以指令和/或数据结构的形式携载或存储所需的程序代码且可由计算机或处理器存取的任何其它媒体。
在一些方面中,全局存储器20可包含致使处理器22和/或图形处理单元(GPU)24执行归于本发明中的处理器22和GPU 24的功能的指令。因此,全局存储器20可为其上存储有指令的计算机可读存储媒体,所述指令在被执行时致使一或多个处理器(例如,处理器22和GPU 24)执行各种功能。
在一些实例中,全局存储器20可被视为非暂时性存储媒体。术语“非暂时性”可指示所述存储媒体未体现于载波或所传播信号中。然而,术语“非暂时性”不应被解释为意味着全局存储器20是非可移动的或其内容是静态的。作为一个实例,全局存储器20可从装置16被移除,且移动到另一装置。作为另一实例,大体上类似于全局存储器20的全局存储器可插入到装置16中。在某些实例中,非暂时性存储媒体可存储可随着时间改变的数据(例如,在RAM中)。
IC 18包含处理器22和图形处理单元(GPU)24。IC 18可包含额外的组件,例如用以与全局存储器20通信的接口单元、用以管理全局存储器20内的存储器的单元,及例如显示器处理器等其它处理单元。IC 18可为收容或形成处理器22和GPU 24的任何类型的集成电路。举例来说,IC 18可被视为芯片封装内的处理芯片。
虽然处理器22和GPU 24被说明为单个IC 18的部分,但本发明的方面不限于此。在一些实例中,处理器22和GPU 24可被收容在不同的集成电路(即,不同的芯片封装)中。
处理器22和GPU 24的实例包含,但不限于,数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路。在一些实例中,GPU 24可为专用硬件,其包含向GPU 24提供适合于图形处理的大规模并行处理能力的集成和/或离散逻辑电路。在一些例子中,GPU 24还可在实施通用处理任务(即,非图形相关任务)时包含通用处理,且可被称作通用GPU(GPGPU)。
处理器22(有时被称作主机)可为装置16的中央处理单元(CPU)。处理器22可执行各种类型的应用。所述应用的实例包含网络浏览器、电子阅读器、电子邮件应用、电子表格、视频游戏、视频回放、音频回放、文字处理、产生可观看的对象以供显示的其它应用,或任何其它类型的应用。全局存储器20可存储用于执行一或多个应用的指令。
在一些实例中,处理器22可将处理任务卸载到GPU 24,例如需要大规模并行操作的任务。作为一个实例,图形处理需要大规模并行操作,且处理器22可将此些图形处理任务卸载到GPU 24。在一些实例中,处理器22可将与图形处理无关的任务卸载到GPU 24。举例来说,例如矩阵操作、图像处理及视频处理等数据处理算法需要并行操作,且GPU 24与处理器22相比可更好地适合于实施此些操作。
为了实施任务,GPU 24可经配置以执行一或多个应用。举例来说,对于图形相关处理,GPU 24可执行例如顶点着色器、片段着色器和几何着色器等应用。对于非图形相关应用,GPU 24可执行针对此处理设计的应用(例如,用于实施矩阵操作的应用或用于流体动力学的应用)。对于任一实例(例如,图形相关处理或非图形相关处理),处理器22可指令GPU 24执行所述一或多个应用,如下文更详细地描述。
处理器22可根据特定应用处理接口(API)与GPU 24通信。举例来说,处理器22可将指令传输到GPU 24,例如指令GPU 24执行利用API的一或多个应用的指令。此类API的实例包含的API、Khronos集团的,及Khronos集团的;然而,本发明的方面不限于DirectX、OpenGL或OpenCLAPI,而是可扩展到已经开发、当前正在开发,或将来待开发的其它类型的API。此外,不需要本发明中描述的技术根据API而起作用,且处理器22和GPU 24可利用任何技术进行通信。
作为一个实例,对于图形相关应用,处理器22可使用OpenGLAPI与GPU 24通信。对于非图形相关应用,处理器22可使用OpenCLAPI与GPU 24通信。再次,本发明中所描述的技术不一定需要处理器22使用OpenGL和/或OpenCLAPI与GPU 24通信。
GPU 24将执行的图形相关应用可被称作着色器,且GPU 24将执行的非图形相关应用可被称作内核。举例来说,全局存储器20可存储着色器和内核的指令,且在处理器14上执行的编译器可将着色器和内核的指令转换为目标代码以供在GPU 16上执行。作为另一实例,全局存储器20可存储GPU 16检索且执行的着色器和内核的目标代码。
如图2中所说明,全局存储器20存储执行模型10(图1)。举例来说,全局存储器20可存储界定执行模型10的管线拓扑的命令列表。如上文所描述,开发者可已将执行模型10的管线拓扑界定为包含内核14A到14C。因此,全局存储器20可存储内核14A到14C的源代码。替代地或另外,全局存储器20可存储内核14A到14C的经预编译的源代码(即,内核14A到14C的目标代码)。应理解,如果开发者将执行模型界定为包含更多或更少的内核或不同的内核,那么全局存储器20可存储那些内核的源代码和/或目标代码。内核14A和14C之间的椭圆形指示内核14B也包含于全局存储器20中。
在此实例中,处理器22可从全局存储器20检索执行模型10的管线拓扑。基于执行模型10的管线拓扑,处理器22可确定执行模型10包含缓冲器12A到12D。在此实例中,处理器22可为缓冲器12A到12D保留全局存储器20中的存储位置。举例来说,执行模型10的部分可包含缓冲器12A到12D的大小,例如缓冲器12A到12D的大小。在此实例中,处理器22可基于缓冲器12A到12D的特性来保留全局存储器20中的存储位置。缓冲器12A和12D之间的椭圆形指示缓冲器12B和12C也包含于全局存储器20中。
作为另一实例,执行模型10的部分可包含内核14A到14C的特性,例如内核14A到14C产生的数据的放大因数和/或最大量。在此实例中,处理器22可基于内核14A到14C的特性来保留全局存储器20中的存储位置。举例来说,基于放大因数和/或指示内核14A到14C产生的数据的最大量的值,处理器22可确定缓冲器12A到12D的适当大小且基于所确定的大小来保留全局存储器20内的存储位置。
应注意,虽然处理器22被描述为为缓冲器12A到12D保留全局存储器20内的存储位置,但本发明的方面不限于此。在一些实例中,IC 18或GPU 24可包含管理单元(图2中未展示),所述管理单元经配置以管理由GPU 24用来实施由执行模型10界定的数据处理算法的缓冲器。在这些实例中,处理器22可关于缓冲器12A到12D的大小来指令管理单元,且管理单元可经配置以为缓冲器12A到12D保留全局存储器内的存储位置。
此管理单元可经配置以执行其它功能,例如高速缓冲支持存储于缓冲器12A到12D中的数据和/或IC 18或GPU 24的高速缓冲存储器内的内核14A到14C的指令。此管理单元还可存储指示存储于缓冲器12A到12D中的每一者中的数据的量的信息。此管理单元可经配置以当在GPU 24上执行时管理内核14A到14C之间的数据传递。举例来说,如图1中所说明,执行模型10的管线拓扑指示内核14A输出到缓冲器12B且内核14B从缓冲器12B接收数据。管理单元可经配置以管理由内核14B产生的数据在缓冲器12B中的存储,及内核14B从缓冲器12B对数据的检索,且在一些实例中,管理存储于缓冲器12B中的数据的量的存储。关于管理单元的技术还描述于2013年1月23日申请的标题为“图形处理单元缓冲器管理(GRAPHICS PROCESSING UNIT BUFFERMANAGEMENT)”的第13/747,947号共同待决的美国专利申请案中,所述申请案的内容以全文引用的方式并入。
提供对管理单元的利用以用于实例目的,且不应被视为限制性的。举例来说,将管理单元描述为除了处理器22之外的单元保留全局存储器20中的用于缓冲器12A到12D的存储位置的一个实例方式。然而,本发明的方面不限于此,且处理器22或甚至GPU 24可经配置以执行此些功能。举例来说,当GPU 24将数据存储在缓冲器12A到12D中时,GPU 24可经配置以还存储GPU 24存储于缓冲器12A到12D中的量的数据。为了易于描述,关于执行此些功能的处理器22或GPU 24来描述所述技术。
根据本发明中所描述的的技术,处理器22可接收由执行模型10界定的管线拓扑的指示(例如,作为一个实例,执行模型10的命令列表)。处理器22可产生界定GPU 24将实施管线拓扑的方式的指令。
举例来说,如所说明,处理器22可执行编译器28。编译器28以虚线展示以指示编译器28未形成于处理器22内。而是,全局存储器20可存储编译器28的对象,处理器22检索且执行所述对象。
编译器28可经配置以编译执行模型10(例如,执行模型10的命令列表)以产生GPU24将执行的目标代码,以及界定GPU 24将实施执行模型10的方式的指令。作为用以产生界定GPU 24将实施执行模型10的方式的指令的编译的部分,编译器28可虑及GPU24的处理能力。
举例来说,如所说明,全局存储器20可存储GPU配置32。GPU配置32可为界定或指示GPU 24的处理能力的配置信息。作为一个实例,GPU配置32可指示GPU 24内的可编程计算单元的数目。如上文所描述,内核在GPU内的一或多个可编程计算单元上执行。
作为另一实例,GPU配置32可指示GPU 24能够并行地处理数据的方式。举例来说,GPU 24可经配置以实施单程序多数据(SPMD)编程模型或单指令多数据(SIMD)编程模型。作为实例,如果GPU 24经配置以用于SIMD编程模型,那么GPU配置32可包含指示GPU 24内的用于实施SIMD编程模型的通道的数目的配置信息(例如,8通道SIMD)。
GPU信息32可包含额外的或不同于上文所描述的信息的GPU 24的配置信息。一般来说,GPU配置32可包含描述GPU 24的处理能力的任何配置信息。
此外,虽然GPU配置32被说明为存储于全局存储器20中,但本发明的方面不限于此。在一些实例中,IC 18内的寄存器或高速缓冲存储器可存储GPU配置32。在一些实例中,GPU 24内的寄存器或高速缓冲存储器可存储GPU配置32。在这些实例两者中,处理器22可从寄存器而不是从全局存储器20读取GPU配置32的信息。在一些实例中,处理器22甚至有可能被预先配置有GPU配置32。
编译器28可利用GPU配置32的信息以及执行模型10的信息来编译执行模型10。编译的结果可为GPU 24将执行的目标代码,以及用于GPU 24将实施执行模型10的方式的指令。举例来说,除了目标代码之外,编译器28的输出可为处理器22存储在全局存储器20中的元调度器指令34。元调度器指令34可为用于元调度器30的指令,如更详细地描述,其指示GPU 24实施执行模型10的方式。
举例来说,元调度器指令34可指示GPU 24将实施类似于卡恩处理网络(KPN)的执行模型10。举例来说,KPN确定包含数据的通道、识别用于所述通道的消费者、执行所述消费者以用于某一量的数据,且重复这些步骤,直到所有数据被处理为止。执行模型10的拓扑可界定内核(类似于KPN的过程)及缓冲器(类似于KPN的通道)。以此方式,执行模型10指示用于缓冲器中的每一者的消费者内核。如更详细地描述,在实施执行模型10中,GPU 24可识别缓冲器12A到12D中的包含数据的一者,且可执行将消耗缓冲器12A到12D中的所识别的一者的数据的消费者内核(例如,内核14A到14C中的一者)。应理解,仅出于实例原因而提供KPN的描述且辅助理解。本发明中所描述的技术不应被视为受限于或等同于KPN的技术。
根据所述技术,元调度器指令34可为装置-目标二进制的。换句话说,在执行模型10可为平台独立的时(即,非GPU 24专有的),元调度器指令34是平台相依的(即,GPU24专有的)。举例来说,编译器28可利用来自GPU配置32的信息来优化执行模型10在GPU 24上的实施。
作为一个实例,编译器28可利用例如GPU 24的可编程计算单元的数目等信息来确定内核14A到14C将在GPU 24的可编程计算单元上执行的时间。举例来说,如上文所描述,由执行模型10界定的数据处理算法的管线实施方案可包含对内核14A到14C中的一或多者的并行执行(例如,同时)或对内核14A到14C中的一或多者的依序执行(例如,一个接一个)。在此实例中,编译器28可产生元调度器指令34,所述元调度器指令指示在不存在许多可用的可编程计算单元的情况下内核14A到14C应依序执行或在存在许多可用的可编程计算单元的情况下应并行地执行。
作为另一实例,编译器28可利用来自执行模型10的指示内核14A到14C中的某些内核比其它内核更重要的信息。举例来说,假设内核14B比内核14C更重要。在此实例中,编译器28可利用来自GPU配置34的信息来产生元调度器指令34,所述元调度器指令确保内核14B无中断地执行,即使其导致内核14C以某些中断执行也如此。
举例来说,可编程计算单元可能有可能从一个内核的执行线程切换到另一内核的执行线程,且随后切换回。在此情况下,可编程计算单元从其切换的内核可被视为中断的且处于暂停状态中,直到可编程计算单元切换回以执行所述内核的线程为止。在一些实例中,编译器28可产生元调度器指令34,所述元调度器指令指示执行重要内核的线程的可编程计算单元将不切换到执行另一内核的线程。
作为又另一实例,编译器28可利用来自GPU配置34的指示GPU 24内的数据通道的数目的信息。举例来说,假设GPU配置34指示GPU 24是八通道SIMD GPU。在此实例中,编译器28可产生元调度器指令34,所述元调度器指令指示GPU 24不应执行消费者内核,直到在耦合到消费者内核的缓冲器中存在至少八个入口为止。举例来说,如图1中所说明,内核14B是内核14A的消费者内核,且从缓冲器12B接收数据。假设GPU 24是八通道SIMD GPU,编译器28可产生元调度器指令34,所述元调度器指令指示GPU 24不应执行内核14B,直到存在存储于缓冲器12B中的至少八个数据项目为止。
作为额外的实例,编译器28可虑及缓冲器12A到12D的大小。举例来说,编译器28可利用关于缓冲器12A到12D的大小的信息来确定内核14A到14C应何时执行,使得死锁的改变被最小化。在此实例中,编译器28可产生指示内核14A到14C执行以使得不发生死锁的次序的元调度器指令34。
在一些实例中,编译器28可经配置以确定在于GPU 24上实施执行模型10中是否存在任何错误。举例来说,编译器28可经配置以确定是否存在作为执行模型10的部分但未耦合到内核14A到14D中的任一者的任何缓冲器12A到12D。作为另一实例,编译器28可经配置以确定内核14A到14C中的任一者是否试图存取不存在的缓冲器,或试图存取缓冲器内的出界的存储位置。在编译器28在编译时间验证执行模型10的功能性的情况下,编译器28可不需要在元调度器指令34中包含致使GPU 24验证执行模型10的功能性的指令。
在处理器22经由编译器28产生元调度器指令34之后,处理器22可指令GPU 24检索元调度器指令34以供执行。如所说明,GPU 24包含元调度器30。元调度器30可为GPU 24内的硬件、在GPU 24内的硬件上执行的固件,或在GPU 24内的硬件上执行的软件。元调度器30可经配置以执行元调度器指令34的指令。
在本发明中所描述的技术中,元调度器30可经配置以确定GPU 24的哪些可编程计算单元应执行内核14A到14C的哪些线程以及在什么时间执行。换句话说,元调度器30可经配置以在GPU 24上调度内核14A到14C的执行,以致使GPU 24实施由执行模型10的管线拓扑界定的数据处理算法。根据本发明中所描述的技术,元调度器30可基于元调度器指令34来确定在GPU 24上执行内核14A到14C的调度。
举例来说,元调度器指令34可指示将并行地或依序执行内核14A到14C中的一或多者。在此实例中,元调度器30可确定哪些可编程计算单元应执行内核14A到14C的线程以实现并行或依序执行。作为另一实例,元调度器指令34可指示内核14A到14C的重要性。在此实例中,元调度器30可确定哪些可编程计算单元应执行内核14A到14C的线程,使得执行重要的内核的可编程计算单元在执行内核时不被中断。作为另一实例,元调度器指令34可基于GPU 24的SIMD或SPMD能力来指示内核14A到14C中的一者将何时执行。在此实例中,元调度器30可基于元调度器指令34的指令来确定哪些可编程计算单元在什么时间执行线程。元调度器30还可利用元调度器指令34中的指示内核14A到14C应何时执行的时序的指令来避免死锁。
重申,编译器28可已基于在产生元调度器指令34中的GPU配置32中的信息而考虑到GPU 24的计算能力。因此,本发明中所描述的技术提供了元调度器30将能够适当地分配可编程计算单元从而以元调度器34所指示的方式执行内核14A到14C的某一确保水平。举例来说,如上文所描述,编译器28可虑及若干因素,例如GPU 24内的可编程计算单元的数目、缓冲器12A到12D的大小、GPU 24的SIMD或SPMD能力,或内核14A到14C的重要性(作为一些说明性实例),从而产生元调度器指令34。当GPU 24的元调度器30利用元调度器指令34来确定将如何执行内核14A到14C时,可存在内核14A到14C将在GPU 24上有效地执行的某一保证。
以此方式,处理器22可接收执行模型10的管线拓扑的指示,其中执行模型10是以平台独立的方式界定的。处理器22可执行编译器28,所述编译器虑及GPU 24的处理能力而产生元调度器指令34,这以平台特定的方式界定将在GPU 24上如何实施执行模型10的管线拓扑。GPU 24的元调度器30可接收元调度器指令34且基于元调度器指令34的指令来确定哪些可编程计算单元以及在什么时间执行内核14A到14C的线程。
因为元调度器指令34是平台专有的,所以元调度器指令34可界定将执行内核14A到14C的方式,其导致GPU 24上的执行模型10的管线拓扑的最佳实施。举例来说,如果元调度器指令34是由与GPU 24不同类型的GPU使用,那么此不同类型的GPU可能不有效地实施执行模型10的管线拓扑,因为元调度器指令34是GPU 24的平台专有的。
在一些实例中,元调度器30可经配置以实施执行政策。举例来说,可能不需要在编译器28的每个实例中确切地界定何时将执行内核14A到14C。而是,编译器28产生的元调度器指令34可指示内核14A到14C将在GPU 24上执行且可指示哪些内核14A到14C是产生者内核且哪些是消费者内核。
在这些实例中,元调度器30可经配置以实施指示内核14A到14C何时将执行的执行政策。执行政策的一个实例是元调度器30确定缓冲器12A到12D中的哪些缓冲器存储数据,且执行内核14A到14C中的从存储数据的缓冲器12A到12D接收数据的一或多个内核。举例来说,元调度器30可以循环的方式检查缓冲器12A到12D,且可执行消耗来自存储数据的缓冲器12A到12D的数据的所有内核。
作为执行政策的另一实例,元调度器30可基于内核14A到14C的重要性而确定哪些缓冲器12A到12D存储数据。内核14A到14C的重要性可由内核14A到14C的优先级界定。元调度器30可首先检查缓冲器12A到12D中的内核14A到14D中的具有最高优先级的内核从其接收数据的缓冲器。如果所述缓冲器正在存储数据,那么元调度器30可执行具有最高优先级的内核。接下来,元调度器30可检查缓冲器12A到12D中的内核14A到14D中的具有下一最高优先级的内核从其接收数据的缓冲器。如果所述缓冲器正在存储数据,那么元调度器30可执行具有所述下一最高优先级的内核,且依此类推。
作为执行政策的又另一实例,元调度器30可确定缓冲器12A到12D中的哪一者存储最多量的数据。元调度器30可执行内核14A到14C中的从缓冲器12A到12D中的存储最多量的数据的缓冲器接收数据的内核。作为一个实例,当GPU 24将数据写入到缓冲器12A到12D中的一者时,GPU 24可存储指示存储于缓冲器12A到12D中的GPU 24曾将数据写入到的缓冲器中的数据量的信息。在这些实例中,元调度器30可经配置以基于GPU 24存储的指示缓冲器12A到12D内的数据量的信息来确定缓冲器12A到12D中的哪一者存储最多量的数据。
然而,不需要预先配置元调度器30来实施执行政策。而是,编译器28可有可能确定元调度器30的执行政策以作为由编译器28产生的元调度器指令34的指令。
另外,开发者可有可能界定元调度器30的执行政策。举例来说,开发者可界定元调度器30的执行政策以作为执行模型10的部分,且编译器28可利用此开发者界定的执行政策来产生元调度器指令34的指令,所述指令关于开发者界定的执行政策来指令元调度器30。
然而,开发者不界定执行政策可为更合适的。举例来说,如果开发者将界定执行政策,那么所述执行政策可能不以平台独立的方式良好地起作用。开发者可能难以开发针对所有GPU类型良好地起作用且产生决定性应用中的相同功能结果(例如,针对相同应用跨不同的GPU类型的相同结果)的执行政策。
一般来说,只要内核14A到14C适当地执行以实施由执行模型10界定的数据处理算法,开发者可能不特定关注于执行政策。因此,可能并不关注开发者是否无法界定执行政策以及编译器28确定执行政策。
在上文所描述的实例中,编译器28编译执行模型10以产生将在GPU 24上执行的目标代码且产生元调度器指令34。在一些实例中,编译器28可将待在GPU 24上执行的目标代码存储在全局存储器20中。在其中执行模型10是多个执行模型中的一个执行模型的实例中,编译器28可能不需要重新编译执行模型10。换句话说,可有可能通过组合多个执行模型,且在一些实例中,通过组合存储在全局存储器20中的执行模型的目标代码,来创建较大的数据处理算法。举例来说,可从存储在全局存储器20中的执行模型的目标代码创建数据处理算法。数据处理算法的此创建对于其中GPU 24是FPGA或嵌入式装置的实例来说可为有用的。
在本发明中所描述的技术中,除了指令GPU 24检索元调度器30的元调度器指令34之外,处理器22可向GPU 24提供GPU 24执行内核14A到14C所需的任何额外信息。举例来说,除了来自缓冲器12A到12D的数据之外,内核14A到14C可能需要额外的信息(例如,自变量)以起作用。处理器22可将此额外的信息提供给GPU 24。
处理器22可随后指令GPU 24实施执行模型10。GPU 24可随后基于元调度器指令34的指令以及处理器22作为编译器28的编译过程的部分而产生的目标代码来实施执行模型10。在一些实例中,GPU 24可能够在不与处理器22进行任何同步的情况下实施执行模型10。举例来说,处理器22可起始执行模型10的实施,且GPU 24可在不与处理器22进行任何同步的情况下实施执行模型10。
另外,在一些实例中,可有可能在调试模式中配置编译器28和元调度器30。举例来说,在开发者开发执行模型10之后,开发者可能需要在发行之前测试执行模型在GPU上的实施。为了测试,开发者可将执行模型10加载在例如装置16等装置上,且在GPU24上测试执行模型10。作为测试的部分,开发者可利用调试模式。在调试模式中,编译器28可产生元调度器指令34,所述元调度器指令将缓冲器12A到12D的存储位置的范围缩减到单个存储位置(例如,将NDrange大小减小到最小值)。元调度器指令34还可指示一次仅内核14A到14C中的一者将执行。
在调试模式中,开发者可能够跟踪将数据存储在缓冲器12A到12D中的方式以及在GPU 24上执行内核14A到14C中的每一者的方式。此可允许开发者解决内核14A到14C中的任何问题或执行模型10中的任何问题。
如上文所描述,编译器28可产生元调度器指令34。以下内容是执行模型10的元调度器指令34的实例伪代码。在一些实例中,编译器28产生元调度器指令34而不是给予开发者产生元调度器指令34的能力可为有益的。举例来说,如果开发者将产生元调度器指令34,那么执行模型10可不是便携的且可导致混乱及难以调试的用户错误。
在以下伪代码中,F1是指缓冲器12A,F2是指缓冲器12B,F3是指缓冲器12C,且F4是指缓冲器12D。K1是指内核14A,K2是指内核14B,且K3是指内核14C。
图3是说明根据本发明所描述的一或多个实例的实例技术的流程图。举例来说,图3说明用于异构计算(例如,以平台独立的方式计算)的技术。为了易于说明,参考图2。
如图3中所说明,处理器22可接收以平台独立的方式界定数据处理算法的执行模型10的管线拓扑的指示(38)。举例来说,执行模型10的管线拓扑的指示可为由执行模型10的开发者创建的命令列表。对数据处理算法的平台独立的界定意味着执行模型10不是基于GPU的特定平台而设计(例如,独立于将实施数据处理算法的GPU的类型)。
处理器22的编译器28可编译指定管线拓扑的命令列表以产生元调度器指令34(40)。元调度器指令34可指示GPU 24将实施执行模型10的管线拓扑的平台相依的方式。GPU24将实施管线拓扑的平台相依的方式意味着元调度器指令是基于如由GPU配置32指示的GPU 24的特定平台(例如,基于GPU 24的GPU类型)。处理器22可传输用以指令GPU 24实施执行模型10的管线拓扑的指令(42)。
可存在处理器22可经由编译器28产生元调度器指令34的各种方式。作为一个实例,编译器28可至少部分基于GPU 24的配置信息来编译命令列表以产生指令,所述指令界定将在GPU 24上实施执行模型10的管线拓扑的平台相依的方式。GPU配置32可提供GPU 24的配置信息。举例来说,所述配置信息可包含GPU 24内的可编程计算单元的数目。所述配置信息可包含GPU 24中的数据通道的数目(例如,GPU 24的SIMD或SPMD能力)。
在一些实例中,编译器28可基于在执行模型10中提供的信息来编译命令列表。举例来说,编译器28可基于执行模型10的管线拓扑中所识别的缓冲器(例如,缓冲器12A到12D)的大小来编译命令列表以产生元调度器指令34。作为另一实例,编译器28可基于执行模型10的管线拓扑中所识别的内核(例如,内核14A到14C)的重要性来编译命令列表以产生元调度器指令34。
应理解,出于说明的目的而提供利用例如GPU 24中的可编程计算单元、GPU 24中的数据通道的数目、缓冲器12A到12D的大小及内核14A到14C的重要性等因素的编译器28,且不应被视为是限制性的。另外,编译器28可单独地或以任何组合利用因素中的任一者。举例来说,编译器28不需要在产生元调度器指令34中利用这些因素中的仅一者。而是,编译器28可利用这些因素中的一者、这些因素中的一或多者,及这些因素的任何组合来产生元调度器指令34。
图4是进一步详细地说明图2的装置的框图。举例来说,图4进一步说明装置16。装置16的实例包含,但不限于,无线装置、移动电话、个人数字助理(PDA)、包含视频显示器的视频游戏控制台、移动视频会议单元、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置,及电子书阅读器等。装置16可包含处理器22、GPU 24、全局存储器20、显示器44、用户接口46,及收发器模块48。处理器22及GPU 24可被收容在共同IC 18内,或可被单独地收容,如图4中所说明。另外,如所说明,处理器22可执行编译器28来产生元调度器指令34,且GPU 24包含经配置以实施元调度器指令34的指令的元调度器30。
装置16可包含图4中出于清楚起见而未展示的额外模块或单元。举例来说,装置16可包含扬声器和麦克风(其任一者都未在图4中展示),从而在其中装置16是移动无线电话的实例中实现电话通信。此外,装置16中所展示的各种模块和单元在装置16的每个实例中可能不是必需的。举例来说,在其中装置16是桌上型计算机的实例中,用户接口46和显示器44可在装置16外部。作为另一实例,在其中显示器44是移动装置的触敏显示器或存在敏感显示器的实例中,用户接口46可为显示器44的部分。
全局存储器20、处理器22、GPU 24、编译器28及元调度器30可类似于全局存储器20、处理器22、GPU 24、编译器28及元调度器30且未关于图4进一步描述。用户接口46的实例包含(但不限于)跟踪球、鼠标、键盘,以及其它类型的输入装置。用户接口46还可为触摸屏且可被集成为显示器44的一部分。收发器模块48可包含用以允许装置16与另一装置或网络之间的无线或有线通信的电路。收发器模块48可包含调制器、解调器、放大器以及用于有线或无线通信的其它此类电路。显示器44可包括液晶显示器(LCD)、阴极射线管(CRT)显示器、等离子显示器、触敏显示器、存在敏感显示器,或另一类型的显示器装置。
在一或多个实例中,所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件实施,那么所述功能可作为一或多个指令或代码存储在计算机可读媒体上或经由计算机可读媒体进行传输且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体(其对应于例如数据存储媒体等有形媒体)或通信媒体,通信媒体包含促进(例如)根据通信协议将计算机程序从一处传递到另一处的任何媒体。以此方式,计算机可读媒体一般可对应于(1)非暂时性的有形计算机可读存储媒体或(2)例如信号或载波等通信媒体。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索指令、代码和/或数据结构来用于实施本发明中所描述的技术的任何可用媒体。计算机程序产品可包含计算机可读媒体。
举例来说且并非限制,所述计算机可读媒体可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,快闪存储器,或可用于存储呈指令或数据结构的形式的所要程序代码且可由计算机存取的任何其它媒体。同样,可恰当地将任何连接称作计算机可读媒体。举例来说,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)或例如红外线、无线电及微波的无线技术从网站、服务器或其它远程源传输软件,则同轴电缆、光纤电缆、双绞线、DSL或例如红外线、无线电及微波的无线技术包括于媒体的定义中。然而,应理解,计算机可读存储媒体和数据存储媒体不包含连接、载波、信号或其它瞬时媒体,而是针对于非瞬时的、有形存储媒体。如本文中所使用,磁盘及光盘包括压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软磁盘及蓝光光盘,其中磁盘通常磁性地再现数据,而光盘使用激光光学地再现数据。以上各者的组合也应包括在计算机可读媒体的范围内。
可由例如一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一或多个处理器来执行所述指令。因此,如本文中所使用的术语“处理器”可指前述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可提供于经配置以用于编码及解码的专用硬件模块和/或软件模块内,或并入组合式编解码器中。并且,可将所述技术完全实施于一或多个电路或逻辑元件中。
本发明的技术可实施于广泛多种装置或设备中,包含无线手持机、集成电路(IC)或IC组(例如,芯片组)。本发明中描述各种组件、模块或单元来强调经配置以执行所揭示的技术的装置的若干功能性方面,但不一定需要通过不同的硬件单元来实现。而是,如上文所描述,各种单元可联合合适的软件和/或固件而组合于硬件单元中或通过互操作的硬件单元的集合(包含如上文所描述的一或多个处理器)来提供。
已描述各种实例。这些及其它实例属于所附权利要求书的范围内。
Claims (20)
1.一种用于异构计算的方法,所述方法包括:
使用处理器接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑;
使用所述处理器产生指示将在图形处理单元GPU上实施所述执行模型的所述管线拓扑的平台相依的方式的指令,其中将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式是基于所述GPU的平台;及
使用所述处理器将所述指令传输到所述GPU。
2.根据权利要求1所述的方法,其中产生指令包括:
编译指定所述执行模型的所述管线拓扑的命令列表以产生所述指令。
3.根据权利要求2所述的方法,其中编译所述命令列表包括:
至少基于所述GPU的配置信息来编译所述命令列表以产生界定将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式的所述指令。
4.根据权利要求3所述的方法,其中所述GPU的所述配置信息包括以下各者中的一或多者:
所述GPU内的可编程计算单元的数目;及
所述GPU中的数据通道的数目。
5.根据权利要求2所述的方法,其中编译所述命令列表包括:
至少基于以下各者中的一或多者来编译所述命令列表:
所述执行模型的所述管线拓扑中所识别的缓冲器的大小;及
所述执行模型的所述管线拓扑中所识别的内核的重要性。
6.根据权利要求1所述的方法,其中接收所述管线拓扑包括:
接收命令列表,所述命令列表指示经互连以形成所述管线拓扑的一或多个内核及一或多个缓冲器。
7.一种设备,其包括:
图形处理单元GPU;及
处理器,其经配置以:
接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑的指示;
产生指示将在所述GPU上实施所述执行模型的所述管线拓扑的平台相依的方式的指令,其中将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式是基于所述GPU的平台;及
将所述指令传输到所述GPU。
8.根据权利要求7所述的设备,其中,为了产生所述指令,所述处理器经配置以:
编译指定所述执行模型的所述管线拓扑的命令列表。
9.根据权利要求8所述的设备,其中,为了编译所述命令列表,所述处理器经配置以:
至少基于所述GPU的配置信息来编译所述命令列表以产生界定将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式的所述指令。
10.根据权利要求9所述的设备,其中所述GPU的所述配置信息包括以下各者中的一或多者:
所述GPU内的可编程计算单元的数目;及
所述GPU中的数据通道的数目。
11.根据权利要求8所述的设备,其中,为了编译所述命令列表,所述处理器经配置以:
至少基于以下各者中的一或多者来编译所述命令列表:
所述执行模型的所述管线拓扑中所识别的缓冲器的大小;及
所述执行模型的所述管线拓扑中所识别的内核的重要性。
12.根据权利要求7所述的设备,其中,为了接收所述管线拓扑,所述处理器经配置以:
接收命令列表,所述命令列表指示经互连以形成所述管线拓扑的一或多个内核及一或多个缓冲器。
13.根据权利要求7所述的设备,其中所述设备包括以下各者中的一者:
媒体播放器;
机顶盒;
无线手持机;
桌上型计算机;
膝上型计算机;
游戏控制台;
视频会议单元;及
平板计算装置。
14.一种计算机可读存储媒体,所述计算机可读存储媒体上存储有指令,所述指令在由一或多个处理器执行时致使所述一个或多个处理器:
接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑;
产生指示将在图形处理单元GPU上实施所述执行模型的所述管线拓扑的平台相依的方式的指令,其中将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式是基于所述GPU的平台;及
将所述指令传输到所述GPU。
15.根据权利要求14所述的计算机可读存储媒体,其中所述致使所述一或多个处理器产生指令的指令包括:
致使所述一或多个处理器编译指定所述执行模型的所述管线拓扑的命令列表以产生所述指令的指令。
16.根据权利要求15所述的计算机可读存储媒体,其中所述致使所述一或多个处理器编译所述命令列表的指令包括:
致使所述一或多个处理器至少基于所述GPU的配置信息来编译所述命令列表以产生界定将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式的所述指令的指令。
17.根据权利要求16所述的计算机可读存储媒体,其中所述GPU的所述配置信息包括以下各者中的一或多者:
所述GPU内的可编程计算单元的数目;及
所述GPU中的数据通道的数目。
18.根据权利要求15所述的计算机可读存储媒体,其中所述致使所述一或多个处理器编译所述命令列表的指令包括:
致使所述一或多个处理器至少基于以下各者中的一或多者来编译所述命令列表的指令:
所述执行模型的所述管线拓扑中所识别的缓冲器的大小;及
所述执行模型的所述管线拓扑中所识别的内核的重要性。
19.一种设备,其包括:
图形处理单元GPU;及
处理器,其包括:
用于接收以平台独立的方式界定数据处理算法的执行模型的管线拓扑的装置;
用于产生指示将在所述GPU上实施所述执行模型的所述管线拓扑的平台相依的方式的指令的装置,其中将在所述GPU上实施所述执行模型的所述管线拓扑的所述平台相依的方式是基于所述GPU的平台;及
用于将所述指令传输到所述GPU的装置。
20.根据权利要求19所述的设备,其中所述用于产生指令的装置包括:
用于编译指定所述执行模型的所述管线拓扑的命令列表以产生所述指令的装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261603771P | 2012-02-27 | 2012-02-27 | |
US61/603,771 | 2012-02-27 | ||
US13/777,663 US9430807B2 (en) | 2012-02-27 | 2013-02-26 | Execution model for heterogeneous computing |
US13/777,663 | 2013-02-26 | ||
PCT/US2013/028029 WO2013130614A1 (en) | 2012-02-27 | 2013-02-27 | Execution model for heterogeneous cpu-gpu computing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104137070A true CN104137070A (zh) | 2014-11-05 |
CN104137070B CN104137070B (zh) | 2017-07-21 |
Family
ID=49002356
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380010528.0A Expired - Fee Related CN104137070B (zh) | 2012-02-27 | 2013-02-27 | 用于异构cpu‑gpu计算的执行模型 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9430807B2 (zh) |
EP (1) | EP2820540B1 (zh) |
JP (1) | JP6077018B2 (zh) |
CN (1) | CN104137070B (zh) |
WO (1) | WO2013130614A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776014A (zh) * | 2016-11-29 | 2017-05-31 | 科大讯飞股份有限公司 | 异构计算中的并行加速方法及系统 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8972923B2 (en) * | 2011-02-08 | 2015-03-03 | Maxeler Technologies Ltd. | Method and apparatus and software code for generating a hardware stream processor design |
US9830163B2 (en) * | 2012-06-08 | 2017-11-28 | Advanced Micro Devices, Inc. | Control flow in a heterogeneous computer system |
US8966510B2 (en) * | 2013-02-04 | 2015-02-24 | International Business Machines Corporation | Kernel execution for hybrid systems |
US9256976B2 (en) * | 2013-07-09 | 2016-02-09 | Intel Corporation | Techniques for extracting and displaying partially processed graphics information |
US9740464B2 (en) * | 2014-05-30 | 2017-08-22 | Apple Inc. | Unified intermediate representation |
US10127499B1 (en) | 2014-08-11 | 2018-11-13 | Rigetti & Co, Inc. | Operating a quantum processor in a heterogeneous computing architecture |
EP3214099A4 (en) | 2014-10-29 | 2018-06-27 | Zeon Corporation | Method for producing conjugated diene polymer |
US9652817B2 (en) | 2015-03-12 | 2017-05-16 | Samsung Electronics Co., Ltd. | Automated compute kernel fusion, resizing, and interleave |
US9983857B2 (en) | 2015-06-16 | 2018-05-29 | Architecture Technology Corporation | Dynamic computational acceleration using a heterogeneous hardware infrastructure |
US9972063B2 (en) * | 2015-07-30 | 2018-05-15 | International Business Machines Corporation | Pipelined approach to fused kernels for optimization of machine learning workloads on graphical processing units |
US10984152B2 (en) | 2016-09-30 | 2021-04-20 | Rigetti & Co, Inc. | Simulating quantum systems with quantum computation |
US10614541B2 (en) | 2017-06-29 | 2020-04-07 | Nvidia Corporation | Hybrid, scalable CPU/GPU rigid body pipeline |
US10726605B2 (en) * | 2017-09-15 | 2020-07-28 | Intel Corporation | Method and apparatus for efficient processing of derived uniform values in a graphics processor |
US10580190B2 (en) | 2017-10-20 | 2020-03-03 | Westghats Technologies Private Limited | Graph based heterogeneous parallel processing system |
US11163546B2 (en) * | 2017-11-07 | 2021-11-02 | Intel Corporation | Method and apparatus for supporting programmatic control of a compiler for generating high-performance spatial hardware |
CN110401598A (zh) * | 2018-04-25 | 2019-11-01 | 中国移动通信集团设计院有限公司 | 管线拓扑自动发现方法、装置及系统 |
US11392687B2 (en) * | 2019-01-04 | 2022-07-19 | Baidu Usa Llc | Method and system for validating kernel objects to be executed by a data processing accelerator of a host system |
US10997686B2 (en) * | 2019-01-09 | 2021-05-04 | Intel Corporation | Workload scheduling and distribution on a distributed graphics device |
CN111159897B (zh) * | 2019-12-31 | 2023-11-03 | 新奥数能科技有限公司 | 基于系统建模应用的目标优化方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578197B1 (en) * | 1998-04-08 | 2003-06-10 | Silicon Graphics, Inc. | System and method for high-speed execution of graphics application programs including shading language instructions |
US7370156B1 (en) * | 2004-11-04 | 2008-05-06 | Panta Systems, Inc. | Unity parallel processing system and method |
US20110043518A1 (en) * | 2009-08-21 | 2011-02-24 | Nicolas Galoppo Von Borries | Techniques to store and retrieve image data |
US20110072245A1 (en) * | 2009-09-23 | 2011-03-24 | Duluk Jr Jerome F | Hardware for parallel command list generation |
CN102640115A (zh) * | 2009-09-03 | 2012-08-15 | 先进微装置公司 | 包括具有多缓冲区以使在着色器核心上不同类型工作能够异步并行分派的指令处理器的图形处理单元 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004171234A (ja) * | 2002-11-19 | 2004-06-17 | Toshiba Corp | マルチプロセッサシステムにおけるタスク割り付け方法、タスク割り付けプログラム及びマルチプロセッサシステム |
US20080204468A1 (en) | 2007-02-28 | 2008-08-28 | Wenlong Li | Graphics processor pipelined reduction operations |
US9354944B2 (en) | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US8669990B2 (en) * | 2009-12-31 | 2014-03-11 | Intel Corporation | Sharing resources between a CPU and GPU |
JP5017410B2 (ja) * | 2010-03-26 | 2012-09-05 | 株式会社東芝 | ソフトウェア変換プログラム、および、計算機システム |
US20110289519A1 (en) | 2010-05-21 | 2011-11-24 | Frost Gary R | Distributing workloads in a computing platform |
US8782645B2 (en) | 2011-05-11 | 2014-07-15 | Advanced Micro Devices, Inc. | Automatic load balancing for heterogeneous cores |
US8683468B2 (en) | 2011-05-16 | 2014-03-25 | Advanced Micro Devices, Inc. | Automatic kernel migration for heterogeneous cores |
US10013731B2 (en) | 2011-06-30 | 2018-07-03 | Intel Corporation | Maximizing parallel processing in graphics processors |
-
2013
- 2013-02-26 US US13/777,663 patent/US9430807B2/en active Active
- 2013-02-27 CN CN201380010528.0A patent/CN104137070B/zh not_active Expired - Fee Related
- 2013-02-27 WO PCT/US2013/028029 patent/WO2013130614A1/en active Application Filing
- 2013-02-27 JP JP2014558964A patent/JP6077018B2/ja not_active Expired - Fee Related
- 2013-02-27 EP EP13710193.7A patent/EP2820540B1/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578197B1 (en) * | 1998-04-08 | 2003-06-10 | Silicon Graphics, Inc. | System and method for high-speed execution of graphics application programs including shading language instructions |
US7370156B1 (en) * | 2004-11-04 | 2008-05-06 | Panta Systems, Inc. | Unity parallel processing system and method |
US20110043518A1 (en) * | 2009-08-21 | 2011-02-24 | Nicolas Galoppo Von Borries | Techniques to store and retrieve image data |
CN102640115A (zh) * | 2009-09-03 | 2012-08-15 | 先进微装置公司 | 包括具有多缓冲区以使在着色器核心上不同类型工作能够异步并行分派的指令处理器的图形处理单元 |
US20110072245A1 (en) * | 2009-09-23 | 2011-03-24 | Duluk Jr Jerome F | Hardware for parallel command list generation |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776014A (zh) * | 2016-11-29 | 2017-05-31 | 科大讯飞股份有限公司 | 异构计算中的并行加速方法及系统 |
CN106776014B (zh) * | 2016-11-29 | 2020-08-18 | 科大讯飞股份有限公司 | 异构计算中的并行加速方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
EP2820540B1 (en) | 2019-04-10 |
US20130222399A1 (en) | 2013-08-29 |
JP6077018B2 (ja) | 2017-02-08 |
US9430807B2 (en) | 2016-08-30 |
WO2013130614A1 (en) | 2013-09-06 |
JP2015513737A (ja) | 2015-05-14 |
CN104137070B (zh) | 2017-07-21 |
EP2820540A1 (en) | 2015-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104137070A (zh) | 用于异构cpu-gpu计算的执行模型 | |
US10942716B1 (en) | Dynamic computational acceleration using a heterogeneous hardware infrastructure | |
CN104081449A (zh) | 用于图形并行处理单元的缓冲器管理 | |
US9658890B2 (en) | Runtime agnostic representation of user code for execution with selected execution runtime | |
US9830134B2 (en) | Generating object code from intermediate code that includes hierarchical sub-routine information | |
US10592218B2 (en) | Dynamic data and compute resource elasticity | |
CN104067225B (zh) | 对用于图形处理单元的具有相关联的纹理加载指令的控制流指令的判定 | |
US10585653B2 (en) | Declarative programming model with a native programming language | |
CN104137076A (zh) | 用于图形处理单元的应用的验证 | |
JP7400169B2 (ja) | ワークロードのスタティックマッピングの順不同にパイプライン化された実行を可能にする方法及び装置 | |
JP2009532760A (ja) | プロセス中心型プログラムにおける非同期フォールト処理 | |
CN111930428B (zh) | 一种条件分支指令的融合方法、装置及计算机存储介质 | |
US20120284701A1 (en) | Efficient conditional flow control compilation | |
US9772887B2 (en) | Composable and cancelable dataflow continuation passing | |
CN112394938A (zh) | 在加速器中配置异构组件的方法和装置 | |
US20210365277A1 (en) | Static reconcilliation of application view hierarchies | |
WO2024039923A1 (en) | Method of compile-time optimization for nested parallel for-loops for deep learning neural network computation | |
CN117331541A (zh) | 面向动态图框架和异构芯片的编译与运行方法和装置 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170721 |