CN102099788A - 用于在多处理器上进行数据并行计算的应用编程接口 - Google Patents
用于在多处理器上进行数据并行计算的应用编程接口 Download PDFInfo
- Publication number
- CN102099788A CN102099788A CN2009801282500A CN200980128250A CN102099788A CN 102099788 A CN102099788 A CN 102099788A CN 2009801282500 A CN2009801282500 A CN 2009801282500A CN 200980128250 A CN200980128250 A CN 200980128250A CN 102099788 A CN102099788 A CN 102099788A
- Authority
- CN
- China
- Prior art keywords
- executable code
- processing
- computing units
- code
- carry out
- 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
- 238000012545 processing Methods 0.000 claims abstract description 248
- 238000000034 method Methods 0.000 claims abstract description 93
- 230000015654 memory Effects 0.000 claims abstract description 26
- 238000003860 storage Methods 0.000 claims description 61
- 230000006870 function Effects 0.000 claims description 47
- 230000004044 response Effects 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 description 116
- 230000000875 corresponding effect Effects 0.000 description 24
- 230000008569 process Effects 0.000 description 23
- 230000015572 biosynthetic process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 14
- 238000009826 distribution Methods 0.000 description 9
- 230000008878 coupling Effects 0.000 description 8
- 238000010168 coupling process Methods 0.000 description 8
- 238000005859 coupling reaction Methods 0.000 description 8
- 238000007667 floating Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 241001310793 Podium Species 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000013011 mating Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- VEMKTZHHVJILDY-UHFFFAOYSA-N resmethrin Chemical compound CC1(C)C(C=C(C)C)C1C(=O)OCC1=COC(CC=2C=CC=CC=2)=C1 VEMKTZHHVJILDY-UHFFFAOYSA-N 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000010422 painting Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- 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
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
-
- 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
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- 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
-
- 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
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
- G06F9/5044—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 considering hardware capabilities
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Abstract
本公开描述了一种用于调用主处理器中的API(应用编程接口)以在计算单元之间并行执行数据处理任务的并行计算程序的方法和设备。计算单元被耦接到包括GPU(图形处理单元)和CPU(中央处理单元)的主处理器。按照API调用在耦接到主处理器的存储器中产生与数据处理任务的源代码相对应的程序对象。按照API调用由程序对象产生针对计算单元的可执行代码以便载入以在计算单元之间同时执行从而执行数据处理任务。
Description
相关申请的交叉引用
本申请涉及以下申请并且要求其权益:Aaftab A.Munshi等人于2008年6月6日提交的标题为“Application Programming Interfaces forData Parallel Computing on Multiple Processors”、申请号为61/059,739的美国临时专利申请,其全部内容通过引用合并于此。
技术领域
本发明一般涉及数据并行计算。更具体地,本发明涉及用于跨CPU(中央处理单元)和GPU(图形处理单元)进行数据并行计算的应用编程接口(API)。
背景技术
随着GPU继续发展成高性能并行计算装置,编写了越来越多的应用程序以在类似于通用计算装置的GPU中执行数据并行计算。目前,这些应用程序被设计成利用厂家特有的接口在特定的GPU上运行。从而,即使当在数据处理系统中,既有GPU又有CPU可用时,这些应用程序也不能利用CPU的处理资源。也不能跨越运行这种应用程序的不同厂家的GPU来利用处理资源。
不过,随着越来越多的CPU包含多个核芯以执行数据并行计算,越来越多的处理任务可由CPU和/或GPU(只要任一个可用)支持。按照惯例,GPU和CPU是通过彼此不兼容的独立编程环境来配置的。多数GPU需要厂家特有的专用程序。结果,应用程序很难利用CPU和GPU两者的处理资源,例如,利用具有数据并行计算能力的GPU以及多芯CPU的处理资源。
因此,在现代数据处理系统中,需要克服上述问题,以使应用程序能够通过利用能够执行任务的任何可用处理资源,诸如CPU和一个或多个GPU,来执行所述任务。
发明内容
本发明的实施例包括用于调用主处理器中的API以在计算单元之间并行执行数据处理任务的并行计算程序的方法和设备,所述计算单元包括耦接到主处理器的GPU(图形处理单元)和CPU(中央处理单元)。按照API调用在耦接到主处理器的存储器中产生与数据处理任务的源代码相对应的程序对象。按照API调用由程序对象产生针对计算单元的可执行代码以便载入以在计算单元之间同时执行从而执行数据处理任务。
根据附图和下面的详细说明,本发明的其它特征将是显而易见的。
附图说明
附图中非限制性地举例说明了本发明,其中相同的附图标记指示相同的元件,其中:
图1是图解说明配置包括CPU和/或GPU的计算装置以便为应用程序执行数据并行计算的系统的一个实施例的方框图;
图2是图解说明具有用以同时执行多个线程的并行操作的多个计算处理器的计算装置的一个例子的方框图;
图3是图解说明利用计算装置标识符的、被配置成一个逻辑计算装置的多个物理计算装置的一个实施例的方框图;
图4是图解说明通过匹配从应用程序接收的能力要求用计算装置标识符配置多个物理计算装置的处理过程的实施例的流程图;
图5是图解说明在逻辑计算装置中执行计算可执行代码的处理过程的实施例的流程图;
图6是图解说明载入可执行代码的运行时处理过程的实施例的流程图,其中包括编译为执行该可执行代码而确定的一个或多个物理计算装置的源代码;
图7是图解说明从执行队列中选择计算内核执行实例以便在和与执行实例相关的逻辑计算装置对应的一个或多个物理计算装置中执行的处理过程的一个实施例的流程图;
图8是图解说明确定最佳的线程组大小以便在多个计算单元之间同时执行计算内核对象的处理过程的一个实施例的流程图;
图9A是图解说明通过按照多个物理计算装置把一个或多个API的源代码和多个可执行代码保存在API库中来构建API(应用编程接口)库的处理过程的一个实施例的流程图;
图9B是图解说明应用程序基于API请求执行从API库获取的多个可执行代码之一连同对应的源代码的处理过程的一个实施例的流程图;
图10是图解说明要在多个物理计算装置中执行的计算内核可执行代码的计算内核源代码的例子的样本源代码;
图11A-11C包括图解说明通过调用API来配置在多个物理计算装置中执行多个可执行代码之一的逻辑计算装置的例子的样本源代码;以及
图12图解说明具有可与这里描述的实施例一起使用的多个CPU和GPU(图形处理单元)的典型计算机系统的一个例子。
具体实施方式
这里描述一种用于多处理器上的数据并行计算的方法和设备。在下面的说明中,陈述了众多的具体细节,以便更透彻地说明本发明的实施例。不过,对本领域普通技术人员来说,显然可在没有这些具体细节的情况下实践本发明的实施例。在其它情况下,未详细说明公知的组件、结构和技术,以避免模糊对本发明的理解。
说明书中对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性可被包括在本发明的至少一个实施例中。在说明书中的各个地方出现的短语“在一个实施例中”不一定都指的是同一个实施例。
在下面的附图中描述的处理由包含硬件(例如,电路、专用逻辑等)和/或软件(诸如,在通用计算机系统或专用机器上运行的软件)的处理逻辑执行。尽管下面是利用一些顺序操作说明所述处理的,但是应认识到这些操作中的一些可按照不同的顺序执行。此外,一些操作可并行执行,而不是顺序执行。
图形处理单元(GPU)是实现高效图形操作,诸如2D、3D图形操作和/或与数字视频相关功能,的专用图形处理器。GPU可包括执行图形操作——例如绘图处理器(blitter)操作、纹理映射、多边形渲染、像素阴影和顶点阴影——的专用(可编程)硬件。已知GPU从帧缓冲器获取数据,并把像素混合在一起,以把图像渲染回到帧缓冲器以便显示。GPU还可控制帧缓冲器,允许帧缓冲器用于刷新显示器,例如CRT或LCD显示器。CRT或LCD显示器是要求以至少为20Hz的速率进行刷新(例如,每1/30秒,用来自帧缓冲器的数据刷新显示器)的短余辉显示器。通常,GPU可从与GPU耦接的CPU获得图形处理任务,以通过显示控制器向显示装置输出光栅图形图像。说明书中对“GPU”的引用可以是如在Lindholdm等人的美国专利No.7015913,“Method and Apparatus forMultitheraded Processing of Data In a Programmable GraphicsProcessor”,和Swan等人的美国专利No.6970206,“Method forDeinterlacing Interlaced Video by A Graphics Processor”中描述的图形处理器或可编程图形处理器,这两件美国专利在此引为参考。
在一个实施例中,多个不同类型的处理器,诸如CPU或GPU可同时执行一个或多个应用程序的数据并行处理任务,以提高数据处理系统中的可用处理资源的利用效率。数据处理系统的处理资源可基于多个物理计算装置,诸如CPU或GPU。物理计算装置可包括一个或多个计算单元。在一个实施例中,数据并行处理任务(或者数据并行任务)可被委托给多种类型的处理器,例如能够执行所述任务的CPU或GPU。数据并行任务可能向处理器要求某些特定的处理能力。例如,处理能力可以是专用纹理化硬件支持,双精度浮点运算,专用局部存储器,流式数据高速缓存或者同步原语。不同类型的处理器可提供不同然而重叠的多组处理能力。例如,CPU和GPU都能够执行双精度浮点计算。在一个实施例中,应用程序能够利用CPU或GPU(不论哪一个可用)来执行数据并行处理任务。
在另一个实施例中,为数据并行处理任务选择和分配多个不同类型的处理资源可在运行时期间内自动执行。应用程序可通过API向数据处理系统的运行时平台发送包括数据处理任务的能力要求的期望列表的提示。按照收到的提示,运行时平台可确定具有能力与收到的提示匹配的多个目前可用的CPU和/或GPU,以委派应用程序的数据处理任务。在一个实施例中,能力要求的列表可取决于基础的数据处理任务。能力要求列表可适用于不同组的处理器或计算单元,例如包括不同厂家和不同版本的GPU和多核芯CPU。从而,可以使应用程序与提供以特定类型的计算单元,诸如CPU或GPU为目标的程序隔离。
此外,在另一个实施例中,可按照数据并行任务的基础问题空间,进行在所选择的计算单元之间分配和分组并行执行的多个线程。分析将在所选计算单元中执行的源代码的表示可确定应如何最佳地划分处理任务和在所选计算单元之间分配该处理任务。API接口可允许应用程序指定应如何通过在所选计算单元之间用线程组执行可执行代码(executable)而执行数据并行任务。另外,通过利用API,应用程序可根据在所选计算单元之间执行数据并行任务的资源要求,获取关于数据并行任务的最佳划分的建议。
图1是图解说明配置包括CPU和/或GPU的计算装置以便为应用程序执行数据并行计算的系统100的一个实施例的方框图。系统100可实现并行计算体系结构。在一个实施例中,系统100可以是包括通过数据总线113与一个或多个中央处理器117和诸如媒体处理器115之类的一个或多个其它处理器耦接的一个或多个主处理器的图形系统。所述多个主处理器可在主系统101中被联网在一起。所述多个中央处理器117可包括来自不同厂家的多核芯CPU。计算处理器或计算单元,诸如CPU或GPU,可以与一组能力相关联。例如,媒体处理器可以是具有专用纹理渲染硬件的GPU。另一种媒体处理器可以是支持专用纹理渲染硬件和双精度浮点运算的GPU。对于可升级连接界面(Scalable Link Interface,SLI)或交叉火力(CrossFire)配置来说,多个GPU可被连接在一起。
在一个实施例中,主系统101可支持软件栈。软件栈可包括软件栈组件,诸如应用程序103,计算平台层111,例如,OpenCL(开放式计算语言)平台,计算运行时层109,计算编译器107和计算应用程序库105。应用程序103可通过API调用与其它栈组件接口。对于主系统101中的应用程序103,一个或多个线程可同时运行。计算平台层111可保持数据结构,或者计算装置数据结构,从而保存每个附接的物理计算装置的处理能力。在一个实施例中,应用程序可通过计算平台层111,获取与主系统101的可用处理资源有关的信息。应用程序可通过计算平台层111,选择和指定执行处理任务的能力要求。因此,计算平台层111可确定物理计算装置的配置,以为处理任务分配和初始化源自于附接的CPU 117和/或GPU 115的处理资源。在一个实施例中,计算平台层111可产生与所配置的一个或多个实际的物理计算装置对应的用于应用程序的一个或多个逻辑计算装置。
计算运行时层109可按照所配置的用于应用程序103的处理资源,例如,基于一个或多个逻辑计算装置,管理处理任务的执行。在一个实施例中,执行处理任务可包括创建代表所述处理任务的计算程序对象,和分配用于保持可执行代码、输入/输出数据等的存储资源。为计算程序对象载入的可执行代码可以是计算程序可执行代码。计算程序可执行代码可被包括在将在计算处理器或计算单元,诸如CPU或GPU,中执行的计算程序对象中。计算运行时层109可与所分配的物理装置交互,以实现处理任务的实际执行。在一个实施例中,计算运行时层109可按照为处理任务配置的每个处理器,诸如CPU或GPU,的运行时状态,协调执行来自不同应用程序的多个处理任务。计算运行时层109可根据所述运行时状态,从被配置成执行处理任务的物理计算装置中选择一个或多个处理器。执行处理任务可包括同时在多个物理计算装置中执行一个或多个可执行代码的多个线程。在一个实施例中,计算运行时层109可通过监控每个处理器的运行时执行状态,跟踪每个所执行的处理任务的状态。
运行时层可从应用程序103载入作为与处理任务对应的计算程序可执行代码的一个或多个可执行代码。在一个实施例中,计算运行时层109自动从计算应用程序库105载入执行处理任务所需的其它可执行代码。计算运行时层109可从应用程序103或计算应用程序库105载入计算程序对象的可执行代码及与可执行代码对应的源程序。计算程序对象的源程序可以是计算程序源代码(source)。可按照被配置成包括多个类型和/或不同版本的物理计算装置的逻辑计算装置,载入基于单一计算程序源代码的多个可执行代码。在一个实施例中,计算运行时层109可激活计算编译器107,以在线把载入的源程序编译成为被配置成执行可执行代码的目标处理器(例如CPU或GPU)优化的可执行代码。
除了按照对应的源程序的现有可执行代码之外,还可保存在线编译的可执行代码以供未来调用。另外,可执行代码可被离线编译,并利用API调用被载入到计算运行时层109。计算应用程序库105和/或应用程序103可响应于来自应用程序的库API请求,载入相关的可执行代码。可为计算应用程序库105或者为应用程序103,动态更新新编译的可执行代码。在一个实施例中,对于新升级版本的计算装置,计算运行时层109可用通过计算编译器107在线编译的新的可执行代码,替换应用程序中的现有计算程序可执行代码。计算运行时层109可插入在线编译的新的可执行代码,以更新计算应用程序库105。在一个实施例中,当载入处理任务的可执行代码时,计算运行时109可调用计算编译器107。在另一个实施例中,计算编译器107可被离线调用,以建立计算应用程序库105的可执行代码。计算编译器107可编译和链接计算内核程序,以产生计算程序可执行代码。在一个实施例中,计算应用程序库105可包括支持例如开发工具包和/或图像处理的多个函数。每个库函数可对应于多个物理计算装置的计算程序源代码和保存在计算应用程序库105中的一个或多个计算程序可执行代码。
图2是图解说明具有并行操作以同时执行多个线程的多个计算处理器(例如,计算单元)的计算装置的一个例子的方框图。每个计算处理器可并行(或者同时)执行多个线程。可在一个计算处理器或计算单元中并行执行的线程可被称为线程组。一个计算装置可具有能够被并行执行的多个线程组。例如,图中表示了M个线程,以作为一个线程组在计算装置205中执行。多个线程组,例如计算处理器_1 205的线程1和计算处理器L203的线程N可跨一个计算装置上的不同计算处理器或者跨多个计算装置而并行执行。跨多个计算处理器的多个线程组可并行执行计算程序可执行代码。多于一个的计算处理器可以单芯片,诸如ASIC(专用集成电路)装置为基础。在一个实施例中,可以跨多个芯片,在多于一个的计算处理器中同时执行来自应用程序的多个线程。
计算装置可包括一个或多个计算处理器或计算单元,诸如处理器1205和处理器_L 203。局部存储器可以与计算处理器耦接。在运行于计算处理器中的单个线程组中的线程之间共用的局部存储器可由与计算处理器耦接的局部存储器支持。来自不同线程组的多个线程,诸如线程 1 213和线程N 209可共用保存在与计算装置201耦接的计算装置存储器217中的计算存储对象,诸如流。计算装置存储器217可包括全局存储器和常数存储器。全局存储器可被用于分配计算存储对象,诸如流。计算存储对象可包括可由计算程序可执行代码操作的数据元素集合。计算存储对象可代表图像,纹理,帧缓冲器,一组标量数据类型,一组用户定义的结构,或者变量等等。常数存储器可以是保存计算程序可执行代码经常使用的常数变量的只读存储器。
在一个实施例中,用于计算处理器或计算单元的局部存储器可被用于分配由线程组中的所有线程或者线程组共用的变量。局部存储器可被实现成专用局部存储装置,诸如处理器_1的局部共用存储器219,和处理器_L的局部共用存储器211。在另一个实施例中,计算处理器的局部存储器可被实现成计算装置的一个或多个计算处理器的计算装置存储器的读-写高速缓存,诸如计算装置201中的计算处理器205,203的数据高速缓存215。专用局部存储器不被不同线程组的线程共用。如果计算处理器,诸如处理器_1 205的局部存储器被实现成读-写高速缓存,例如数据高速缓存215,那么表明在该局部存储器中的变量可以分配自计算装置存储器217,并被高速缓存在实现该局部存储器的读-写高速缓存,诸如数据高速缓存215中。当例如读-写高速缓存和专用局部存储装置都不可供对应的计算装置利用时,线程组内的线程可共用在计算装置存储器217中分配的局部变量。在一个实施例中,每个线程与保存由在该线程中调用的函数所使用的线程私有变量的专用存储器关联。例如,除线程1213外的线程看不到专用存储器1211。
图3是图解说明利用计算装置标识符被配置成一个逻辑计算装置的多个物理计算装置的一个实施例的方框图。在一个实施例中,应用程序303和平台层305可运行于主CPU 301中。应用程序303可以是图1的应用程序103之一。主系统101可包括主CPU 301。每个物理计算装置Physical_Compute_Device-1 305至Physical_Compute_Device-N 311可以是图1的CPU 117或GPU 115之一。在一个实施例中,计算平台层111可响应于来自应用程序303的API请求,产生计算装置标识符307,以便按照包括在API请求中的能力要求的列表,配置数据并行处理资源。计算装置标识符307可涉及按照计算平台层111的配置选择实际物理计算装置Physical_Compute_Device-1305至Physical_Compute_Device-N311。在一个实施例中,逻辑计算装置309可代表与主CPU 301分离的一组所选择的实际物理计算装置。
图4是图解说明通过匹配从应用程序接收的能力要求,用计算装置标识符配置多个物理计算装置的处理400的实施例的流程图。例证处理400可由可包含硬件(电路,专用逻辑等)、软件(诸如在专用机器上运行的软件)或其组合的处理逻辑执行。例如,可按照由主系统101托管的数据处理系统中的图1的系统100执行处理400。该数据处理系统可包括托管平台层,诸如图1的计算平台层111的主处理器,和附接在所述主处理器上的多个物理计算装置,诸如图1的CPU 117和GPU 115。
在方框401,在一个实施例中,处理400的处理逻辑可建立代表与一个或多个对应能力相关的多个物理计算装置的数据结构(或者计算装置数据结构)。每个物理计算装置可被附接到执行处理400的处理逻辑的处理系统。物理计算装置,诸如CPU或GPU的能力或者计算能力可包括该物理计算装置是否支持某一处理特征,存储器访问机制,指定扩展(namedextension)或者相关限制。处理特征可以涉及专用纹理化硬件支持,双精度浮点运算或者同步支持(例如,互斥)。
计算装置的能力可包括指示与计算装置相关的处理特性或限制的类型。应用程序可指定一种所需的计算装置,或者利用API询问特定计算装置的类型。不同类型的计算装置的例子示于下表中:
表1
另外,计算装置的能力可包括,例如,如下表中所示的配置值:
表2
物理处理装置的存储器访问机制可与变量高速缓存的类型(例如,不支持,只读,或者读-写)、计算存储对象高速缓存的类型、支持的高速缓存的大小、支持的专用局部存储器或者有关限制相关。存储器访问限制可包括计算程序可执行代码能够同时读取或写入的计算存储对象的最大数目,能够被分配的计算存储对象的最大数目,或者沿着多维计算存储对象的一维的最大大小,例如,2D(二维)图像的计算存储对象的最大宽度。数据处理系统的系统应用程序可响应于把新的物理计算装置附接到数据处理系统而更新数据结构。在一个实施例中,物理计算装置的能力可以是预先确定的。在另一个实施例中,数据处理系统的系统应用程序可在运行时期间发现新附接的物理处理装置。系统应用程序可获取新发现的物理计算装置的能力,以更新代表所附接的物理计算装置及其对应能力的数据结构。
按照一个实施例,在方框403,处理400的处理逻辑可从应用程序接收计算能力要求。应用程序可通过调用API,把计算能力要求发送给系统应用程序。系统应用程序可对应于应用程序的主系统中的软件栈的平台层。在一个实施例中,计算能力要求可识别请求处理资源以执行应用程序的任务的所需能力的列表。在一个实施例中,应用程序可要求所请求的处理资源同时在多个线程中执行所述任务。作为响应,在方框405,处理400的处理逻辑可从所附接的物理计算装置中选择一组物理计算装置。所述选择可根据计算能力要求与保存在能力数据结构中的计算能力之间的匹配来确定。在一个实施例中,处理400的处理逻辑可按照由能力要求所提供的提示,进行所述匹配。
处理400的处理逻辑可按照在物理计算装置和计算能力要求之间匹配的计算能力的数目,确定匹配分数。在一个实施例中,处理400的处理逻辑可选择匹配分数最高的多个物理计算装置。在另一个实施例中,如果能力要求中的每个能力都匹配,那么处理400的处理逻辑可选择一个物理计算装置。在方框405,处理400的处理逻辑可确定多组匹配的物理计算装置。在一个实施例中,按照每个装置的负载平衡能力,选择每组匹配的物理计算装置。在方框407,在一个实施例中,处理400的处理逻辑可产生在方框405选择的每组物理计算装置的计算装置标识符。处理400的处理逻辑随后通过调用的API,把一个或多个所产生的计算装置标识符返回给应用程序。应用程序可按照计算装置标识符,选择哪些处理资源用于执行任务。在一个实施例中,对于每个接收到的能力要求,处理400的处理逻辑可在方框407产生最多一个计算装置标识符。
在方框409,在一个实施例中,处理400的处理逻辑可按照对应的计算装置标识符,分配资源以初始化在方框405选择的一组物理计算装置的逻辑计算装置。逻辑计算装置可以是包括一个或多个物理计算装置的一个计算装置组。处理400的处理逻辑可响应于来自接收与在方框405的选择相对应的一个或多个计算装置标识符的应用程序的API请求,进行初始化逻辑计算装置。处理400的处理逻辑可创建关于应用程序的逻辑计算装置的上下文对象。可按照当创建上下文对象时在API请求中规定的参数,按次序地(例如,同步地)或者无序地(例如,异步地)执行作用于上下文对象的计算存储对象、计算程序对象和/或计算程序可执行代码的命令。可利用API请求,为上下文对象启动作用于计算存储对象、计算程序或计算内核的概要命令(profiling command)。在一个实施例中,上下文对象与运行应用程序的主系统中的一个应用程序线程相关。在一个逻辑计算装置中,或者跨不同的逻辑计算装置同时执行处理任务的多个线程可以基于独立的上下文对象。
在一个实施例中,处理400的处理逻辑可以基于包括clCreateContext,clRetainContext和clReleaseContext的多个API。APIclCreateContext创建计算上下文。计算上下文可对应于计算上下文对象。API clRetainContext通过把由上下文识别的特定计算上下文用作clRetainContext的输入自变量,而递增实例的数目。API clCreateContext进行隐含的保留。这非常有益于第三方库,第三方库一般获得由应用程序传给它们的上下文。不过,应用程序也可删除上下文,而不通知所述库。允许多个实例附接到上下文和脱离上下文解决了库使用的计算上下文不再有效的问题。如果clRetainContext的输入自变量不对应于有效的计算上下文对象,那么clRetainContext返回CU_INVALID_CONTEXT。API clReleaseContext使实例与有效的计算上下文分离。如果clReleaseContext的输入自变量不对应于有效的计算上下文对象,那么clReleaseContext返回CU_INVALID_CONTEXT。
图5是图解说明在逻辑计算装置中执行计算可执行代码的例证处理500的实施例的流程图。在一个实施例中,处理500可由数据处理系统中的运动时层,例如图1的计算运行时层109执行。在方框501,处理500的处理逻辑可分配逻辑计算装置中的一个或多个计算存储对象(例如,流),以执行计算可执行代码。计算存储对象可包括表示例如图像存储对象或者阵列存储对象的一个或多个数据元素。阵列存储对象可以是数据元素的一维集合。图像存储对象可以是保存二维、三维或者其它多维数据,诸如纹理、帧缓冲器或图像的集合。处理任务可由通过利用计算存储API,其中包括从输入的计算存储对象读取和写入输出的计算存储对象,作用于计算存储对象或流的计算程序可执行代码执行。在一个实施例中,计算存储对象可附着于数据对象,诸如缓冲器对象,纹理对象或渲染缓冲器对象,以便利用计算存储API更新数据对象。数据对象可以与激活对数据对象的图形数据处理操作,诸如文本渲染的API相关。
当分配计算存储对象时,处理500的处理逻辑可按照API中的指定,确定分配应存在于何处。例如,可在主存储器,诸如图1的主系统101的主存储器,和/或计算装置存储器,诸如图2的全局存储器或常数存储器217之外分配计算存储对象。在主存储器中分配的计算存储对象需要高速缓存在计算装置存储器中。处理500的处理逻辑可利用非阻塞API接口,例如,根据所产生的事件对象,异步地把数据载入所分配的计算存储对象中,所述事件对象包括指示数据是否已被载入计算存储对象中的同步数据。在一个实施例中,处理500的处理逻辑可调度当读取自或写入到所分配的计算存储对象时的存储器访问操作。处理500的处理逻辑可映射所分配的流存储器,以形成应用程序的逻辑地址。在一个实施例中,处理500的处理逻辑可根据来自在主处理器中运行的应用程序,诸如图1的应用程序103的API请求,执行方框501的操作。
在方框503,按照一个实施例,处理500的处理逻辑可创建逻辑计算装置(例如,计算装置组)的计算程序对象。计算程序对象可包括代表数据并行程序的输出函数或入口点的一组计算内核。计算内核可包括能够在计算单元上执行以完成数据并行任务(例如,函数)的计算程序可执行代码的指针。每个计算内核可以与一组函数自变量关联,所述一组函数自变量包括为函数输入或输出分配的计算存储对象或流,诸如在方框501分配的流。
在方框509,处理500的处理逻辑可把计算程序二进制代码和/或计算程序源代码载入计算程序对象中。计算程序二进制代码可包括描述将在计算装置上运行的计算程序可执行代码的比特。计算程序二进制代码可以是计算程序可执行代码,和/或将被转换成计算程序可执行代码的计算程序源代码的中间表示。在一个实施例中,计算程序可执行代码可包括与例如目标物理计算装置(例如GPU或CPU)的类型,版本,和/或编译选项或标记,诸如线程组大小和/或线程组维数有关的描述数据。计算程序源代码可以是计算程序可执行代码编译自的源代码。处理500的处理逻辑可在方框509载入与计算程序源代码对应的多个计算程序可执行代码。在一个实施例中,处理500的处理逻辑可从应用程序或者通过计算库,诸如图1的计算应用程序库105载入计算程序可执行代码。计算程序可执行代码可以和对应的计算程序源代码一起被加载。处理500的处理逻辑可在方框505,为计算程序对象设置函数自变量。在一个实施例中,处理500的处理逻辑可按照来自应用程序的API请求,执行方框503、505和509的操作。
在方框511,处理500的处理逻辑可更新执行队列,以用逻辑计算装置执行计算内核对象。处理500的处理逻辑可响应于来自应用程序或计算应用程序库,诸如图1的应用程序103或计算应用程序库105,的对计算运行时,例如,图1的计算运行时109,的具有适当自变量的API调用,执行计算内核。执行计算内核可包括执行与计算内核相关的计算程序可执行代码。在一个实施例中,处理500的处理逻辑可产生执行计算内核的计算内核执行实例。对执行计算内核的计算运行时,诸如图1的计算运行时109,的API调用本质上可以是异步的。执行实例可用可由计算运行时,诸如图1的计算运行时109,返回的计算事件对象来识别。计算内核执行实例可被添加到执行队列中,以执行计算内核实例。
在一个实施例中,对执行计算内核的计算运行时的API调用可包括作为线程组在计算处理器上同时并行执行的线程的数目。API调用可包括要使用的计算处理器的数目。计算内核执行实例可包括指示执行对应的计算程序可执行代码的希望优先权的优先权值。计算内核执行实例还可包括识别前一执行实例和/或完成所述执行的预期线程总数和线程组的数目的事件对象。线程组的数目和线程的总数可在API调用中规定。在一个实施例中,事件对象可以指示包括事件对象的执行实例和由该事件对象识别的另一个执行实例之间的执行顺序关系。可能要求在事件对象识别的另一个执行实例结束执行之后,执行包括该事件对象的执行实例。事件对象可被称为queue_after_event_object。在一个实施例中,执行队列可包括用于执行对应的计算程序可执行代码的多个计算内核执行实例。用于计算程序可执行代码的一个或多个计算内核执行实例可被调度,以便在执行队列中执行。在一个实施例中,处理500的处理逻辑响应于来自应用程序的API请求,更新执行队列。执行队列可由应用程序所运行于的主数据系统托管。
在方框513,处理500的处理逻辑可从执行队列中选择计算内核执行实例以便执行。在一个实施例中,处理500的处理逻辑可按照对应的逻辑计算装置,选择要被同时执行的多于一个的计算内核执行实例。处理500的处理逻辑可确定计算内核执行实例是否是根据其与执行队列中的其它执行实例的相关优先权和依赖关系而从执行队列中选择的。计算内核执行实例可通过按照载入计算内核对象中的可执行代码来执行其对应的计算内核对象而被执行。
在方框517,在一个实施例中,处理500的处理逻辑可选择载入到与所选择的计算内核实例对应的计算内核对象中的多个可执行代码中的一个,以便在与计算内核对象的逻辑计算装置相关的物理计算装置中执行。处理500的处理逻辑可为一个计算内核执行实例,选择将并行地在多于一个的物理计算装置中执行的多于一个的可执行代码。所述选择可基于与和所选计算内核执行实例相关的逻辑计算装置对应的物理计算装置的当前执行状态。物理计算装置的执行状态可包括运行的线程的数目,局部存储器使用水平和处理器使用水平(例如,单位时间的峰值运算次数)等。在一个实施例中,所述选择可以基于预定的使用水平。在另一个实施例中,所述选择可以基于与计算内核执行实例相关的线程的数目和线程组的数目。处理500的处理逻辑可从物理计算装置获取执行状态。在一个实施例中,处理500的处理逻辑可执行从执行队列中选择计算内核执行实例以便在方框513、517与运行于主系统中的应用程序异步地执行的操作。
在方框519,处理500的处理逻辑可检查被调度在执行队列中执行的计算内核执行实例的执行状态。每个执行实例可用唯一的计算事件对象识别。当按照计算运行时,诸如图1的运行时109,对对应的计算内核执行实例排队时,事件对象可被返回给调用API以执行该执行实例的应用程序或计算应用程序库,诸如图1的应用程序103或者计算应用程序库105。在一个实施例中,处理500的处理逻辑可响应于来自应用程序的API请求,进行执行状态检查。处理500的处理逻辑可通过询问识别计算内核执行实例的计算事件对象的状态,确定执行计算内核执行实例的完成。处理500的处理逻辑可等待,直到计算内核执行实例的执行完成为止,才返回到来自应用程序的API调用。处理500的处理逻辑可根据计算事件对象,控制处理读取和/或写入各个流的执行实例。
在方框521,按照一个实施例,处理500的处理逻辑可获取执行计算内核执行实例的结果。随后,处理500的处理逻辑可清除为执行计算内核执行实例而分配的处理资源。在一个实施例中,处理500的处理逻辑可把保持执行计算内核可执行代码的结果的流存储器复制到局部存储器中。处理500的处理逻辑可删除在方框501分配的变量流或图像流。处理500的处理逻辑可删除用于检测计算内核执行何时完成的内核事件对象。如果与特定的计算内核对象相关的每个计算内核执行实例都已完全被执行,那么处理500的处理逻辑可删除该特定的计算内核对象。在一个实施例中,处理500的处理逻辑可根据由应用程序发起的API请求,执行方框521的操作。
图6是图解说明载入可执行代码的运行时处理600,包括编译为执行该可执行代码而确定的一个或多个物理计算装置的源代码,的实施例的流程图。可在图5的方框507,以处理500的一部分的形式执行处理600。在一个实施例中,对于和逻辑计算装置相关的每个物理计算装置,处理600可在方框601选择与该物理计算装置兼容的一个或多个现有的计算内核可执行代码。计算内核可执行代码可在兼容的物理计算装置中执行。可从应用程序,或者通过计算库,诸如图1的计算应用程序库105获得现有的计算内核可执行代码。每个所选择的计算内核可执行代码可由至少一个物理计算装置执行。在一个实施例中,所述选择可以基于和现有的计算内核可执行代码相关的描述数据。
如果存在所选择的现有计算内核对象,那么处理600可在方框603确定对于物理计算装置来说,所选择的计算内核可执行代码任意之一是否是最佳的。例如,所述确定可以基于例如物理计算装置的版本。在一个实施例中,如果描述数据中的目标物理计算装置的版本与物理计算装置的版本匹配,那么处理600可确定对该物理计算装置来说,现有的计算内核可执行代码是最佳的。
在方框605,在一个实施例中,处理600可利用在线编译器,诸如图1的计算编译器107,由对应的计算内核源代码建立对于物理计算装置最佳的新的计算内核可执行代码。如果在方框603,发现对物理计算装置来说,所选择的计算内核可执行代码都不是最佳的,那么处理600可执行在线构建。在一个实施例中,如果在方框601,发现现有的计算内核可执行代码都不与物理计算装置兼容,那么处理600可执行在线构建。可从应用程序,或者通过计算库,诸如图1的计算应用程序库105获得计算内核资源。
如果在方框605的构建是成功的,那么在一个实施例中,在方框607,处理600可把新构建的计算内核可执行代码载入到对应的计算内核对象中。否则,在方框609,处理600可把所选择的计算内核可执行代码载入到内核对象中。在一个实施例中,如果计算内核可执行代码还未被加载,处理600可把该计算内核可执行代码载入到计算内核对象中。在另一个实施例中,如果计算内核对象的现有计算内核可执行代码都不与物理计算装置兼容并且不可获得对应的计算内核源代码,则处理600可产生错误消息。
图7是图解说明从执行队列中选择计算内核执行实例以便在和与执行实例相关的逻辑计算装置对应的一个或多个物理计算装置中执行的处理700的一个实施例的流程图。可在图5的方框513,以处理500的一部分的形式执行处理700。在一个实施例中,处理700可在方框701,识别目前在执行队列中调度的计算内核执行实例之间的依赖条件。如果计算内核执行实例的依赖条件未决的话,该依赖条件可阻止计算内核执行实例的执行。在一个实施例中,依赖条件可以基于由输出流供给的输入流之间的关系。在一个实施例中,处理700可按照执行实例的对应函数的输入流和输出流,检测执行实例之间的依赖条件。在另一个实施例中,具有较低优先级的执行实例可具有与具有高优先级的另一个执行实例的依赖关系。
在方框703,在一个实施例中,处理700可从没有任何未决的依赖条件的多个被调度的计算内核执行实例中选择供执行的计算内容执行实例。所述选择可以基于分配给执行实例的优先级。在一个实施例中,所选择的计算内核执行实例可以与没有未决的依赖条件的多个计算内核执行实例中的最高优先级相关联。在方框705,处理700可获取与所选择的计算内核执行实例对应的一个或多个物理计算装置的当前执行状态。在一个实施例中,物理计算装置的执行状态可以取自预定的存储位置。在另一个实施例中,处理700可向物理计算装置发送状态请求,以接收执行状态报告。在方框707,处理700可根据获取的执行状态,指定一个或多个物理计算装置来执行所选择的计算内核执行实例。在一个实施例中,可按照与其它物理计算装置的负载均衡考虑因素,指定物理计算装置用于执行。所选择的物理计算装置可以与满足一个或多个规定(例如,预定)标准,诸如低于预定的处理器使用水平和/或存储器使用水平,的执行状态相关联。在一个实施例中,预定标准可以取决于与所选择的计算内核执行实例相关的线程的数目和线程组的数目。处理700可把同一执行实例或多个实例的独立计算内核可执行代码载入到一个或多个指定的物理计算装置中,以便在多个线程中并行执行。
图8是图解说明确定最佳的线程组大小以便在多个计算单元之间同时执行计算内核对象的处理800的一个实施例的流程图。例证处理800可由包含硬件(电路,专用逻辑等)、软件(诸如在专用机器上运行的软件)或这二者的组合的处理逻辑执行。例如,处理800可由图1的系统100的某些组件执行,或者可在图5的方框523作为处理500的一部分执行。在一个实施例中,在方框801,处理800的处理逻辑可根据编译自以不同计算单元为目标的单一源代码的可执行代码,确定资源要求。可执行代码的资源要求可包括与可执行代码的目标计算单元的寄存器、存储器和/或其它硬件组件有关的使用数据。单一的源代码可被编译成载入到不同类型的计算单元中的不同可执行代码,以执行由所述单一源代码指定的数据并行任务(或者函数)。在一些实施例中,处理800的处理逻辑可根据源代码和用于执行编译自源代码的指令的目标计算单元,确定资源要求。
处理800的处理逻辑可分析(和/或遍历)编译自以计算单元为目标的源代码的可执行代码的中间表示,从而确定在目标计算单元中执行该可执行代码所需的资源。在分析期间,处理800的处理逻辑可根据匹配最佳条件,识别一部分源代码,以重新编译所识别的那部分源代码,从而减少在目标计算单元中执行所需的资源。例如,处理800的处理逻辑可用常数值代替源代码中的变量。处理800的处理逻辑可按照对应的可执行代码的分析,识别数据并行任务的维数。当所识别的维数不同于例如利用API指定的维数时,处理800的处理逻辑可按照例如系统设置,选择所识别的维数和指定的维数之一。
在方框803,在某一实施例中,处理800的处理逻辑可按照所确定的资源要求,确定在多个计算单元之间并行执行可执行代码的最佳线程组大小。一组线程可在目标计算单元中同时执行编译的可执行代码。最佳的线程组大小可以是在计算单元中执行可执行代码以使该计算单元内的资源利用达到最大的线程组中的线程的数目。可利用完成数据并行任务的时间量来测量计算单元的资源利用。在一些实施例中,处理800的处理逻辑可从计算单元获取当前的资源利用状态,以确定可执行代码的最佳线程组大小。最佳线程组大小可以基于与可执行代码要进行的数据并行任务相关的维数。维数可以是规定沿着数据并行任务的多于一个的维度的迭代计算的数。例如,图像处理任务可与沿着图像宽度和图像高度的二维相关联。
在方框805,按照一个实施例,处理800的处理逻辑可确定在多个计算单元之间并行执行编译自单一源代码的一个或多个可执行代码(或者计算内核)以完成数据并行任务(或者函数)的线程的总数。处理800的处理逻辑可接收来自运行于主处理器(或者主处理单元)中的应用程序,诸如图1的主系统101中的应用程序103,的API请求。API请求可包括把多维值作为N个整数(G1,G2,…,GN)的数组的全局线程数。整数N是与数据并行任务相关的维数。处理800的处理逻辑可计数来自于多维值的数组中的整数的数目,以确定维数。响应于API请求,处理800的处理逻辑可按照N个整数的乘积G1 *G2 *…*GN,确定将在多个计算单元之间执行可执行代码的线程的总数。
在一个实施例中,处理800的处理逻辑可验证在方框807是否指定了局部线程组数。局部线程组数可具有指定为N个整数(L1,L2,…,LN)的数组的多维值。在一个实施例中,局部线程组数的维数可以等于进行数据并行任务的总线程数的维数。处理800的处理逻辑可从程序内核对象获取局部线程组数,所述程序内核对象与源代码和/或目标计算单元的编译自源代码的可执行代码相关。在一个实施例中,可利用API规定局部线程组数,以编译源代码。如果能够获取局部线程组数,那么处理800的处理逻辑可验证局部线程组数已被规定。在一些实施例中,可利用来自运行于主处理器中的应用程序的API请求,规定局部线程组数。API请求可包括多维全局线程数和多维局部线程组数。
在方框809,如果已经规定了局部线程组数,那么处理800的处理逻辑可按照规定的局部线程组数,指定计算单元的线程组大小。在一个实施例中,与具有多维值(L1,L2,…,LN)的局部线程组数对应的线程组大小可以等于N个整数的乘积L1 *L2 *…*LN。为不同计算单元编译的可执行代码可以与不同的局部线程组数相关。如果对于可执行代码规定了局部线程组数,那么处理800的处理逻辑可按照多个计算单元的所确定的最佳线程组大小,诸如例如基于在方框803对最佳线程组大小的确定,指定线程组大小。
处理800的处理逻辑可对照目标计算单元的在运行时期间内的许可线程组大小,检查指定的线程组大小。例如,计算单元会受取决于可用资源的最大运行时线程组大小的限制。处理800的处理逻辑可调整指定的线程组大小,以满足目标计算装置的运行时资源约束。在一些实施例中,当未规定多维局部线程组数时,处理800的处理逻辑可进行确定,以在方框811识别最佳的线程组大小。
在方框813,处理800的处理逻辑可按照线程组大小,划分线程的总数,以同时在数据并行任务的多个计算单元中执行。可执行代码可以大小等于对应的线程组大小的一组线程,在计算单元中并行执行。一组线程的大小可以是该组中的线程的数目。处理800的处理逻辑可把数据并行任务分解成能够跨一个或多个计算单元同时执行的适当的多维块或者线程组。
在一个实施例中,可用两个不同的线程变量,全局线程ID(标识符)和局部线程ID,识别执行可执行代码的线程。全局线程ID可用起始于(0,0,…,0)的多维值规定,并根据全局线程数(G1,G2,…,GN)变成(G1-1,G2-2,…,GN-1)。类似地,局部线程ID可用起始于(0,0,…,0)的多维值规定,并根据局部线程组数(L1,L2,…,LN)变成(L1-1,L2-2,…,LN-1)。线程的全局线程ID和局部线程ID可以是具有相同维数的多维值。
图9A是图解说明通过按照多个物理计算装置把一个或多个API的源代码和多个可执行代码保存在库中来构建API库的处理过程900的一个实施例的流程图。可以离线进行处理900A,在方框901把API函数的源代码载入到数据处理系统中。源代码可以是在一个或多个物理计算装置中执行的计算内核源代码。在一个实施例中,在方框903,处理900A可指定API函数的多个目标物理计算装置。可按照类型,诸如CPU或GPU,版本或厂家,指定目标物理计算装置。在方框905,处理900A可把源代码编译成每个指定的目标物理计算装置的可执行代码,诸如计算内核可执行代码。在一个实施例中,处理900A可根据在线编译器,诸如图1的计算编译器107,离线进行编译。
在方框907,处理900A可把API函数的源代码和为指定的目标物理计算装置编译的对应可执行代码保存在API库中。单一可执行代码的一个或多个API函数可以自API库中输出,以适应运行于主处理器中的主应用程序,诸如图1的应用程序103,的源代码。例如,应用程序可利用OpenCL API作为常规的“C”函数调用,执行可执行代码(或者计算内核)。在一个实施例中,每个可执行代码可以与包括例如目标物理计算装置的类型、版本和厂家,和/或编译选项的描述数据一起被保存。描述数据可由运行时期间的处理,诸如图5的处理500,获取。
图9B是图解说明应用程序执行根据API请求从API库中获取的多个可执行代码之一连同对应的源代码的处理900B的一个实施例的流程图。在一个实施例中,处理900B在包括API库,诸如图1的计算应用程序库105,的数据处理系统,诸如图1的主系统101,中运行应用程序,诸如图1的应用程序103。在方框911,处理900B可根据API请求,从API库获取源代码,诸如计算内核源代码,和一个或多个对应的可执行代码,诸如计算内核可执行代码,诸如在图5的方框507的处理500。每个可执行代码可与一个或多个目标物理计算装置相关联。在一个实施例中,计算内核可执行代码可以向下兼容多个版本的物理计算装置。在方框913,处理900B可在多个物理计算装置中执行基于API请求获取的可执行代码之一,以执行相关的API函数,诸如在图5的方框517的处理500。处理900B可异步运行方框909的应用程序,以在方框913执行API函数。
图10是图解说明将在多个物理计算装置中执行的计算程序可执行代码的计算程序源代码的例子的样本源代码。例子1000可代表具有包括变量1001和流(或计算存储对象)1003的自变量的API函数。例子1000可以基于并行计算环境,诸如图1的系统101,的编程语言。在一个实施例中,可按照具有被设计来实现这里描述的一个或多个实施例的附加扩展和限制的ANSI(美国国家标准委员会)C标准,指定并行编程语言。所述扩展可包括用于指定将在计算装置中执行的计算内核函数的函数限定符,诸如限定符1005。计算内核函数不可被其它计算内核函数调用。在一个实施例中,计算内核函数可被并行程序语言中的主函数调用。主函数可以是常规的ANSI C函数。可在与执行计算内核函数的计算装置分离的主处理器中执行主函数。在一个实施例中,所述扩展可包括描述需要在与计算装置相关的局部存储器中分配以便由线程组的所有线程共用的变量的局部限定符。局部限定符可在计算内核函数内声明。在编译器时间或运行时期间,可强制执行并行编程语言的限制,以便在所述限制被违反时,产生错误条件,诸如输出错误消息或退出执行。
图11A-11C包括图解说明通过调用API来配置在多个物理计算装置中执行多个可执行代码之一的逻辑计算装置的例子的样本源代码。例子1100A-1100C可由在与多个物理计算装置附接的主系统,诸如图1的主系统101,中运行的应用程序执行。例子1100A-1100C可规定并行编程语言的主函数。诸如图4的处理400和/或图5的处理500之类的处理可以API调用的形式执行例子1100A-1100C中的处理操作。从计算装置、计算装置组或逻辑计算装置1101创建上下文对象的处理操作可在图4的方框411,由处理400的处理逻辑执行。分配输入/输出图像存储对象(例如,计算存储对象)的处理操作可在图5的方框501,由处理500的处理逻辑执行。
现在参见图11B,分配和载入阵列存储对象1103b的处理操作可在图5的方框501,由处理500的处理逻辑执行。创建计算程序对象1105的处理操作可在图5的方框503,由处理500的处理逻辑执行。处理操作1107可把计算程序源代码,诸如图9的例子900,载入所创建的计算程序对象中。处理操作1109可明确地由载入的计算程序源代码,构建计算程序可执行代码。在一个实施例中,处理操作1109可把已构建的计算程序可执行代码载入所创建的计算程序对象中。随后,处理操作1111可创建指向所构建的用于调度计算装置上的执行的计算程序可执行代码的计算内核对象。
现在参见图11C,在一个实施例中,处理操作1113可以以所创建的计算内核对象的函数自变量的形式,附加变量和计算存储对象。处理操作1113可在图5的方框505,由处理500的处理逻辑执行。处理操作1115可执行所创建的计算内核对象。在一个实施例中,处理操作1115可在图5的方框511,由处理500的处理逻辑执行。处理操作1115可使执行队列被与所创建的计算内核对象对应的计算内核执行实例更新。处理操作1117可同步等待执行所创建的计算内核对象的完成。在一个实施例中,处理操作1119可获取执行计算内核对象的结果。随后,处理操作1121可清除为执行计算内核对象而分配的资源,诸如事件对象、所创建的计算内核对象和所分配的存储器。在一个实施例中,可根据是否设定了内核事件对象,异步执行处理操作1117。处理操作1117可在图5的方框519,由处理500的处理逻辑执行。
图12示出可以与本发明的一个实施例一起使用的计算机系统1200的一个例子。例如,系统1200可被实现成图1中所示的系统的一部分。注意,尽管图12图解说明计算机系统的各个组件,不过并不意图代表互连各个组件的任何特殊体系结构或方式,因为这样的细节与本发明关系不大。另外要认识到具有较少组件,或者可能具有更多组件的网络计算机和其它数据处理系统(例如,手持计算机,个人数字助手(PDA),蜂窝电话机,娱乐系统,消费性电子装置等)也可一起用于实现本发明的一个或多个实施例。
如图12中所示,作为一种形式的数据处理系统的计算机系统1200包括与诸如CPU和/或GPU之类的微处理器(一个或多个)1203、ROM(只读存储器)1207、易失性RAM 1205和非易失性存储器1206耦接的总线1202。微处理器1203可从存储器1207、1205、1206获取指令,并利用高速缓存1204执行所述指令,从而实现上述操作。总线1202把这些各个组件相互连接在一起,还使这些组件1203、1207、1205和1206与显示控制器和显示装置1208互连,并与诸如输入/输出(I/O)装置之类的外设互连,所述输入/输出(I/O)装置可以是鼠标、键盘、调制解调器、网络接口、打印机和本领域中公知的其它装置。一般来说,输入/输出装置1210通过输入/输出控制器1209与系统耦接。易失性RAM(随机存取存储器)1205一般被实现成动态RAM(DRAM),动态RAM持续需要电力,以刷新或保持存储器中的数据。与显示装置1208耦接的显示控制器可任选地包括一个或多个GPU,以处理显示数据。可选的是,可以提供GPU存储器1211,以支持包括在显示装置1208中的GPU。
大容量存储装置1206一般是磁性硬盘驱动器,或者磁光驱动器,或者光学驱动器或者DVD RAM,或者闪速存储器,或者即使在从系统除去电力之后仍然保持数据(例如,大量数据)的其它各种存储器系统。通常,大容量存储装置1206也可以是随机存取存储器,不过并不要求这样。尽管图12示出大容量存储装置1206是与数据处理系统中的其余组件直接耦接的本地装置,不过要认识到本发明可以利用远离所述系统的非易失性存储器,诸如通过网络接口,诸如调制解调器或以太网接口或无线联网接口,与数据处理系统耦接的网络存储装置。如本领域中众所周知的,总线1202可包括通过各个桥接器、控制器和/或适配器相互连接的一条或多条总线。
上面说明的各个部分可用诸如专用逻辑电路之类的逻辑电路,或者用微控制器或者执行程序代码指令的其它形式的处理核芯实现。上面的讨论所教导的处理可用诸如机器可执行指令之类的程序代码实现,所述机器可执行指令使执行这些指令的机器实现某些功能。在这种上下文中,“机器”可以是把中间形式(或者“抽象”)的指令转换成处理器特有的指令(例如,诸如“虚拟机”(例如,Java虚拟机)、解译器、公共语言运行时、高级语言虚拟机之类的抽象执行环境)的机器,和/或被置于半导体芯片(例如,用晶体管实现的“逻辑芯片”)上、用来执行指令的电子电路,诸如通用处理器和/或专用处理器。上面的讨论所教导的处理也可由用于在不执行程序代码的情况下实现所述处理(或其一部分)的电子电路(在机器的备选方案中,或者与机器结合)实现。
制造产品可被用于保存程序代码,例如,包括多个令牌。保存程序代码的制造产品可被具体体现为但不限于一个或多个存储器(例如,一个或多个闪速存储器,随机存取存储器(静态,动态或其它)),光盘,CD-ROM,DVD-ROM,EPROM,EEPROM,磁卡或光卡,或者适合于保存电子指令的其它类型的机器可读介质。也可利用包含在传播介质中的数据信号(例如,利用通信链路(例如,网络连接)),把程序代码从远程计算机(例如,服务器)下载到请求应用程序(例如,客户端)。
利用对计算机存储器内的数据比特的运算的算法和符号表示,给出了前面的详细说明。这些算法描述和表示是数据处理领域的技术人员用于向本领域的其他技术人员最有效地传达其工作实质的工具。这里并且通常地,算法被认为是导致期望结果的自相一致的运算序列。运算是需要物理量的物理处理的那些运算。通常,尽管不一定,这些物理量采取能够被保存、传送、组合、比较和以其它方式处理的电信号或磁信号的形式。主要是因为常用的缘故,有时方便的是把这些信号称为比特、值、元素、符号、字符、项、或数等。
不过,应记住的是所有这些和类似术语将与适当的物理量相关联,并且仅仅是适用于这些物理量的方便标志。根据上面的讨论,显然除非明确地另有说明,否则要认识到在本说明书中,利用诸如“处理”或“计算(compute,calculate)”或“确定”或“显示”之类的术语的讨论指的是计算机系统或类似的电子计算装置的把表示成计算机系统的寄存器和存储器内的物理(电子)量的数据处理和变换成类似地表示成计算机系统存储器或寄存器或者其它信息存储、传输或显示装置内的物理量的其它数据的动作和处理。
本发明还涉及执行这里说明的操作的设备。所述设备可以是为所需的用途专门构造的,或者它可包含由保存在计算机中的计算机程序有选择地激活或重新配置的通用计算机。这样的计算机程序可被保存在计算机可读存储介质中,诸如但不限于任意类型的磁盘,包括软件,光盘,CD-ROM,和磁光盘,只读存储器(ROM),RAM,EPROM,EEPROM,磁卡或光卡,或者适合于保存电子指令并都与计算机系统总线耦接的任何类型的介质中。
这里给出的处理和显示并不固有地涉及任何特定的计算机或其它设备。按照这里的教导,各种通用系统可以与程序一起使用,或者更方便的是构造更专门的设备来实现所描述的操作。根据下面的说明,各种各样的这些系统的所需结构将是显然的。另外,未针对任何特定的编程语言来说明本发明。要认识到可以使用各种各样的编程语言来实现这里所述的发明的教导。
上面的讨论仅仅描述了本发明的一些例证实施例。本领域的技术人员根据这样的讨论、附图和权利要求,易于认识到可以做出各种修改,而不脱离本发明的精神和范围。
Claims (24)
1.一种并行计算系统,包括:
主处理器;
与所述主处理器耦接的一个或多个计算单元;
与所述主处理器和所述一个或多个计算单元中的至少一个耦接的存储器,其中并行计算程序存储在所述存储器中,所述并行计算程序包括调用所述主处理器的一个或多个API(应用编程接口)以执行:
生成与数据处理任务的源代码相对应的程序对象;
为所述一个或多个计算单元根据所述程序对象生成可执行代码;和
载入要在所述一个或多个计算单元之间同时执行的可执行代码以执行所述数据处理任务。
2.按照权利要求1所述的并行计算系统,其中所述程序对象包括编译自源代码的二进制代码,其中所述二进制代码包括对所述一个或多个计算单元中的至少一个的描述。
3.按照权利要求2所述的并行计算系统,其中生成程序对象包括:
从预编译库中获取二进制代码,其中所述二进制代码包括可执行代码。
4.按照权利要求2所述的并行计算系统,其中生成可执行代码包括:
按照一个或多个编译标记将源代码编译成二进制代码,其中所述编译标记包括多维值,所述多维值用于指定在所述一个或多个计算单元中的至少一个中执行所述可执行代码之一的线程的数目。
5.按照权利要求1所述的并行计算系统,其中载入可执行代码包括:
生成与函数名相关联的内核对象,所述函数名用于指定源代码中实现数据处理任务的函数,所述内核对象包括所述函数的自变量的存储;以及
在所述一个或多个计算单元之间调度可执行代码的执行,其中所述执行包括用于在所述一个或多个计算单元中的至少一个中同时执行所述可执行代码之一的线程组中的线程的数目。
6.按照权利要求5所述的并行计算系统,其中载入可执行代码还包括:
对应于所述自变量的存储在存储器中分配一个或多个存储器对象。
7.按照权利要求5所述的并行计算系统,其中所述调度包括:
确定在所述一个或多个计算单元中并行执行所述可执行代码的线程的总数。
8.按照权利要求7所述的并行计算系统,其中所述确定包括:
分析所述二进制代码以确定所述函数执行所述数据处理任务的资源要求。
9.按照权利要求8所述的并行计算系统,其中所述确定还包括:
根据所述一个或多个计算单元中的至少一个的运行时资源可用性,确定线程组中的线程的数目。
10.按照权利要求5所述的并行计算系统,其中所述载入还包括:
响应于对所述一个或多个API的一个或多个调用,获取所述线程组中的线程的数目。
11.按照权利要求1所述的并行计算系统,其中所述一个或多个计算单元包括一个或多个图形处理单元(GPU)。
12.按照权利要求1所述的并行计算系统,其中所述一个或多个计算单元包括一个或多个中央处理单元(CPU)。
13.一种存储有多个令牌的计算机可读介质,所述令牌包括:
与用于执行一个或多个主函数的主处理器的一个或多个API(应用编程接口)相对应的主函数令牌,包括:
生成与数据处理任务的源代码相对应的程序对象;
为耦接到所述主处理器的一个或多个计算单元根据所述程序对象生成可执行代码;和
载入要在所述一个或多个计算单元之间同时执行的可执行代码以执行所述数据处理任务;和
与所述数据处理任务的源代码相对应的内核函数令牌。
14.按照权利要求13所述的计算机可读介质,其中所述程序对象包括编译自源代码的二进制代码,其中所述二进制代码包括对所述一个或多个计算单元中的至少一个的描述。
15.按照权利要求14所述的计算机可读介质,其中生成程序对象包括:
从预编译库中获取二进制代码,其中所述二进制代码包括可执行代码。
16.按照权利要求14所述的计算机可读介质,其中生成可执行代码包括:
按照一个或多个编译标记将源代码编译成二进制代码,其中所述编译标记包括多维值,所述多维值用于指定在所述一个或多个计算单元中的至少一个中执行所述可执行代码之一的线程的数目。
17.按照权利要求13所述的计算机可读介质,其中载入可执行代码包括:
生成与函数名相关联的内核对象,所述函数名用于指定源代码中实现数据处理任务的函数,所述内核对象包括所述函数的自变量的存储;以及
在所述一个或多个计算单元之间调度可执行代码的执行,其中所述调度包括用于在所述一个或多个计算单元中的至少一个中同时执行所述可执行代码之一的线程组中的线程的数目。
18.按照权利要求17所述的计算机可读介质,其中载入可执行代码还包括:
为所述自变量的存储在存储器中分配一个或多个存储器对象。
19.按照权利要求17所述的计算机可读介质,其中所述调度包括:
确定在所述一个或多个计算单元中并行执行所述可执行代码的线程的总数。
20.按照权利要求19所述的计算机可读介质,其中所述确定包括:
分析所述二进制代码以确定所述函数执行所述数据处理任务的资源要求。
21.按照权利要求20所述的计算机可读介质,其中所述确定还包括:
根据所述一个或多个计算单元中的至少一个的运行时资源可用性,确定线程组中的线程的数目。
22.按照权利要求17所述的计算机可读介质,还包括:
生成包括状态值的事件对象,所述状态值指示被调度的执行是否已被完成;以及
响应于对所述一个或多个API的一个或多个调用,获取并行计算程序的状态值。
23.按照权利要求13所述的计算机可读介质,其中所述一个或多个计算单元包括一个或多个GPU。
24.按照权利要求1所述的并行计算系统,其中所述一个或多个计算单元包括一个或多个CPU。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510351055.1A CN105159761B (zh) | 2008-06-06 | 2009-04-20 | 用于在多处理器上进行数据并行计算的应用编程接口 |
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US5973908P | 2008-06-06 | 2008-06-06 | |
US61/059,739 | 2008-06-06 | ||
US12/264,896 US8286198B2 (en) | 2008-06-06 | 2008-11-04 | Application programming interfaces for data parallel computing on multiple processors |
US12/264,896 | 2008-11-04 | ||
PCT/US2009/041152 WO2009148714A1 (en) | 2008-06-06 | 2009-04-20 | Application programming interfaces for data parallel computing on multiple processors |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510351055.1A Division CN105159761B (zh) | 2008-06-06 | 2009-04-20 | 用于在多处理器上进行数据并行计算的应用编程接口 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102099788A true CN102099788A (zh) | 2011-06-15 |
CN102099788B CN102099788B (zh) | 2015-05-13 |
Family
ID=40720829
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980128250.0A Expired - Fee Related CN102099788B (zh) | 2008-06-06 | 2009-04-20 | 用于在多处理器上进行数据并行计算的应用编程接口 |
CN201510351055.1A Active CN105159761B (zh) | 2008-06-06 | 2009-04-20 | 用于在多处理器上进行数据并行计算的应用编程接口 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510351055.1A Active CN105159761B (zh) | 2008-06-06 | 2009-04-20 | 用于在多处理器上进行数据并行计算的应用编程接口 |
Country Status (6)
Country | Link |
---|---|
US (5) | US8286198B2 (zh) |
EP (1) | EP2304563B1 (zh) |
JP (1) | JP5232914B2 (zh) |
KR (1) | KR101239025B1 (zh) |
CN (2) | CN102099788B (zh) |
WO (1) | WO2009148714A1 (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013097098A1 (zh) * | 2011-12-27 | 2013-07-04 | 华为技术有限公司 | 数据处理方法、图形处理器gpu及第一节点设备 |
CN104662511A (zh) * | 2012-07-30 | 2015-05-27 | 惠普发展公司,有限责任合伙企业 | 用于可执行对象的编译系统 |
CN104952033A (zh) * | 2014-03-27 | 2015-09-30 | 英特尔公司 | 分布式图形处理器分级中的系统一致性 |
CN105446733A (zh) * | 2014-09-19 | 2016-03-30 | 想象技术有限公司 | 分离核 |
CN105786523A (zh) * | 2016-03-21 | 2016-07-20 | 北京信安世纪科技有限公司 | 数据同步系统及方法 |
CN105808342A (zh) * | 2014-12-30 | 2016-07-27 | 中国电信股份有限公司 | 用于分配客户请求的方法、判断装置和系统 |
CN105900065A (zh) * | 2014-01-13 | 2016-08-24 | 华为技术有限公司 | 模式处理方法 |
CN106462375A (zh) * | 2014-05-30 | 2017-02-22 | 苹果公司 | 图形管线状态对象和模型 |
CN106560794A (zh) * | 2016-08-08 | 2017-04-12 | 柏建民 | 基于远程智能存储单元的分布式多处理器单元系统 |
CN108241508A (zh) * | 2016-12-27 | 2018-07-03 | 三星电子株式会社 | 处理OpenCL内核的方法及用于该方法的计算设备 |
CN110659278A (zh) * | 2018-06-12 | 2020-01-07 | 上海郑明现代物流有限公司 | 基于cpu-gpu异构架构的图数据分布式处理系统 |
US10747519B2 (en) | 2014-05-30 | 2020-08-18 | Apple Inc. | Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit |
US10949944B2 (en) | 2014-05-30 | 2021-03-16 | Apple Inc. | System and method for unified application programming interface and model |
CN112579215A (zh) * | 2020-12-23 | 2021-03-30 | 潍柴动力股份有限公司 | 一种调度函数的生成方法及装置 |
Families Citing this family (83)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102006033863A1 (de) * | 2006-07-21 | 2008-01-24 | Siemens Ag | Verschaltungsschnittstelle für flexibles Online/Offline-Deployment einer n-schichtigen Softwareapplikation |
US9191625B2 (en) * | 2008-09-26 | 2015-11-17 | Janos Redei | System and methods for transmitting and distributing media content |
US9354944B2 (en) * | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US20110063309A1 (en) * | 2009-09-16 | 2011-03-17 | Nvidia Corporation | User interface for co-processing techniques on heterogeneous graphics processing units |
CN102023844B (zh) * | 2009-09-18 | 2014-04-09 | 深圳中微电科技有限公司 | 并行处理器及其线程处理方法 |
US20110161495A1 (en) * | 2009-12-26 | 2011-06-30 | Ralf Ratering | Accelerating opencl applications by utilizing a virtual opencl device as interface to compute clouds |
KR101613971B1 (ko) * | 2009-12-30 | 2016-04-21 | 삼성전자주식회사 | 프로그램 코드의 변환 방법 |
US9830889B2 (en) | 2009-12-31 | 2017-11-28 | Nvidia Corporation | Methods and system for artifically and dynamically limiting the display resolution of an application |
US8392463B2 (en) * | 2010-04-22 | 2013-03-05 | International Business Machines Corporation | GPU enabled database systems |
US8782657B2 (en) | 2010-09-17 | 2014-07-15 | Oracle International Corporation | Dynamic creation and destruction of IO resources based on actual load and resource availability |
US9489183B2 (en) | 2010-10-12 | 2016-11-08 | Microsoft Technology Licensing, Llc | Tile communication operator |
US9430204B2 (en) | 2010-11-19 | 2016-08-30 | Microsoft Technology Licensing, Llc | Read-only communication operator |
US9507568B2 (en) | 2010-12-09 | 2016-11-29 | Microsoft Technology Licensing, Llc | Nested communication operator |
US8830245B2 (en) * | 2010-12-14 | 2014-09-09 | Amazon Technologies, Inc. | Load balancing between general purpose processors and graphics processors |
US9395957B2 (en) | 2010-12-22 | 2016-07-19 | Microsoft Technology Licensing, Llc | Agile communication operator |
KR101754998B1 (ko) * | 2011-01-27 | 2017-07-06 | 삼성전자주식회사 | 멀티 코어 시스템 및 멀티 코어 시스템에서의 데이터 병렬 처리 방법 |
US20120259843A1 (en) * | 2011-04-11 | 2012-10-11 | Timothy Child | Database acceleration using gpu and multicore cpu systems and methods |
WO2013010318A1 (zh) * | 2011-07-19 | 2013-01-24 | 天津海润恒通高性能计算系统科技有限公司 | 一种利用通用处理器进行软件无线电的方法和装置 |
US8789026B2 (en) * | 2011-08-02 | 2014-07-22 | International Business Machines Corporation | Technique for compiling and running high-level programs on heterogeneous computers |
TWI523144B (zh) * | 2011-10-31 | 2016-02-21 | 財團法人國家實驗研究院國家晶片系統設計中心 | 具有履歷電路單元之晶片結構 |
US8707314B2 (en) * | 2011-12-16 | 2014-04-22 | Advanced Micro Devices, Inc. | Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations |
US9348676B2 (en) * | 2012-01-05 | 2016-05-24 | Google Technology Holdings LLC | System and method of processing buffers in an OpenCL environment |
KR101332839B1 (ko) * | 2012-01-05 | 2013-11-27 | 서울대학교산학협력단 | 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법 |
US9424089B2 (en) * | 2012-01-24 | 2016-08-23 | Samsung Electronics Co., Ltd. | Hardware acceleration of web applications |
US9996394B2 (en) * | 2012-03-01 | 2018-06-12 | Microsoft Technology Licensing, Llc | Scheduling accelerator tasks on accelerators using graphs |
KR20130115574A (ko) * | 2012-04-12 | 2013-10-22 | 삼성전자주식회사 | 단말기에서 태스크 스케줄링을 수행하는 방법 및 장치 |
US10599404B1 (en) * | 2012-06-01 | 2020-03-24 | Altera Corporation | M/A for compiling parallel program having barrier synchronization for programmable hardware |
US9830172B2 (en) * | 2012-06-30 | 2017-11-28 | Microsoft Technology Licensing, Llc | Implementing functional kernels using compiled code modules |
KR101893796B1 (ko) | 2012-08-16 | 2018-10-04 | 삼성전자주식회사 | 동적 데이터 구성을 위한 방법 및 장치 |
GB2506595A (en) * | 2012-10-02 | 2014-04-09 | Ibm | Provisioning systems in parallel based on success rate |
TWI482118B (zh) * | 2012-10-18 | 2015-04-21 | Wistron Corp | 處理圖形運算負載平衡之方法及系統 |
KR20140054948A (ko) * | 2012-10-30 | 2014-05-09 | 한국전자통신연구원 | 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법 |
US20140259023A1 (en) * | 2013-03-07 | 2014-09-11 | Seagate Technology Llc | Adaptive vibration mitigation |
US9424079B2 (en) | 2013-06-27 | 2016-08-23 | Microsoft Technology Licensing, Llc | Iteration support in a heterogeneous dataflow engine |
KR102213668B1 (ko) | 2013-09-06 | 2021-02-08 | 삼성전자주식회사 | 제너럴 퍼포즈 프로그래머블 컴퓨팅 디바이스에서의 멀티미디어 데이터 프로세싱 방법 및 그에 따른 데이터 프로세싱 시스템 |
US9473545B2 (en) * | 2013-09-13 | 2016-10-18 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Administering group identifiers of processes in a parallel computer |
US10200508B2 (en) * | 2013-09-17 | 2019-02-05 | Nvidia Corporation | System and method for sharing special-purpose processing resources |
CN103713902B (zh) * | 2013-12-26 | 2017-10-24 | Tcl集团股份有限公司 | 一种基于Android系统的BOA编译方法和系统 |
US9632761B2 (en) * | 2014-01-13 | 2017-04-25 | Red Hat, Inc. | Distribute workload of an application to a graphics processing unit |
US9547553B1 (en) | 2014-03-10 | 2017-01-17 | Parallel Machines Ltd. | Data resiliency in a shared memory pool |
US9781027B1 (en) | 2014-04-06 | 2017-10-03 | Parallel Machines Ltd. | Systems and methods to communicate with external destinations via a memory network |
US9477412B1 (en) | 2014-12-09 | 2016-10-25 | Parallel Machines Ltd. | Systems and methods for automatically aggregating write requests |
US9690713B1 (en) | 2014-04-22 | 2017-06-27 | Parallel Machines Ltd. | Systems and methods for effectively interacting with a flash memory |
US9740464B2 (en) | 2014-05-30 | 2017-08-22 | Apple Inc. | Unified intermediate representation |
CN104391747A (zh) * | 2014-11-18 | 2015-03-04 | 北京锐安科技有限公司 | 一种并行计算方法及装置 |
US9781225B1 (en) | 2014-12-09 | 2017-10-03 | Parallel Machines Ltd. | Systems and methods for cache streams |
US9753873B1 (en) | 2014-12-09 | 2017-09-05 | Parallel Machines Ltd. | Systems and methods for key-value transactions |
US9639407B1 (en) | 2014-12-09 | 2017-05-02 | Parallel Machines Ltd. | Systems and methods for efficiently implementing functional commands in a data processing system |
US9639473B1 (en) | 2014-12-09 | 2017-05-02 | Parallel Machines Ltd. | Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location |
US9632936B1 (en) | 2014-12-09 | 2017-04-25 | Parallel Machines Ltd. | Two-tier distributed memory |
US10185547B2 (en) * | 2015-06-26 | 2019-01-22 | Intel Corporation | Techniques for distributed operation of secure controllers |
US10249073B2 (en) * | 2015-07-21 | 2019-04-02 | Intel Corporation | Distributed frame buffer and API for scalable parallel rendering |
KR102402584B1 (ko) * | 2015-08-26 | 2022-05-27 | 삼성전자주식회사 | 사용자 어플리케이션의 특성에 따른 연산 디바이스 동적 제어 기법 |
CN105159679A (zh) * | 2015-09-15 | 2015-12-16 | 北京国科世纪激光技术有限公司 | 视窗类软件的消息响应和处理方法及系统 |
US9898261B1 (en) * | 2015-09-30 | 2018-02-20 | Open Text Corporation | Method and system for configuring processes of software applications using activity fragments |
US9626627B1 (en) * | 2016-01-26 | 2017-04-18 | International Business Machines Corporation | Predicting API storytelling mapping |
US10614370B2 (en) | 2016-01-31 | 2020-04-07 | QC Ware Corp. | Quantum computing as a service |
US10484479B2 (en) * | 2016-01-31 | 2019-11-19 | QC Ware Corp. | Integration of quantum processing devices with distributed computers |
KR101858565B1 (ko) | 2016-02-19 | 2018-05-16 | 서영준 | 대용량 데이터 처리를 위한 분산 플랫폼 독립적 병렬 처리 방법 및 시스템 |
US10565017B2 (en) * | 2016-09-23 | 2020-02-18 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
US10541927B2 (en) * | 2016-12-29 | 2020-01-21 | Google Llc | System and method for hardware-independent RDMA |
CN107066378B (zh) * | 2017-01-24 | 2020-12-04 | 成都皓图智能科技有限责任公司 | 一种实时在线gpu通用计算模拟及调试方法 |
US10929294B2 (en) | 2017-03-01 | 2021-02-23 | QC Ware Corp. | Using caching techniques to improve graph embedding performance |
US11353868B2 (en) * | 2017-04-24 | 2022-06-07 | Intel Corporation | Barriers and synchronization for machine learning at autonomous machines |
CN108958796B (zh) * | 2017-05-23 | 2023-08-04 | 创新先进技术有限公司 | 业务请求处理方法及装置、业务请求处理系统 |
US10664943B2 (en) * | 2017-06-02 | 2020-05-26 | Apple Inc. | Compound shader object and use thereof |
US11385930B2 (en) * | 2017-06-21 | 2022-07-12 | Citrix Systems, Inc. | Automatic workflow-based device switching |
US10796240B2 (en) | 2017-07-22 | 2020-10-06 | QC Ware Corp. | Performing fault tree analysis on quantum computers |
CN107678752B (zh) * | 2017-08-31 | 2021-09-21 | 北京百度网讯科技有限公司 | 一种面向异构集群的任务处理方法及装置 |
US11567807B2 (en) * | 2018-03-30 | 2023-01-31 | EMC IP Holding Company LLC | Allocation of shared computing resources using source code feature extraction and machine learning |
US11487573B2 (en) * | 2018-05-08 | 2022-11-01 | Thomson Reuters Enterprise Centre Gmbh | Systems and method for automating security workflows in a distributed system using encrypted task requests |
US11436056B2 (en) | 2018-07-19 | 2022-09-06 | EMC IP Holding Company LLC | Allocation of shared computing resources using source code feature extraction and clustering-based training of machine learning models |
JP7141905B2 (ja) * | 2018-10-12 | 2022-09-26 | 株式会社日立産機システム | コントロール装置及びコントロール方法 |
CN111327921A (zh) * | 2018-12-17 | 2020-06-23 | 深圳市炜博科技有限公司 | 视频数据处理方法及设备 |
CN110032407B (zh) * | 2019-03-08 | 2020-12-22 | 创新先进技术有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
US10884664B2 (en) * | 2019-03-14 | 2021-01-05 | Western Digital Technologies, Inc. | Executable memory cell |
CN110413317B (zh) * | 2019-08-02 | 2023-06-06 | 四川新网银行股份有限公司 | 基于配置化的流程接口调用方法 |
US11567555B2 (en) * | 2019-08-30 | 2023-01-31 | Intel Corporation | Software assisted power management |
WO2021068115A1 (en) | 2019-10-08 | 2021-04-15 | Citrix Systems, Inc. | Application and device recommendation engine |
US20210149719A1 (en) * | 2019-11-15 | 2021-05-20 | Nvidia Corporation | Techniques for modifying executable graphs to perform different workloads |
CN111292223B (zh) | 2020-01-22 | 2023-07-25 | 北京百度网讯科技有限公司 | 图计算的处理方法、装置、电子设备及存储介质 |
CN111447561B (zh) * | 2020-03-16 | 2023-04-18 | 阿波罗智联(北京)科技有限公司 | 车辆的图像处理系统 |
US11941722B2 (en) * | 2021-10-13 | 2024-03-26 | Mellanox Technologies, Ltd. | Kernel optimization and delayed execution |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998019238A1 (en) * | 1996-10-28 | 1998-05-07 | Unisys Corporation | Heterogeneous symmetric multi-processing system |
CN1490700A (zh) * | 2002-10-16 | 2004-04-21 | 鲍志超 | 计算机代码控制连接器 |
WO2006055342A2 (en) * | 2004-11-19 | 2006-05-26 | Motorola, Inc. | Energy efficient inter-processor management method and system |
US20060143615A1 (en) * | 2004-12-28 | 2006-06-29 | Seiko Epson Corporation | Multimedia processing system and multimedia processing method |
US20070174828A1 (en) * | 2006-01-25 | 2007-07-26 | O'brien John Kevin P | Apparatus and method for partitioning programs between a general purpose core and one or more accelerators |
Family Cites Families (93)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4129614C2 (de) * | 1990-09-07 | 2002-03-21 | Hitachi Ltd | System und Verfahren zur Datenverarbeitung |
US5301324A (en) | 1992-11-19 | 1994-04-05 | International Business Machines Corp. | Method and apparatus for dynamic work reassignment among asymmetric, coupled processors |
US6179489B1 (en) | 1997-04-04 | 2001-01-30 | Texas Instruments Incorporated | Devices, methods, systems and software products for coordination of computer main microprocessor and second microprocessor coupled thereto |
US5946487A (en) * | 1996-06-10 | 1999-08-31 | Lsi Logic Corporation | Object-oriented multi-media architecture |
US6115550A (en) | 1997-06-11 | 2000-09-05 | Digital Equipment Corporation | Loader conditionally replacing a code sequence with a functionally-alike code sequence in an executable program intended for execution in different run-time environments |
CA2319004A1 (en) * | 1998-01-26 | 1999-08-12 | Unif/X Inc. | A transaction execution system interface and enterprise system architecture thereof |
US6425017B1 (en) * | 1998-08-17 | 2002-07-23 | Microsoft Corporation | Queued method invocations on distributed component applications |
JP3633404B2 (ja) * | 1999-11-04 | 2005-03-30 | 日本電気株式会社 | メモリ割り付け最適化システム、方法、及び記録媒体 |
JP2001147819A (ja) * | 1999-11-19 | 2001-05-29 | Fujitsu Ltd | 最適化装置および記録媒体 |
US6986128B2 (en) | 2000-01-07 | 2006-01-10 | Sony Computer Entertainment Inc. | Multiple stage program recompiler and method |
US7159041B2 (en) | 2000-03-07 | 2007-01-02 | Microsoft Corporation | Method and system for defining and controlling algorithmic elements in a graphics display system |
US6588008B1 (en) | 2000-04-11 | 2003-07-01 | International Business Machines Corporation | Assembler tool for processor-coprocessor computer systems |
US6970206B1 (en) * | 2000-04-20 | 2005-11-29 | Ati International Srl | Method for deinterlacing interlaced video by a graphics processor |
US20030154284A1 (en) * | 2000-05-31 | 2003-08-14 | James Bernardin | Distributed data propagator |
US6768901B1 (en) | 2000-06-02 | 2004-07-27 | General Dynamics Decision Systems, Inc. | Dynamic hardware resource manager for software-defined communications system |
US7137124B2 (en) * | 2001-10-05 | 2006-11-14 | International Business Machines Corporation | Storage area network methods and apparatus for storage device masking |
US7234144B2 (en) | 2002-01-04 | 2007-06-19 | Microsoft Corporation | Methods and system for managing computational resources of a coprocessor in a computing system |
US6919896B2 (en) | 2002-03-11 | 2005-07-19 | Sony Computer Entertainment Inc. | System and method of optimizing graphics processing |
US20040068716A1 (en) | 2002-10-04 | 2004-04-08 | Quicksilver Technology, Inc. | Retargetable compiler for multiple and different hardware platforms |
US7406699B2 (en) * | 2003-04-02 | 2008-07-29 | Microsoft Corporation | Enhanced runtime hosting |
US7181382B2 (en) * | 2003-05-08 | 2007-02-20 | Microsoft Corporation | System and method for testing, simulating, and controlling computer software and hardware |
US7015913B1 (en) * | 2003-06-27 | 2006-03-21 | Nvidia Corporation | Method and apparatus for multithreaded processing of data in a programmable graphics processor |
US6862027B2 (en) | 2003-06-30 | 2005-03-01 | Microsoft Corp. | System and method for parallel execution of data generation tasks |
US7546553B2 (en) | 2003-07-28 | 2009-06-09 | Sap Ag | Grid landscape component |
US7272730B1 (en) | 2003-07-31 | 2007-09-18 | Hewlett-Packard Development Company, L.P. | Application-driven method and apparatus for limiting power consumption in a processor-controlled hardware platform |
US7389508B2 (en) | 2003-09-25 | 2008-06-17 | International Business Machines Corporation | System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment |
US7068284B2 (en) | 2003-11-10 | 2006-06-27 | Microsoft Corporation | Color management system that supports legacy and advanced color management applications |
US8823718B2 (en) | 2003-11-14 | 2014-09-02 | Microsoft Corporation | Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques |
US20050132239A1 (en) | 2003-12-16 | 2005-06-16 | Athas William C. | Almost-symmetric multiprocessor that supports high-performance and energy-efficient execution |
FR2865047B1 (fr) * | 2004-01-14 | 2006-04-07 | Commissariat Energie Atomique | Systeme de generation automatique de codes optimises |
US7472391B2 (en) | 2004-02-20 | 2008-12-30 | Microsoft Corporation | Resource loader for applications that utilize relative uniform resource identifiers |
US7847800B2 (en) | 2004-04-16 | 2010-12-07 | Apple Inc. | System for emulating graphics operations |
US7725643B1 (en) | 2004-05-04 | 2010-05-25 | Oracle America, Inc. | Methods and systems for detecting and avoiding an address dependency between tasks |
US20060048157A1 (en) | 2004-05-18 | 2006-03-02 | International Business Machines Corporation | Dynamic grid job distribution from any resource within a grid environment |
US7426724B2 (en) * | 2004-07-02 | 2008-09-16 | Nvidia Corporation | Optimized chaining of vertex and fragment programs |
WO2006034034A2 (en) | 2004-09-16 | 2006-03-30 | Nvidia Corporation | Load balancing |
US20060069909A1 (en) | 2004-09-23 | 2006-03-30 | Roth Steven T | Kernel registry write operations |
US7603546B2 (en) | 2004-09-28 | 2009-10-13 | Intel Corporation | System, method and apparatus for dependency chain processing |
US7733347B2 (en) | 2004-11-05 | 2010-06-08 | Microsoft Corporation | Automated construction of shader programs |
US7800620B2 (en) | 2004-11-05 | 2010-09-21 | Microsoft Corporation | Optimizing automated shader program construction |
US7598953B2 (en) | 2004-11-05 | 2009-10-06 | Microsoft Corporation | Interpreter for simplified programming of graphics processor units in general purpose programming languages |
US20060132489A1 (en) | 2004-12-21 | 2006-06-22 | Hewlett-Packard Development Company, L.P. | Remote computing |
US7665143B2 (en) * | 2005-05-16 | 2010-02-16 | Microsoft Corporation | Creating secure process objects |
JP2006350686A (ja) * | 2005-06-16 | 2006-12-28 | Seiko Epson Corp | 命令セット・シミュレータ生成装置及びシミュレータ生成方法 |
WO2006138706A2 (en) | 2005-06-17 | 2006-12-28 | Computer Associates Think, Inc. | System and method for identifying application resources |
US7353369B1 (en) * | 2005-07-13 | 2008-04-01 | Nvidia Corporation | System and method for managing divergent threads in a SIMD architecture |
US7856618B2 (en) | 2005-08-04 | 2010-12-21 | International Business Machines Corporation | Adaptively generating code for a computer program |
US20070033592A1 (en) | 2005-08-04 | 2007-02-08 | International Business Machines Corporation | Method, apparatus, and computer program product for adaptive process dispatch in a computer system having a plurality of processors |
US7463268B2 (en) | 2005-09-15 | 2008-12-09 | Microsoft Corporation | Providing 3D graphics across partitions of computing device |
TWI348652B (en) | 2005-10-17 | 2011-09-11 | Via Tech Inc | Driver assisted asynchronous command processing |
KR100713505B1 (ko) | 2005-10-24 | 2007-04-30 | 삼성전자주식회사 | 디지털 방송 수신 단말기의 선호 채널 공유 방법 |
US7330962B2 (en) | 2005-11-14 | 2008-02-12 | Nvidia Corporation | Dynamic instruction sequence selection during scheduling |
US7861060B1 (en) * | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US7788468B1 (en) * | 2005-12-15 | 2010-08-31 | Nvidia Corporation | Synchronization of threads in a cooperative thread array |
US7958509B2 (en) | 2005-12-21 | 2011-06-07 | International Business Machines Corporation | Method and system for scheduling of jobs |
US7441224B2 (en) * | 2006-03-09 | 2008-10-21 | Motorola, Inc. | Streaming kernel selection for reconfigurable processor |
JP4784827B2 (ja) * | 2006-06-06 | 2011-10-05 | 学校法人早稲田大学 | ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ |
US8549499B1 (en) * | 2006-06-16 | 2013-10-01 | University Of Rochester | Parallel programming using possible parallel regions and its language profiling compiler, run-time system and debugging support |
US20070294693A1 (en) | 2006-06-16 | 2007-12-20 | Microsoft Corporation | Scheduling thread execution among a plurality of processors based on evaluation of memory access data |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US8136104B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US7814486B2 (en) | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8136102B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US8756264B2 (en) | 2006-06-20 | 2014-06-17 | Google Inc. | Parallel pseudorandom number generation |
WO2007149884A2 (en) | 2006-06-20 | 2007-12-27 | Google, Inc. | A multi-thread high performance computing system |
US8375368B2 (en) | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8443348B2 (en) | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
CN100377042C (zh) | 2006-07-04 | 2008-03-26 | 浙江大学 | 结合静态编译器和动态调频技术优化运行频率的节能方法 |
US8116207B2 (en) * | 2006-08-21 | 2012-02-14 | Citrix Systems, Inc. | Systems and methods for weighted monitoring of network services |
US7750913B1 (en) | 2006-10-24 | 2010-07-06 | Adobe Systems Incorporated | System and method for implementing graphics processing unit shader programs using snippets |
US20080109795A1 (en) | 2006-11-02 | 2008-05-08 | Nvidia Corporation | C/c++ language extensions for general-purpose graphics processing unit |
JP4785710B2 (ja) * | 2006-11-14 | 2011-10-05 | 富士通株式会社 | 資源に対する重要度算出方法及び装置 |
US8370818B2 (en) * | 2006-12-02 | 2013-02-05 | Time Warner Cable Inc. | Methods and apparatus for analyzing software interface usage |
US7969444B1 (en) | 2006-12-12 | 2011-06-28 | Nvidia Corporation | Distributed rendering of texture data |
US8719807B2 (en) * | 2006-12-28 | 2014-05-06 | Intel Corporation | Handling precompiled binaries in a hardware accelerated software transactional memory system |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US7925900B2 (en) | 2007-01-26 | 2011-04-12 | Microsoft Corporation | I/O co-processor coupled hybrid computing device |
US8549500B2 (en) * | 2007-02-14 | 2013-10-01 | The Mathworks, Inc. | Saving and loading graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment |
US7975001B1 (en) | 2007-02-14 | 2011-07-05 | The Mathworks, Inc. | Bi-directional communication in a parallel processing environment |
US8010954B2 (en) * | 2007-02-14 | 2011-08-30 | The Mathworks, Inc. | Parallel programming interface to dynamically allocate program portions |
US7685409B2 (en) | 2007-02-21 | 2010-03-23 | Qualcomm Incorporated | On-demand multi-thread multimedia processor |
JP2008226181A (ja) * | 2007-03-15 | 2008-09-25 | Fujitsu Ltd | 並列実行プログラム、該プログラムを記録した記録媒体、並列実行装置および並列実行方法 |
US8286196B2 (en) | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8108633B2 (en) | 2007-04-11 | 2012-01-31 | Apple Inc. | Shared stream memory on multiple processors |
US8276164B2 (en) | 2007-05-03 | 2012-09-25 | Apple Inc. | Data parallel computing on multiple processors |
CN101657795B (zh) | 2007-04-11 | 2013-10-23 | 苹果公司 | 多处理器上的数据并行计算 |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
US7941791B2 (en) * | 2007-04-13 | 2011-05-10 | Perry Wang | Programming environment for heterogeneous processor resource integration |
US8996846B2 (en) * | 2007-09-27 | 2015-03-31 | Nvidia Corporation | System, method and computer program product for performing a scan operation |
US20090158299A1 (en) * | 2007-10-31 | 2009-06-18 | Carter Ernst B | System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed |
US8074087B2 (en) * | 2008-06-24 | 2011-12-06 | Microsoft Corporation | Configuring processors and loads for power management |
US8286172B2 (en) * | 2008-10-02 | 2012-10-09 | Nec Laboratories America, Inc. | Systems and methods for implementing best-effort parallel computing frameworks |
-
2008
- 2008-11-04 US US12/264,896 patent/US8286198B2/en active Active
-
2009
- 2009-04-20 WO PCT/US2009/041152 patent/WO2009148714A1/en active Application Filing
- 2009-04-20 EP EP09758877.6A patent/EP2304563B1/en active Active
- 2009-04-20 KR KR1020117000309A patent/KR101239025B1/ko active IP Right Grant
- 2009-04-20 CN CN200980128250.0A patent/CN102099788B/zh not_active Expired - Fee Related
- 2009-04-20 CN CN201510351055.1A patent/CN105159761B/zh active Active
- 2009-04-20 JP JP2011512491A patent/JP5232914B2/ja active Active
-
2012
- 2012-10-05 US US13/646,552 patent/US8806513B2/en active Active
-
2014
- 2014-01-24 US US14/163,404 patent/US9250697B2/en active Active
-
2015
- 2015-12-21 US US14/977,204 patent/US9477525B2/en active Active
-
2016
- 2016-09-26 US US15/276,727 patent/US10067797B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998019238A1 (en) * | 1996-10-28 | 1998-05-07 | Unisys Corporation | Heterogeneous symmetric multi-processing system |
CN1490700A (zh) * | 2002-10-16 | 2004-04-21 | 鲍志超 | 计算机代码控制连接器 |
WO2006055342A2 (en) * | 2004-11-19 | 2006-05-26 | Motorola, Inc. | Energy efficient inter-processor management method and system |
US20060143615A1 (en) * | 2004-12-28 | 2006-06-29 | Seiko Epson Corporation | Multimedia processing system and multimedia processing method |
US20070174828A1 (en) * | 2006-01-25 | 2007-07-26 | O'brien John Kevin P | Apparatus and method for partitioning programs between a general purpose core and one or more accelerators |
Non-Patent Citations (1)
Title |
---|
HALFHILL T R: "Parallel processing with CUDA", 《MICROPROCESSOR REPORT》 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013097098A1 (zh) * | 2011-12-27 | 2013-07-04 | 华为技术有限公司 | 数据处理方法、图形处理器gpu及第一节点设备 |
CN104662511A (zh) * | 2012-07-30 | 2015-05-27 | 惠普发展公司,有限责任合伙企业 | 用于可执行对象的编译系统 |
CN105900065A (zh) * | 2014-01-13 | 2016-08-24 | 华为技术有限公司 | 模式处理方法 |
CN104952033A (zh) * | 2014-03-27 | 2015-09-30 | 英特尔公司 | 分布式图形处理器分级中的系统一致性 |
CN104952033B (zh) * | 2014-03-27 | 2019-01-01 | 英特尔公司 | 分布式图形处理器分级中的系统一致性 |
US10747519B2 (en) | 2014-05-30 | 2020-08-18 | Apple Inc. | Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit |
CN106462375B (zh) * | 2014-05-30 | 2019-06-07 | 苹果公司 | 图形管线状态对象和模型 |
CN106462375A (zh) * | 2014-05-30 | 2017-02-22 | 苹果公司 | 图形管线状态对象和模型 |
US10949944B2 (en) | 2014-05-30 | 2021-03-16 | Apple Inc. | System and method for unified application programming interface and model |
CN105446733A (zh) * | 2014-09-19 | 2016-03-30 | 想象技术有限公司 | 分离核 |
CN105446733B (zh) * | 2014-09-19 | 2020-09-04 | 想象技术有限公司 | 数据处理系统、用于数据处理系统的方法及可读存储介质 |
CN105808342B (zh) * | 2014-12-30 | 2019-12-13 | 中国电信股份有限公司 | 用于分配客户请求的方法、判断装置和系统 |
CN105808342A (zh) * | 2014-12-30 | 2016-07-27 | 中国电信股份有限公司 | 用于分配客户请求的方法、判断装置和系统 |
CN105786523A (zh) * | 2016-03-21 | 2016-07-20 | 北京信安世纪科技有限公司 | 数据同步系统及方法 |
CN105786523B (zh) * | 2016-03-21 | 2019-01-11 | 北京信安世纪科技股份有限公司 | 数据同步系统及方法 |
CN106560794A (zh) * | 2016-08-08 | 2017-04-12 | 柏建民 | 基于远程智能存储单元的分布式多处理器单元系统 |
CN108241508A (zh) * | 2016-12-27 | 2018-07-03 | 三星电子株式会社 | 处理OpenCL内核的方法及用于该方法的计算设备 |
CN108241508B (zh) * | 2016-12-27 | 2023-06-13 | 三星电子株式会社 | 处理OpenCL内核的方法及用于该方法的计算设备 |
CN110659278A (zh) * | 2018-06-12 | 2020-01-07 | 上海郑明现代物流有限公司 | 基于cpu-gpu异构架构的图数据分布式处理系统 |
CN112579215A (zh) * | 2020-12-23 | 2021-03-30 | 潍柴动力股份有限公司 | 一种调度函数的生成方法及装置 |
CN112579215B (zh) * | 2020-12-23 | 2023-12-15 | 潍柴动力股份有限公司 | 一种调度函数的生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20090307699A1 (en) | 2009-12-10 |
US20160188371A1 (en) | 2016-06-30 |
US20130081066A1 (en) | 2013-03-28 |
US8806513B2 (en) | 2014-08-12 |
EP2304563A1 (en) | 2011-04-06 |
JP2011523141A (ja) | 2011-08-04 |
WO2009148714A1 (en) | 2009-12-10 |
CN105159761A (zh) | 2015-12-16 |
US8286198B2 (en) | 2012-10-09 |
US20140237457A1 (en) | 2014-08-21 |
KR101239025B1 (ko) | 2013-03-04 |
JP5232914B2 (ja) | 2013-07-10 |
CN105159761B (zh) | 2019-01-15 |
US9250697B2 (en) | 2016-02-02 |
US20170075730A1 (en) | 2017-03-16 |
EP2304563B1 (en) | 2020-05-06 |
CN102099788B (zh) | 2015-05-13 |
US10067797B2 (en) | 2018-09-04 |
US9477525B2 (en) | 2016-10-25 |
KR20110019775A (ko) | 2011-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102099789B (zh) | 多处理器的多维线程分组 | |
CN102099788A (zh) | 用于在多处理器上进行数据并行计算的应用编程接口 | |
US11907691B2 (en) | Method and system of command buffer between a CPU and GPU | |
CN101802789B (zh) | 多处理器上的并行运行时执行 | |
CN101657795B (zh) | 多处理器上的数据并行计算 | |
CN102870096B (zh) | 子缓冲器对象 | |
US10489205B2 (en) | Enqueuing kernels from kernels on GPU/CPU | |
CN104823215A (zh) | 子画面图形渲染系统 | |
CN103870246A (zh) | 用于线程的simd执行的编译器控制区调度 | |
JP2008535074A (ja) | 複数の発行ポートを有するプロセッサにおける命令グループの作成 | |
US20150046684A1 (en) | Technique for grouping instructions into independent strands | |
CN103996216A (zh) | 用于曲面细分和几何着色器的电力高效属性处置 | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
CN103218259A (zh) | 计算任务的调度和执行 | |
CN103136035B (zh) | 用于混合线程模式的程序的线程管理的方法和装置 | |
CN104216685A (zh) | 依赖性问题的有效率的并行计算 | |
CN103927150B (zh) | 多处理器上的并行运行时执行 | |
Nordmark et al. | A Ray Tracing Implementation Performance Comparison between the CPU and the GPU |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150513 |