CN102099789A - 多处理器的多维线程分组 - Google Patents
多处理器的多维线程分组 Download PDFInfo
- Publication number
- CN102099789A CN102099789A CN2009801282515A CN200980128251A CN102099789A CN 102099789 A CN102099789 A CN 102099789A CN 2009801282515 A CN2009801282515 A CN 2009801282515A CN 200980128251 A CN200980128251 A CN 200980128251A CN 102099789 A CN102099789 A CN 102099789A
- Authority
- CN
- China
- Prior art keywords
- sets
- processing unit
- threads
- executable code
- thread
- 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 272
- 238000000034 method Methods 0.000 claims abstract description 114
- 230000004044 response Effects 0.000 claims abstract description 16
- 238000004364 calculation method Methods 0.000 claims description 117
- 238000005192 partition Methods 0.000 abstract 1
- 238000003860 storage Methods 0.000 description 59
- 230000006870 function Effects 0.000 description 34
- 230000000875 corresponding effect Effects 0.000 description 23
- 230000015654 memory Effects 0.000 description 23
- 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/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
-
- 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
-
- 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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
-
- 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请求中的多维全局线程数,划分线程的总数。载入可执行代码以便在目标处理单元中以具有所确定的线程组大小的线程组同时执行。
Description
相关申请的交叉引用
本申请涉及以下申请并且要求其权益:Aaftab A.Munshi等人于2008年6月6日提交的标题为“Application Programming Interfaces forData Parallel Computing on Multiple Processors”、申请号为61/059,728的美国临时专利申请,其全部内容通过引用合并于此。
技术领域
本发明一般涉及数据并行计算。更具体地,本发明涉及跨CPU(中央处理单元)和GPU(图形处理单元)的线程分组。
背景技术
随着GPU继续发展成高性能并行计算装置,编写了越来越多的应用程序以在类似于通用计算装置的GPU中执行数据并行计算。目前,这些应用程序被设计成利用厂家特有的接口在特定的GPU上运行。从而,即使当在数据处理系统中,既有GPU又有CPU可用时,这些应用程序也不能利用CPU的处理资源。也不能跨越运行这种应用程序的不同厂家的GPU来利用处理资源。
不过,随着越来越多的CPU包含多个核芯以执行数据并行计算,越来越多的处理任务可由CPU和/或GPU(只要任一个可用)支持。按照惯例,GPU和CPU是通过彼此不兼容的独立编程环境来配置的。多数GPU需要厂家特有的专用程序。结果,应用程序很难利用CPU和GPU两者的处理资源,例如,利用具有数据并行计算能力的GPU以及多芯CPU的处理资源。
因此,在现代数据处理系统中,需要克服上述问题,以使应用程序能够通过利用能够执行任务的任何可用处理资源,诸如CPU和一个或多个GPU,来执行所述任务。
发明内容
本发明的实施例包括方法和设备,所述方法和设备响应于来自在主处理单元中运行的应用程序的API(应用编程接口)请求,确定同时执行编译自针对目标处理单元的单一源的可执行代码的线程的总数。所述目标处理单元包括GPU(图形处理单元)和CPU(中央处理单元)。确定目标处理单元的线程组大小,以按照包括在API请求中的多维全局线程数,划分线程的总数。载入可执行代码以便在目标处理单元中以具有所确定的线程组大小的线程组同时执行。
在一个备选实施例中,响应于来自在主处理器中运行的应用程序的API请求,确定用于执行编译自单一源的可执行代码的一个或多个目标处理单元的线程组大小。所述一个或多个目标处理单元包括与主处理器耦接、用以并行执行可执行代码的GPU和CPU。按照供同时执行的线程组大小,把一个或多个可执行代码载入所述一个或多个目标处理单元中,以优化运行时资源使用。
根据附图和下面的详细说明,本发明的其它特征将是显而易见的。
附图说明
附图中非限制性地举例说明了本发明,其中相同的附图标记指示相同的元件,其中:
图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。局部存储器可以与计算处理器耦接。在运行于计算处理器中的单个线程组中的线程之间共用的局部存储器可由与计算处理器耦接的局部存储器支持。来自不同线程组的多个线程,诸如线程1213和线程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 (33)
1.一种计算机实现的方法,包括:
响应于来自在主处理单元中运行的应用程序的API(应用编程接口)请求,确定同时执行编译自针对一个或多个目标处理单元的单一源的一个或多个可执行代码的线程的总数,所述API请求包括具有多维值的全局线程数;
为所述一个或多个目标处理单元中的特定目标处理单元确定线程组大小,以按照全局线程数划分线程的总数;和
载入所述一个或多个可执行代码中的特定可执行代码,以便在所述特定目标处理单元中以线程组大小的线程组同时执行。
2.按照权利要求1所述的方法,其中多维值包括整数数组,并且其中线程的总数是按照所述整数数组的乘积而确定的。
3.按照权利要求1所述的方法,其中确定线程组大小包括:
为所述特定目标处理单元选择所述特定可执行代码;
从所选择的可执行代码中获取资源要求;
存取所述特定目标处理单元的资源能力;和
比较所述资源要求和所述资源能力。
4.按照权利要求3所述的方法,其中所述资源要求包括所选择的可执行代码中的寄存器的使用,并且所述资源能力包括所述一个或多个目标处理单元中的寄存器的使用状态。
5.按照权利要求1所述的方法,其中确定线程组大小是基于具有作为整数数组的多维值的局部线程数进行的,并且其中线程组大小等于所述整数数组的乘积。
6.按照权利要求5所述的方法,其中从来自在主处理单元中运行的应用程序的API请求获取局部线程数。
7.按照权利要求5所述的方法,其中从编译自所述单一源的所述特定可执行代码获取局部线程数。
8.按照权利要求1所述的方法,还包括:
为线程组中的线程分配全局线程标识符;和
为所述线程分配局部线程标识符,其中所述全局线程标识符具有多维全局值,并且所述局部线程标识符具有多维局部值。
9.按照权利要求8所述的方法,其中全局线程数、全局线程标识符和局部线程标识符具有相同的维数。
10.按照权利要求9所述的方法,其中多维局部值包括整数数组,并且其中所述整数数组的乘积小于线程组大小。
11.按照权利要求1所述的方法,其中所述一个或多个目标处理单元包括一个或多个图形处理单元(GPU)。
12.按照权利要求1所述的方法,其中所述一个或多个目标处理单元包括一个或多个中央处理单元(CPU)。
13.一种包含可执行指令的计算机可读存储介质,当被载入数据处理系统中时,所述可执行指令使数据处理系统执行操作,所述操作包括:
响应于来自在主处理单元中运行的应用程序的API(应用编程接口)请求,确定同时执行编译自针对一个或多个目标处理单元的单一源的一个或多个可执行代码的线程的总数,所述API请求包括具有多维值的全局线程数;
为一个或多个目标处理单元中的特定目标处理单元确定线程组大小,以按照全局线程数划分线程的总数;和
载入所述一个或多个可执行代码中的特定可执行代码,以便在所述特定目标处理单元中以线程组大小的线程组同时执行。
14.按照权利要求13所述的计算机可读存储介质,其中多维值包括整数数组,并且其中线程的总数是按照所述整数数组的乘积而确定的。
15.按照权利要求13所述的计算机可读存储介质,其中确定线程组大小包括:
为所述特定目标处理单元选择所述特定可执行代码;
从所选择的可执行代码中获取资源要求;
存取所述特定目标处理单元的资源能力;和
比较所述资源要求和所述资源能力。
16.按照权利要求15所述的计算机可读存储介质,其中所述资源要求包括所选择的可执行代码中的寄存器的使用,并且所述资源能力包括所述一个或多个目标处理单元中的寄存器的使用状态。
17.按照权利要求13所述的计算机可读存储介质,其中确定线程组大小是基于具有作为整数数组的多维值的局部线程数进行的,并且其中线程组大小等于所述整数数组的乘积。
18.按照权利要求17所述的计算机可读存储介质,其中从来自在主处理单元中运行的应用程序的API请求获取局部线程数。
19.按照权利要求17所述的计算机可读存储介质,其中从编译自所述单一源的所述特定可执行代码获取局部线程数。
20.按照权利要求13所述的计算机可读存储介质,其中所述方法还包括:
为线程组中的线程分配全局线程标识符;和
为所述线程分配局部线程标识符,其中所述全局线程标识符具有多维全局值,并且所述局部线程标识符具有多维局部值。
21.按照权利要求20所述的计算机可读存储介质,其中全局线程数、全局线程标识符和局部线程标识符具有相同的维数。
22.按照权利要求21所述的计算机可读存储介质,其中多维局部值包括整数数组,并且其中所述整数数组的乘积小于线程组大小。
23.按照权利要求13所述的计算机可读存储介质,其中所述一个或多个目标处理单元包括一个或多个GPU。
24.按照权利要求13所述的计算机可读存储介质,其中所述一个或多个目标处理单元包括一个或多个CPU。
25.一种并行计算系统,包括:
主处理器;
与所述主处理器耦接的一个或多个计算单元;
与所述主处理器和所述一个或多个计算单元中的至少一个耦接的存储器,所述主处理器执行来自存储器的应用程序,以执行:
响应于来自应用程序的API(应用编程接口)请求,确定同时执行编译自针对一个或多个计算单元的单一源的一个或多个可执行代码的线程的总数,所述API请求包括具有多维值的全局线程数;
为一个或多个计算单元中的特定计算单元确定线程组大小,以按照全局线程数划分线程的总数;和
载入所述一个或多个可执行代码中的特定可执行代码,以便在所述特定目标处理单元中以线程组大小的线程组同时执行。
26.按照权利要求25所述的方法,其中所述一个或多个计算单元包括一个或多个GPU。
27.按照权利要求26所述的方法,其中所述一个或多个计算单元包括一个或多个CPU。
28.一种计算机实现的方法,包括:
响应于来自在主处理单元中运行的应用程序的API(应用编程接口)请求,为一个或多个目标处理单元之一确定线程组大小,以在所述一个或多个目标处理单元之间并行地执行来自单一源的一个或多个可执行代码;以及
以线程组大小的线程组把所述一个或多个可执行代码中的特定可执行代码载入到所述特定目标处理单元中,以便在所述一个或多个目标处理单元中同时执行。
29.按照权利要求22所述的方法,其中API请求包括对线程组大小的询问,以优化执行所述特定可执行代码的所述特定目标处理单元的运行时资源使用。
30.按照权利要求23所述的方法,其中确定线程组大小包括:
从所选择的可执行代码中获取资源要求;
存取所述特定目标处理单元的资源能力;和
比较所述资源要求和所述资源能力,以基于线程组大小优化运行时资源使用。
31.按照权利要求22所述的方法,其中确定线程组大小包括:
从所述一个或多个可执行代码获取描述,所述描述包括指定编译所述单一源的线程组大小的编译器标记。
32.按照权利要求28所述的方法,其中所述一个或多个目标处理单元包括一个或多个GPU。
33.按照权利要求28所述的方法,其中所述一个或多个目标处理单元包括一个或多个CPU。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US5972808P | 2008-06-06 | 2008-06-06 | |
US61/059,728 | 2008-06-06 | ||
US12/264,894 US8225325B2 (en) | 2008-06-06 | 2008-11-04 | Multi-dimensional thread grouping for multiple processors |
US12/264,894 | 2008-11-04 | ||
PCT/US2009/041149 WO2009148713A1 (en) | 2008-06-06 | 2009-04-20 | Multi-dimensional thread grouping for multiple processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102099789A true CN102099789A (zh) | 2011-06-15 |
CN102099789B CN102099789B (zh) | 2014-07-09 |
Family
ID=40852122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980128251.5A Expired - Fee Related CN102099789B (zh) | 2008-06-06 | 2009-04-20 | 多处理器的多维线程分组 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8225325B2 (zh) |
EP (1) | EP2304562A1 (zh) |
JP (1) | JP5227454B2 (zh) |
KR (1) | KR101248318B1 (zh) |
CN (1) | CN102099789B (zh) |
WO (1) | WO2009148713A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104375824A (zh) * | 2013-08-13 | 2015-02-25 | 三星Sds株式会社 | 数据处理方法 |
CN104539698A (zh) * | 2014-12-29 | 2015-04-22 | 哈尔滨工业大学 | 一种基于延时修正的多线程套接字同步通信接入方法 |
CN107450978A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 分布式系统的线程管理方法和装置 |
CN107817969A (zh) * | 2016-08-31 | 2018-03-20 | 华为技术有限公司 | 一种程序生成方法、装置及计算机系统 |
CN110032407A (zh) * | 2019-03-08 | 2019-07-19 | 阿里巴巴集团控股有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
Families Citing this family (53)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US8533697B2 (en) * | 2007-02-14 | 2013-09-10 | The Mathworks, Inc. | Graphical processing unit (GPU) arrays providing high computational capabilities in a computing environment |
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 |
US20120297395A1 (en) * | 2008-08-18 | 2012-11-22 | Exludus Inc. | Scalable work load management on multi-core computer systems |
US9412158B2 (en) * | 2008-08-19 | 2016-08-09 | Cognex Corporation | Method of configuring a machine vision application program for execution on a multi-processor computer |
US20100156888A1 (en) * | 2008-12-23 | 2010-06-24 | Intel Corporation | Adaptive mapping for heterogeneous processing systems |
US20100250564A1 (en) * | 2009-03-30 | 2010-09-30 | Microsoft Corporation | Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution |
US9354944B2 (en) * | 2009-07-27 | 2016-05-31 | Advanced Micro Devices, Inc. | Mapping processing logic having data-parallel threads across processors |
US20110161495A1 (en) * | 2009-12-26 | 2011-06-30 | Ralf Ratering | Accelerating opencl applications by utilizing a virtual opencl device as interface to compute clouds |
DE102010019783A1 (de) * | 2010-05-06 | 2011-11-10 | Dieter Weiler | Verfahren zum Durchführen eines Programmes zur Verarbeitung von Daten und entsprechendes System |
US8723877B2 (en) | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
CN102279970B (zh) * | 2010-06-13 | 2013-02-27 | 清华大学 | 基于gpu的螺旋锥束ct重建方法 |
JP5440702B2 (ja) * | 2010-06-25 | 2014-03-12 | 富士通株式会社 | マルチコアプロセッサシステム、制御プログラム、および制御方法 |
US8996756B2 (en) | 2010-09-17 | 2015-03-31 | Oracle International Corporation | Using process location to bind IO resources on NUMA architectures |
US8874457B2 (en) * | 2010-11-17 | 2014-10-28 | International Business Machines Corporation | Concurrent scheduling of plan operations in a virtualized computing environment |
US8589938B2 (en) * | 2011-03-03 | 2013-11-19 | International Business Machines Corporation | Composite contention aware task scheduling |
US9152462B2 (en) | 2011-05-19 | 2015-10-06 | Nec Corporation | Parallel processing device, parallel processing method, optimization device, optimization method and computer program |
WO2013010159A1 (en) * | 2011-07-14 | 2013-01-17 | Siemens Corporation | Reducing the scan cycle time of control applications through multi-core execution of user programs |
TWI523144B (zh) * | 2011-10-31 | 2016-02-21 | 財團法人國家實驗研究院國家晶片系統設計中心 | 具有履歷電路單元之晶片結構 |
US9087150B2 (en) | 2011-12-05 | 2015-07-21 | International Business Machines Corporation | Performance analysis system for analyzing inter-thread communications to enhance performance in multithreaded system |
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 |
CN103294554A (zh) * | 2012-03-05 | 2013-09-11 | 中兴通讯股份有限公司 | 片上系统soc的多处理器的调度方法及装置 |
JP2013242823A (ja) * | 2012-05-23 | 2013-12-05 | Toshiba Corp | 情報処理装置、情報処理方法および制御プログラム |
WO2013178245A1 (en) * | 2012-05-29 | 2013-12-05 | Qatar Foundation | A graphics processing unit controller, host system, and methods |
US8982124B2 (en) | 2012-09-29 | 2015-03-17 | Intel Corporation | Load balancing and merging of tessellation thread workloads |
US9123167B2 (en) | 2012-09-29 | 2015-09-01 | Intel Corporation | Shader serialization and instance unrolling |
US9342366B2 (en) * | 2012-10-17 | 2016-05-17 | Electronics And Telecommunications Research Institute | Intrusion detection apparatus and method using load balancer responsive to traffic conditions between central processing unit and graphics processing unit |
US9104480B2 (en) * | 2012-11-15 | 2015-08-11 | International Business Machines Corporation | Monitoring and managing memory thresholds for application request threads |
US9135087B1 (en) * | 2012-12-27 | 2015-09-15 | Altera Corporation | Workgroup handling in pipelined circuits |
KR101537725B1 (ko) * | 2013-01-18 | 2015-07-20 | 서울대학교산학협력단 | 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 |
US20140282584A1 (en) * | 2013-03-14 | 2014-09-18 | Silicon Graphics International Corp. | Allocating Accelerators to Threads in a High Performance Computing System |
CN104423994B (zh) * | 2013-09-03 | 2018-05-11 | 华为技术有限公司 | 一种代码生成方法、编译器、调度方法、装置及调度系统 |
US9473545B2 (en) * | 2013-09-13 | 2016-10-18 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Administering group identifiers of processes in a parallel computer |
CN104036451B (zh) * | 2014-06-20 | 2018-12-11 | 深圳市腾讯计算机系统有限公司 | 基于多图形处理器的模型并行处理方法及装置 |
US20160335064A1 (en) * | 2015-05-12 | 2016-11-17 | Advanced Micro Devices, Inc. | Infrastructure to support accelerator computation models for active storage |
TWI558132B (zh) * | 2015-05-27 | 2016-11-11 | 宏碁股份有限公司 | 自動增減資料消費者的方法以及使用該方法的裝置 |
US10104171B1 (en) | 2015-11-25 | 2018-10-16 | EMC IP Holding Company LLC | Server architecture having dedicated compute resources for processing infrastructure-related workloads |
US20180005346A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
US10230398B2 (en) * | 2016-08-19 | 2019-03-12 | Samsung Electronics Co., Ltd. | Erasure code data protection and recovery computation system and method |
KR102365167B1 (ko) * | 2016-09-23 | 2022-02-21 | 삼성전자주식회사 | 멀티 쓰레드 프로세서 및 제어 방법 |
US10565017B2 (en) * | 2016-09-23 | 2020-02-18 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
KR101823129B1 (ko) | 2016-11-24 | 2018-03-09 | 주식회사 실크로드소프트 | 컴퓨팅 장치의 리소스를 분배하는 컴퓨터 프로그램, 방법 및 장치 |
KR102468506B1 (ko) * | 2016-11-24 | 2022-11-21 | 주식회사 실크로드소프트 | 컴퓨팅 장치의 리소스를 분배하는 컴퓨터 프로그램, 방법 및 장치 |
JP6957194B2 (ja) | 2016-12-13 | 2021-11-02 | キヤノン株式会社 | サービスシステム、その制御方法、およびそのプログラム |
US11157286B2 (en) * | 2018-05-07 | 2021-10-26 | Micron Technology, Inc. | Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor |
US20190370059A1 (en) * | 2018-05-30 | 2019-12-05 | Advanced Micro Devices, Inc. | Multi-kernel wavefront scheduler |
US10593094B1 (en) * | 2018-09-26 | 2020-03-17 | Apple Inc. | Distributed compute work parser circuitry using communications fabric |
JP6682599B2 (ja) * | 2018-10-19 | 2020-04-15 | イーソル株式会社 | オペレーティングシステム及びメモリ割り当て方法 |
US11119820B2 (en) * | 2019-03-15 | 2021-09-14 | Intel Corporation | Local memory sharing between kernels |
KR102224446B1 (ko) * | 2019-10-14 | 2021-03-09 | 이화여자대학교 산학협력단 | Gpgpu 스레드 블록 스케줄링 확장 방법 및 장치 |
US11360780B2 (en) * | 2020-01-22 | 2022-06-14 | Apple Inc. | Instruction-level context switch in SIMD processor |
US20230111125A1 (en) * | 2021-10-08 | 2023-04-13 | Nvidia Corporation | Application programming interface for scan operations |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928811A (zh) * | 2005-09-06 | 2007-03-14 | 阿尔卡特公司 | 处理操作管理系统和方法 |
Family Cites Families (90)
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 |
JPH06243113A (ja) * | 1993-02-19 | 1994-09-02 | Fujitsu Ltd | 並列計算機における計算モデルのマッピング法 |
JPH07219909A (ja) * | 1994-02-02 | 1995-08-18 | Hitachi Ltd | プログラム変換方法 |
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 |
US6513057B1 (en) | 1996-10-28 | 2003-01-28 | Unisys Corporation | Heterogeneous symmetric multi-processing system |
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 |
WO1999040551A1 (en) | 1998-01-26 | 1999-08-12 | Unif/X Inc. | A transaction execution system interface and enterprise system architecture thereof |
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 |
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 |
CN100557550C (zh) | 2002-10-16 | 2009-11-04 | 鲍志超 | 计算机通用关联应用处理器 |
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 |
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 |
CN101091175B (zh) | 2004-09-16 | 2012-03-14 | 辉达公司 | 负载均衡 |
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 |
US20070208956A1 (en) | 2004-11-19 | 2007-09-06 | Motorola, Inc. | Energy efficient inter-processor management method and system |
US20060132489A1 (en) | 2004-12-21 | 2006-06-22 | Hewlett-Packard Development Company, L.P. | Remote computing |
JP4367337B2 (ja) | 2004-12-28 | 2009-11-18 | セイコーエプソン株式会社 | マルチメディア処理システム及びマルチメディア処理方法 |
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 | 命令セット・シミュレータ生成装置及びシミュレータ生成方法 |
US7725496B2 (en) | 2005-06-17 | 2010-05-25 | 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 |
US7330962B2 (en) | 2005-11-14 | 2008-02-12 | Nvidia Corporation | Dynamic instruction sequence selection during scheduling |
US7788468B1 (en) * | 2005-12-15 | 2010-08-31 | Nvidia Corporation | Synchronization of threads in a cooperative thread array |
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 |
US7958509B2 (en) | 2005-12-21 | 2011-06-07 | International Business Machines Corporation | Method and system for scheduling of jobs |
US9038040B2 (en) * | 2006-01-25 | 2015-05-19 | International Business Machines Corporation | Method for partitioning programs between a general purpose core and one or more accelerators |
US7441224B2 (en) | 2006-03-09 | 2008-10-21 | Motorola, Inc. | Streaming kernel selection for reconfigurable processor |
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 |
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 |
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 |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
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 |
US8756264B2 (en) | 2006-06-20 | 2014-06-17 | Google Inc. | Parallel pseudorandom number generation |
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 |
WO2007149884A2 (en) | 2006-06-20 | 2007-12-27 | Google, Inc. | A multi-thread high performance computing system |
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 |
CN100377042C (zh) | 2006-07-04 | 2008-03-26 | 浙江大学 | 结合静态编译器和动态调频技术优化运行频率的节能方法 |
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 |
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 |
US7925900B2 (en) | 2007-01-26 | 2011-04-12 | Microsoft Corporation | I/O co-processor coupled hybrid computing device |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
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 |
US8010954B2 (en) * | 2007-02-14 | 2011-08-30 | The Mathworks, Inc. | Parallel programming interface to dynamically allocate program portions |
US7975001B1 (en) | 2007-02-14 | 2011-07-05 | The Mathworks, Inc. | Bi-directional communication in a parallel processing environment |
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 | 並列実行プログラム、該プログラムを記録した記録媒体、並列実行装置および並列実行方法 |
US8276164B2 (en) | 2007-05-03 | 2012-09-25 | Apple Inc. | Data parallel computing on multiple processors |
US8108633B2 (en) | 2007-04-11 | 2012-01-31 | Apple Inc. | Shared stream memory on multiple processors |
US8286196B2 (en) | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution 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 |
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,894 patent/US8225325B2/en active Active
-
2009
- 2009-04-20 EP EP09758876A patent/EP2304562A1/en not_active Withdrawn
- 2009-04-20 JP JP2011512490A patent/JP5227454B2/ja active Active
- 2009-04-20 CN CN200980128251.5A patent/CN102099789B/zh not_active Expired - Fee Related
- 2009-04-20 WO PCT/US2009/041149 patent/WO2009148713A1/en active Application Filing
- 2009-04-20 KR KR1020117000311A patent/KR101248318B1/ko active IP Right Grant
-
2012
- 2012-06-27 US US13/534,900 patent/US9720726B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1928811A (zh) * | 2005-09-06 | 2007-03-14 | 阿尔卡特公司 | 处理操作管理系统和方法 |
Non-Patent Citations (2)
Title |
---|
HALFHILL T: "Parallel Processing for the x86", 《MICROPROCESSOR REPORT》 * |
HALFHILL T: "Parallel Processing with CUDA", 《MICROPROCESSOR REPORT》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104375824A (zh) * | 2013-08-13 | 2015-02-25 | 三星Sds株式会社 | 数据处理方法 |
CN104375824B (zh) * | 2013-08-13 | 2018-02-27 | 三星Sds株式会社 | 数据处理方法 |
CN104539698A (zh) * | 2014-12-29 | 2015-04-22 | 哈尔滨工业大学 | 一种基于延时修正的多线程套接字同步通信接入方法 |
CN104539698B (zh) * | 2014-12-29 | 2018-01-26 | 哈尔滨工业大学 | 一种基于延时修正的多线程套接字同步通信接入方法 |
CN107450978A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 分布式系统的线程管理方法和装置 |
CN107817969A (zh) * | 2016-08-31 | 2018-03-20 | 华为技术有限公司 | 一种程序生成方法、装置及计算机系统 |
CN110032407A (zh) * | 2019-03-08 | 2019-07-19 | 阿里巴巴集团控股有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
US11080094B2 (en) | 2019-03-08 | 2021-08-03 | Advanced New Technologies Co., Ltd. | Method, apparatus, and electronic device for improving parallel performance of CPU |
Also Published As
Publication number | Publication date |
---|---|
WO2009148713A1 (en) | 2009-12-10 |
US9720726B2 (en) | 2017-08-01 |
JP5227454B2 (ja) | 2013-07-03 |
KR101248318B1 (ko) | 2013-03-27 |
US8225325B2 (en) | 2012-07-17 |
US20090307704A1 (en) | 2009-12-10 |
CN102099789B (zh) | 2014-07-09 |
KR20110019776A (ko) | 2011-02-28 |
EP2304562A1 (en) | 2011-04-06 |
US20120320071A1 (en) | 2012-12-20 |
JP2011523140A (ja) | 2011-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102099789B (zh) | 多处理器的多维线程分组 | |
CN102099788A (zh) | 用于在多处理器上进行数据并行计算的应用编程接口 | |
US10949177B2 (en) | Method and system of a command buffer between a CPU and GPU | |
CN102870096B (zh) | 子缓冲器对象 | |
CN101657795B (zh) | 多处理器上的数据并行计算 | |
CN101802789B (zh) | 多处理器上的并行运行时执行 | |
CN103870246A (zh) | 用于线程的simd执行的编译器控制区调度 | |
CN104823215A (zh) | 子画面图形渲染系统 | |
CN103425533A (zh) | 用于管理嵌套执行流的方法和系统 | |
CN103460188A (zh) | 用于基于活跃分析的再具体化以减少寄存器不足并提高并行度的技术 | |
KR101787653B1 (ko) | 병렬 파이프라인에서의 분기에 대한 하드웨어 및 소프트웨어 해법 | |
CN103996216A (zh) | 用于曲面细分和几何着色器的电力高效属性处置 | |
CN103870213A (zh) | 经由管线化的状态包触发性能事件捕获 | |
CN103218259A (zh) | 计算任务的调度和执行 | |
CN103793206A (zh) | 基于工作队列的图形处理单元工作创建 | |
Tarakji et al. | The development of a scheduling system GPUSched for graphics processing units | |
KR102209526B1 (ko) | 병렬 연산을 통한 단백질-리간드 상호 작용 분석 방법 및 장치 | |
CN103927150B (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 | ||
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: 20140709 |