CN101657795B - 多处理器上的数据并行计算 - Google Patents
多处理器上的数据并行计算 Download PDFInfo
- Publication number
- CN101657795B CN101657795B CN2008800118294A CN200880011829A CN101657795B CN 101657795 B CN101657795 B CN 101657795B CN 2008800118294 A CN2008800118294 A CN 2008800118294A CN 200880011829 A CN200880011829 A CN 200880011829A CN 101657795 B CN101657795 B CN 101657795B
- Authority
- CN
- China
- Prior art keywords
- compute devices
- physical compute
- physical
- compute
- 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.)
- Active
Links
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
- 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/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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开了分配附接到运行应用的主处理单元的诸如CPU或GPU之类的一个或多个物理计算装置以用于执行该应用的一个或多个线程的方法和设备。该分配可以是基于代表来自应用的用于执行在一个或多个线程中执行可执行体的处理性能需求的数据的。计算装置标识符可以与所分配的物理计算装置相关联,用来并发地在所分配的物理计算装置中的一个或多个物理计算装置中的一个或多个线程中并发地调度和执行该可执行体。
Description
相关申请的交叉引用
本申请与发明人为Aaftab Munshi等,在2007年4月11日提交的标题为“DATA PARALLEL COMPUTING ON MULTIPLE PROCESSORS”(多处理器上的数据并行计算)的美国临时专利申请No.60/923,030和发明人为Aaftab Munshi,在2007年4月20日提交的标题为“DATAPARALLEL COMPUTING ON MULTIPLE PROCESSORS”(多处理器上的数据并行计算)的美国临时专利申请No.60/925,616相关,并且要求这两者的权益,这两者通过引用被结合于此。
技术领域
本发明一般地涉及数据并行计算,更具体而言,本发明涉及跨越CPU(中央处理单元)和GPU(图形处理单元)两者的数据并行计算。
背景技术
随着GPU继续演进成高性能并行计算装置,越来越多的应用被写入以在与通用计算装置类似的GPU中执行数据并行计算。如今,这些应用被设计成在使用供应商特定接口的特定GPU上运行。因此,它们既不能在数据处理系统具有GPU和CPU两者时平衡(leverage)CPU,也不能在这样的应用正运行在来自不同供应商的GPU上时被平衡。
然而,随着越来越多的CPU包括多个核心来执行数据并行模型的计算,通过可用的CPU和/或GPU的任一者可以支持越来越多的处理任务。传统上,GPU和CPU是通过相互不兼容的分开的编程环境来配置的。大多数GPU需要供应商特定的专用程序。结果,应用很难在处理资源方面平衡CPU和GPU两者,例如具有数据并行计算能力的GPU连同多核CPU。
因此,需要现代的数据处理系统来克服以上问题以允许应用在能够执行任务的任何可用处理资源(例如CPU或一个或多个GPU)中执行该任务。
发明内容
本发明的一个实施例包括接收来自应用程序的处理性能需求以指定包括CPU和GPU的一个或多个物理计算装置来并行执行应用的多个线程的方法和设备。针对应用生成计算装置标识符以指定用于一个或多个线程的一个或多个物理计算装置。性能需求和计算装置标识符与通过应用的API调用相关联。
在一个可替换实施例中,应用程序发送代表处理性能需求的数据,以接收用于该应用程序的一个或多个线程的一个或多个计算标识符。计算标识符针对该应用程序指定包括CPU和GPU的一个或多个物理计算装置来执行这一个或多个线程。
在一个可替换实施例中,并行计算体系结构包括:主处理器,该主处理器与图形处理单元(GPU)和中央处理单元(CPU)耦合,来在耦合到该主处理器、GPU和CPU的存储器中托管(host)系统应用程序和第一应用程序。存储器存储部分地在主处理器上执行的第一应用程序。第一应用程序的多个线程被有选择地调度以用于在GPU或CPU的任一者上执行。系统应用程序通过API与第一应用程序通信,来向多个线程指派至少一个逻辑计算装置标识符,这至少一个逻辑计算装置标识符指定所述CPU和所述GPU中的至少一者。
在一个可替换实施例中,由逻辑计算装置标识符标识的并行计算机体系结构中的计算单元包括至少一个物理处理装置,所述物理处理装置包括存储器。这至少一个物理处理装置执行与存储器中所分配的存储流相关联的一个或多个计算内核。
从附图和以下详细描述中,本发明的其他特征将显而易见。
附图说明
在附图的示图中通过示例而非限制来图示本发明,相似的标号表示相似的元素,附图中:
图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数据并行计算的系统的一个实施例的框图;
图2是图示出具有多个并行操作来并发地执行多个线程的计算处理器的计算装置的示例的框图;
图3是图示出经由计算装置标识符被配置为逻辑计算装置的多个物理计算装置的一个实施例的框图;
图4是图示出通过匹配从应用接收到的能力需求来利用计算装置标识符配置多个物理计算装置的处理的一个实施例的流程图;
图5是图示出在逻辑计算装置中执行计算可执行体的处理的一个实施例的流程图;
图6是图示出加载可执行体的运行时处理的一个实施例的流程图,该处理包括针对被确定来执行该可执行体的一个或多个物理计算装置来编译源;
图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理的一个实施例的流程图;
图8A是图示出建立API(应用编程接口)库的处理的一个实施例的流程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行体和源存储在库中;
图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库所取出的相应源的处理的一个实施例的流程图;
图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计算内核源的示例的样本源代码;
图10是图示出通过调用API来配置用于在多个物理计算装置中执行多个可执行体中的一个的逻辑计算装置的示例的样本源代码;
图11图示出可以与在此所述的实施例结合使用的、具有多个CPU和GPU(图形处理单元)的典型计算机系统的一个示例。
具体实施方式
在此描述用于多处理器上的数据并行计算的方法和设备。在以下描述中,阐述了大量特定细节以提供对本发明实施例的透彻说明。然而,对于本领域技术人员显而易见的是,可以实行本发明实施例而不用这些特定细节。在其它实例中,没有详细示出公知的组件、结构和技术以免使对本描述的理解模糊。
在说明书中,提及“一个实施例”或“实施例”意味着结合该实施例描述的具体特征、结构或特征可以包括在本发明的至少一个实施例中。在说明书中的各个地方出现的短语“在一个实施例中”不一定涉及同一个实施例。
通过包括硬件(例如,电路、专用逻辑等)、软件(例如在通用计算机系统或专用机器上运行的软件)或这两者的组合的处理逻辑来执行以下示图中所描述的处理。尽管以下根据某些顺序操作来描述处理,但是应当明白,可以以不同的顺序来执行所述操作中的某些操作。并且,可以并行地而不是顺序地执行某些操作。
图形处理单元(GPU)可以是执行诸如2D、3D图形操作之类的高效图形操作和/或数字视频相关功能的专用图形处理器。GPU可以包括用来执行诸如位块传输(blitter)操作、纹理映射、多边形渲染(rendering)、像素着色(shading)和顶点着色之类的图形操作的专门的(可编程的)硬件。已知GPU从帧缓冲器中获取数据并且将像素混合到一起来将图像背景渲染到该帧缓冲器中以用于显示。GPU还可以控制该帧缓冲器并且允许该帧缓冲器被用来刷新诸如CRT或LCD显示器之类的显示器,CRT或LCD显示器是需要至少20Hz的速率的刷新(例如,每1/30秒,利用来自帧缓冲器的数据刷新该显示器)的短存留显示器。通常,GPU可以从与GPU耦合的CPU获取图形处理任务,通过显示控制器向显示装置输出光栅图形图像。在本说明书中提及的“GPU”可以是如Lindholdm等的美国专利No.7015913“Method and Apparatus for Multitheraded Processing of Data In aProgrammable Graphics Processor”(用于可编程图形处理器中的数据的多线程处理的方法和设备)和Swan等的美国专利No.6970206“Method forDeinterlacing Interlaced Video by A Graphics Processor”(用于通过图形处理器对交织后的视频进行去交织的方法)中所描述的图像处理器或可编程图形处理器,这两个专利被通过引用结合于此。
在一个实施例中,多个不同类型的处理器(例如CPU或GPU)可以并发地执行一个或多个应用的数据并行处理任务来增大数据处理系统中可用处理资源的利用效率。数据处理系统的处理资源可以是基于多个物理计算装置的。物理计算装置可以是CPU或GPU。在一个实施例中,数据并行处理任务可以委托给多种类型的处理器,例如能够执行该任务的CPU或GPU。数据处理任务可以从处理器要求某些特定处理能力。处理能力例如可以是专用纹理(texturing)硬件支持、双精度浮点运算、专用本地存储器、流数据缓存或同步原语(synchronization primitives)。不同类型的处理器可以提供不同但是重叠的处理能力集。例如,CPU和GPU两者都能执行双精度浮点计算。在一个实施例中,应用能够平衡可用的CPU或GPU中的任一者来执行数据并行处理任务。
在另一实施例中,可以在运行时期间自动执行对用于数据并行处理任务的多种不同类型的处理资源的选择和分配。应用可以通过API(应用程序接口)向数据处理系统的运行时平台发送包括数据处理任务所希望的能力需求列表的提示。相应地,运行时平台可以确定多个当前可用的、具有与所接收到的提示相匹配的能力的CPU和/或GPU来委托该应用的数据处理任务。在一个实施例中,该能力需求列表可以依赖于基础的数据处理任务。能力需求列表可以适用例如包括来自不同供应商的具有不同版本的GPU和多核CPU的不同处理器集合。因此,可以防止应用提供以特定类型CPU或GPU为目标的程序。
图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数据并行计算的系统的一个实施例的框图。系统100可以实现并行计算体系结构。在一个实施例中,系统100可以是包括一个或多个主处理器的图形系统,这些主处理器通过数据总线113与一个或多个中央处理器117和诸如媒体处理器115之类的一个或多个其它处理器耦合。多个主处理器可以在托管系统(hosting system)101中被连到一起。这多个中央处理器117可以包括来自不同供应商的多核CPU。媒体处理器可以是具有专用纹理渲染硬件的GPU。另一媒体处理器可以是支持专用纹理渲染硬件和双精度浮点体系结构两者的GPU。多个GPU可以连接到一起以用于可扩缩连接接口(SLI)或CrossFire配置。
在一个实施例中,托管系统101可以支持软件栈,软件栈包括软件栈组件,例如应用103、计算平台层111、计算运行时层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中加载计算内核对象的可执行体及其相应的源程序两者。计算内核对象的源程序可以是计算内核程序。根据被配置为包括多种类型和/或不同版本的物理计算装置的逻辑计算装置,可以基于单个源程序来加载多个可执行体。在一个实施例中,计算运行时层109可以激活计算编译器107来将所加载的源程序在线编译成最优用于被配置来执行可执行体的目标处理器(例如,CPU或GPU)的可执行体。
除了根据相应源程序的现有可执行体以外,在线编译出的可执行体还可以被存储以用于将来的调用。此外,计算可执行体可以被离线编译并且经由API调用被加载到计算运行时109。计算应用库105和/或应用103可以响应于来自应用的库API请求来加载相关联的可执行体。可以为计算应用库105或应用103动态更新新编译出的可执行体。在一个实施例中,计算运行时109可以用通过新升级版本的计算装置的计算编译器107在线编译出的新可执行体来替换应用中的现有计算可执行体。计算运行时109可以插入在线编译出的新可执行体来更新计算应用库105。在一个实施例中,计算运行时109可以在加载处理任务的可执行体时调用计算编译器107。在另一个实施例中,计算编译器107可以被离线调用来建立用于计算应用库105的可执行体。计算编译器107可以编译并且链接计算内核程序来生成计算内核可执行体。在一个实施例中,计算应用库105可以包括多个用来支持例如开发工具箱和/或图像处理的函数。每个库函数可以对应于针对多个物理计算装置的计算应用库105中所存储的计算源程序和一个或多个可执行体。
图2是图示出具有多个计算处理器的计算装置的示例的框图,这多个计算处理器并行地进行操作来并发地执行多个线程。每个计算处理器可以并行地(或并发地)执行多个线程。可以并行执行的线程可以称为线程块。计算装置可以具有能被并行执行的多个线程块。例如,示出在计算装置205中,M个线程作为一个线程块执行。多个线程块中的线程,例如,计算处理器_1 205的线程1和计算处理器_L 203的线程N,可以在一个计算装置上分别的计算处理器上或在多个计算装置上并行地执行。在多个计算处理器上的多个线程块可以并行地执行计算内核可执行体。多于一个计算处理器可以是基于例如ASIC(专用集成电路)装置的单个芯片的。在一个实施例中,可以在跨越多个芯片的多于一个的计算处理器上并发地执行来自应用的多个线程。
计算装置可以包括一个或多个计算处理器,例如计算处理器_1 205和计算处理器_L 203。本地存储器可以与计算处理器耦合。可以由与计算处理器耦合的本地存储器来支持在计算处理器中运行的单个线程块中线程之间的共享存储器。跨越不同的线程块的多个线程,例如线程1 213和线程N209可以共享与计算装置201耦合的流存储器217中所存储的流。流可以是计算内核可执行体能够对其进行操作的元素的集合,例如图像流或变量流。变量流可以被分配用于存储处理任务期间对其进行操作的全局变量。图像流可以是可用于图像缓冲、纹理缓冲或帧缓冲的缓冲器。
在一个实施例中,计算处理器的本地存储器可以实现为专用本地存储装置,例如处理器_1的本地共享存储器219和处理器_L的本地共享存储器211。在另一实施例中,计算处理器的本地存储器可以实现为用于计算装置的一个或多个计算处理器2的流存储器的流读-写缓存,例如用于计算装置201中的计算处理器205 203的流数据缓存215。在另一实施例中,本地存储器可以实现在与本地存储器耦合的计算处理器中运行的线程块中的线程之间共享的专用本地存储装置,例如与计算处理器_1 205耦合的本地共享存储器219。专用本地存储装置可以不被跨越不同线程块的线程共享。如果计算处理器(例如处理器_1 205m)的本地存储器被实现为流读-写缓存(例如,流数据缓存215),则在本地存储器中声明的变量可以被从流存储器217中分配并且被存储到所实现的实现本地存储器的流读-写缓存(例如,流数据缓存215)中。当例如流读-写缓存和专用本地存储装置对于相应的计算装置都不可用时,线程块内的线程可以共享流存储器217中所分配的本地变量。在一个实施例中,每个线程与私有(private)存储器相关联,私有存储器用来存储由线程中所调用的函数使用的线程私有变量。例如,私有存储器1 211可以只被线程1 213访问。
图3是图示出经由计算装置标识符而被配置为逻辑计算装置的多个物理计算装置的一个实施例的框图。在一个实施例中,应用303和平台层305可以在主CPU 301中运行。应用303可以是图1的应用103中的一个。托管系统101可以包括主CPU 301。物理计算装置Physical_Compute_Device-1305...Physical_Compute_Device-N 311中的每一个可以是图1的CPU 117或GPU 115中的一个。在一个实施例中,计算平台层111可以响应于来自应用303的API请求来生成计算装置标识符307,以用于根据API请求中所包括的能力需求的列表来配置数据并行处理资源。计算装置标识符307可以涉及根据计算平台层111进行的配置来选择实际的物理计算装置Physical_Compute_Device-1 305...Physical_Compute_Device-N 311。在一个实施例中,逻辑计算装置309可以代表与主CPU 301分离的一组所选择的实际物理计算装置。
图4是图示出用于通过匹配从应用接收到的能力需求、利用计算装置标识符来配置多个物理计算装置的处理的实施例的流程图。可以根据图1的系统100,在由托管系统101托管的数据处理系统中执行处理400。数据处理系统可以包括托管平台层(例如图1的计算平台层111)的主处理器和多个附接到主处理器的物理计算装置(例如,图1的CPU 117和GPU115)。
在块401中,在一个实施例中,处理400可以建立代表与一种或多种相应的能力相关联的多个物理计算装置的数据结构(或计算装置数据结构)。各个物理计算装置可以附接到执行处理400的处理系统。诸如CPU或GPU之类的物理计算装置的能力或计算能力可以包括物理计算装置是否支持处理特征、存储器访问机制或指定扩展。处理特征可以与专用纹理硬件支持、双精度浮点运算或同步支持(例如互斥)有关。物理处理装置的存储器访问机制可以与变量流缓存的类型、图像流缓存的类型或专用本地存储器支持有关。数据处理系统的系统应用可以响应于将新的物理计算装置附接到数据处理系统来更新数据结构。在一个实施例中,可以预先确定物理计算装置的能力。在另一实施例中,数据处理系统的系统应用可以在运行时期间发现新附接的物理处理装置。该系统应用可以取出新发现的物理计算装置的能力,来更新代表所附接的物理计算装置及它们的相应能力的数据结构。
根据一个实施例,在块403,处理400可以接收来自应用的计算能力需求。该应用可以通过调用API向系统应用发送计算能力需求。该系统应用可以与该应用的托管系统中的软件栈的平台层相对应。在一个实施例中,计算能力需求可以标识用于请求处理资源来执行该应用的任务的所需能力的列表。在一个实施例中,该应用可以要求所请求的资源在多个线程中并发地执行任务。作为响应,在块405,处理400可以从所附接的物理计算装置中选择一组物理计算装置。可以基于计算能力需求与能力数据结构中所存储的计算能力之间的匹配来确定选择。在一个实施例中,处理400可以根据通过能力需求提供的提示来执行匹配。
处理400可以根据物理计算装置和计算能力需求之间所匹配的计算能力的数目来确定匹配评分。在一个实施例中,处理400可以选择具有最高匹配评分的多个物理计算装置。在另一实施例中,如果能力需求中的每个能力都被匹配,则处理400可以选择物理计算装置。处理400可以在块405,确定多组匹配物理计算装置。在一个实施例中,根据负载均衡能力来选择每组匹配物理装置。在一个实施例中,在块407,处理400可以为块405处所选择的每组物理计算装置生成计算装置标识符。处理400可以通过调用API向应用返回所生成的一个或多个计算装置标识符。应用可以根据计算装置标识符来选择采用哪些处理资源来执行任务。在一个实施例中,处理400在块407可以为所接收到的每个能力需求生成最多一个计算装置标识符。
在一个实施例中,在块409,处理400可以根据相应的计算装置标识符来分配用于初始化块405处所选择的一组物理计算装置的逻辑计算装置的资源。处理400可以根据块405处的选择,响应于来自已经接收到一个或多个计算装置标识符的应用的API请求来执行对逻辑计算装置的初始化。处理400可以在该应用的逻辑计算装置上创建上下文对象。在一个实施例中,上下文对象与该应用上运行的托管系统中的一个应用线程相关联。并发地执行一个逻辑计算装置中或跨越不同的逻辑计算装置的处理任务的多个线程可以基于分开的上下文对象。
在一个实施例中,处理400可以基于包括cuCreateContext、cuRetainContext和cuReleaseContext的多个API。API cuCreateContext创建计算上下文。计算上下文可以对应于计算上下文对象。API cuRetainContext使用由上下文标识的具体计算上下文作为cuRetainContext的输入自变量来递增实例的数目。API cuCreateContext进行隐式保留。这对于通常获得由应用传递给它们的上下文的第三方库很有帮助。然而,有可能该应用会删除上下文而不通知库。允许多个实例附接到上下文并且从上下文释放解决了由库使用的计算上下文不再有效的问题。如果cuRetainContext的输入自变量与有效计算上下文对象不相对应,则cuRetainContext返回CU_INVALID_CONTEXT。API cuReleaseContext从有效计算上下文中释放实例。如果cuReleaseContext的输入自变量与有效的计算上下文对象不相对应,则cuReleaseContext返回CU_INVALID_CONTEXT。
图5是图示出在逻辑计算装置中执行计算可执行体的处理的实施例的流程图。在一个实施例中,可以由数据处理系统中的运行时层(例如,图1的计算运行时层109)来执行处理500。在块501处,处理500可以为逻辑计算装置上要运行的计算可执行体分配一个或多个流。处理任务可以由对流进行操作的计算可执行体来执行。在一个实施例中,处理任务可以包括输入流和输出流。处理500可以将所分配的流存储器映射到应用的逻辑地址或从其映射到所分配的流存储器。在一个实施例中,处理500可以基于来自应用的API请求来执行块501的操作。
在块503处,根据一个实施例,处理500可以创建逻辑计算装置的计算内核对象。计算内核对象可以是针对用于执行函数的相应处理任务的相关联的流和可执行体而创建的对象。处理500可以在块505为计算内核对象建立函数自变量。函数自变量可以包括为函数输入或输出分配的流,例如块501处分配的流。处理500可以在块507处将计算内核可执行体和/或计算内核源加载到计算内核对象中。计算内核可执行体可以是根据逻辑计算装置要被执行用于执行与内核对象相关联的相应处理任务的可执行体。在一个实施例中,计算内核可执行体可以包括例如与目标物理计算装置的类型、版本和/或编译选项相关联的描述数据。计算内核源可以是从其编译出计算内核可执行体的源代码。处理500可以在块507加载与计算内核源相对应的多个计算内核可执行体。处理500可以从应用或通过诸如图1的计算应用库105之类的计算库来加载计算内核可执行体。计算内核可执行体可以利用相应计算内核源来加载。在一个实施例中,处理500可以根据来自应用的API请求执行块503、505和507处的操作。
在块511,处理500可以更新执行队列来利用逻辑计算装置执行计算机内核对象。处理500可以利用计算运行时(例如,图1的计算运行时109)的合适的自变量、响应于来自应用或计算应用库(例如,图1的应用103或计算应用库105)的API调用来执行计算内核。在一个实施例中,处理500可以生成执行计算内核的计算内核执行实例。对用于执行计算内核的计算运行时(例如图1的计算运行时109)的API调用本身实际上可以是异步的。执行实例可以由可由计算运行时(例如,图1的计算运行时109)返回的计算事件对象来标识。计算内核执行实例可以被添加到用于执行计算内核实例的执行队列。在一个实施例中,对用于执行计算内核实例的执行队列的API调用可以包括计算处理器上同时并行执行的线程的数目和要使用的计算处理器的数目。计算内核执行实例可以包括指示所希望的用于执行相应计算内核对象的优先顺序的优先值。计算内核执行实例也可以包括标识之前的执行实例的事件对象和/或用于执行该执行的预期数目的线程和预期数目的线程块。可以在API调用中指定线程块的数目和线程的数目。在一个实施例中,事件对象可以指示包括该事件对象的执行实例与由事件对象标识的另一执行实例之间的执行顺序关系。可以要求包括事件对象的执行实例在由该事件对象标识的另一执行实例完成执行之后被执行。事件对象可以称为queue_after_event_object。在一个实施例中,执行队列可以包括多个用于执行相应的计算内核对象的计算内核执行实例。用于一个计算内核对象的一个或多个计算内核执行实例可以被调度用于执行队列中的执行。在一个实施例中,处理500可以响应于来自应用的API请求来更新该执行队列。该执行队列可以由该应用所运行于的托管数据系统来托管。
在块513,处理500可以从用于执行的执行队列中选择计算内核执行实例。在一个实施例中,处理500可以根据相应逻辑计算装置来选择多于一个要被并发执行的计算内核执行实例。处理500可以判断:是否基于计算内核执行实例与执行队列中其他执行实例相关联的优先顺序和依赖关系而从执行队列中选择了计算内核执行实例。可以通过根据加载到相应计算内核对象的可执行体来执行该计算内核对象,从而执行计算内核执行实例。
在块517,在一个实施例中,处理500可以选择加载到与所选择的计算内核实例相对应的计算内核对象的多个可执行体中的一个可执行体,以用于在与该计算内核对象的逻辑计算装置相关联的物理计算装置中执行。处理500可以针对一个计算内核执行实例选择要在多于一个物理计算装置中并行执行的多于一个可执行体。该选择可以基于与和所选择的计算内核实例相关联的逻辑计算装置相对应的物理计算装置的当前执行状况。物理计算装置的执行状况可以包括运行的线程的数目、本地存储器利用水平和处理器利用水平(例如,每单位时间的操作的峰值数目)等。在一个实施例中,该选择可以是基于预定的利用水平的。在另一个实施例中,该选择可以是基于与计算内核执行实例相关联的线程的数目和线程块的数目。处理500可以从物理计算装置取出执行状况。在一个实施例中,处理500可以执行用于从执行队列中选择计算内核执行实例的操作,以在块513 517处与托管系统中运行的应用异步地执行。
在块519,处理500可以检查被调度用于该执行队列中的执行的计算内核执行实例的状况。可以由唯一的计算事件对象来标识各个执行实例。当相应的计算内核执行实例根据计算运行时(例如,图1的运行时109)被排队时,事件对象可以被返回给调用用于执行该执行实例的API的应用或计算应用库(例如,图5的应用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可以在块601处为各个与逻辑计算装置相关联的物理计算装置选择一个或多个与该物理计算装置相兼容的现有计算内核可执行体。计算内核可执行体可以在相兼容的物理计算装置中被执行。该现有计算内核可执行体可以从应用或通过例如图1的计算应用库105的计算库获得。所选择的计算内核可执行体中的每一个计算内核可执行体可以由至少一个物理计算装置执行。在一个实施例中,该选择可以是基于与现有计算内核可执行体相关联的描述数据的。
如果存在被选择的现有计算内核对象,则处理600可以在块603处判断所选择的计算内核可执行体中的任何一者是否对于物理计算装置是最优的。该判断例如可以是基于物理计算装置的版本的。在一个实施例中,如果描述数据中的目标物理计算装置的版本与物理计算装置的版本相匹配,则处理600可以判断出现有计算内核可执行体对于该物理计算装置是最优的。
在块605,在一个实施例中,处理600可以使用在线编译器(例如图1的计算编译器107)来从相应的计算机内核源建立对于物理计算装置最优的新的计算内核可执行体。如果在块603处发现所选择的计算内核可执行体中没有计算内核可执行体对于物理计算装置是最优的,则处理600可以执行在线建立。在一个实施例中,如果在块601处发现现有计算内核可执行体中没有计算内核可执行体与物理计算装置相兼容,则处理600可以执行在线建立。计算内核源可以从应用或通过诸如图1的计算应用库105之类的计算库来获得。
如果块605处的建立是成功的,则在一个实施例中,处理600可以在块607处将新建立的计算内核可执行体加载到相应的计算内核对象中。否则,处理600可以在块609处将所选择的计算内核可执行体加载到内核对象。在一个实施例中,如果计算内核可执行体还未被加载,则处理600可以将计算内核可执行体加载到计算内核对象。在另一实施例中,如果计算内核对象的现有计算内核可执行体中没有与物理计算装置相兼容的计算内核可执行体,并且相应计算内核源不可获得,则处理600可以生成错误消息。
图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理的一个实施例的流程图。处理700可以作为图5的块513处的处理500的一部分被执行。在一个实施例中,处理700可以在块701处标识执行队列中当前所调度的计算内核执行实例之间的依赖条件。计算内核执行实例的依赖条件可以防止计算内核执行实例的执行,如果该条件未完成的话。在一个实施例中,依赖关系可以是基于由输出流馈送的输入流之间的关系的。在一个实施例中,处理700可以根据执行实例的相应函数的输入流和输出流来检测执行实例之间的依赖关系。在另一个实施例中,具有较低优先级的执行实例可以与具有高优先级的另一执行具有依赖关系。
在块703,在一个实施例中,处理700可以从多个被调度的计算内核执行实例中选择没有任何未完成的依赖条件的计算内核执行实例用于执行。该选择可以是基于被指派给执行实例的优先级的。在一个实施例中,所选择的计算内核执行实例可以与多个计算内核执行实例中的最高优先级相关联而没有未完成的依赖条件。在块705,处理700可以取出与所选择的计算内核执行实例相对应的物理计算装置的当前执行状况。在一个实施例中,物理计算装置的执行状况可以是从预定的存储位置中取出的。在另一实施例中,处理700可以向物理计算装置发送状况请求来接收执行状况报告。处理700可以在块707处基于所取出的执行状况,指派物理计算装置中的一个或多个来执行所选择的计算内核执行实例。在一个实施例中,物理计算装置可以根据与其他物理计算装置的负载均衡而被指派用于执行。所选择的物理计算装置可以与满足预定标准(例如,在预定处理器利用水平和/或存储器利用水平以下)的执行状况相关联。在一个实施例中,预定标准可以依赖于与所选择的计算内核执行实例相关联的线程的数目和线程块的数目。处理700可以将用于相同的执行实例或多个实例的分开的计算内核可执行体加载到一个或多个所指派的物理计算装置,以在多个线程中并行执行。
图8A是图示出建立API(应用编程接口)库的处理的一个实施例的流程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行体和源存储在库中。处理800A可以在块801处被离线执行以将API函数的源代码加载到数据处理系统中。源代码可以是在一个或多个物理计算装置中所要执行的计算内核源。在一个实施例中,处理800A可以在块803处针对API函数指派多个目标物理计算装置。可以根据类型(例如,CPU或GPU)、版本或供应商来指派目标物理计算装置。处理800A可以在块805处针对各个所指派的目标物理计算装置将源代码编译成可执行体,例如,计算内核可执行体。在一个实施例中,处理800A可以基于在线编译器(例如图1的计算编译器107)来离线执行编译。在块807,处理800A可以将API函数的源代码与针对所指派的目标物理计算装置所编译出的相应可执行体存储到API库中。在一个实施例中,可以存储各个可执行体与描述数据,描述数据例如包括目标物理计算装置的类型、版本和供应商和/或编译选项。通过运行时期间的处理(例如,图5的处理500)可以取出描述数据。
图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库所取出的相应源的处理的一个实施例的流程图。在一个实施例中,处理800B在包括API库(例如,图1的计算应用库105)的数据处理系统中(例如,图1的托管系统101中)运行应用程序(例如,图1的应用103)。在块811处,处理800B可以基于API请求从API库中取出源(例如,计算内核源)和一个或多个相应可执行体(例如,计算内核可执行体),例如图5的块507处的处理500。各个可执行体可以与一个或多个目标物理计算装置相关联。在一个实施例中,计算内核可执行体可以与多种版本的物理计算装置后向兼容。在块813处,处理800B可以在多个物理计算装置中执行基于API请求所取出的可执行体中的一个来执行相关联的API函数,例如图5的块517处的处理500。处理800B可以与在块813处执行API函数异步地在块809处执行应用。
图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计算内核源的示例的样本源代码。示例900可以是具有包括变量901和流903的自变量(arguments)的API函数。示例900可以是基于诸如图1的系统101之类的并行计算环境的编程语言。在一个实施例中,可以利用被设计来实现在此所述实施例中的一个或多个实施例的附加扩展和限制,根据ANSI(美国国家标准学会)C标准来指定并行编程语言。这些扩展可以包括用来指定计算装置中所要执行的计算内核函数的函数限定符(qualifier),例如限定符905。计算内核函数可以不由其它计算内核函数调用。在一个实施例中,可以由并行程序语言的主函数(host function)来调用计算内核函数。主函数可以是常规的ANSI C函数。主函数可以在与执行计算内核函数的计算装置相分离的主处理器中被执行。在一个实施例中,这些扩展可以包括本地限制符,以描述需要被分配到与由线程块的所有线程共享的计算装置相关联的本地存储器中的变量。可以在计算内核函数内部声明本地限制符。对并行编程语言的限制可以在编译器时间或运行时间期间被增强以在这些限制被违反时,生成错误状况,例如,输出错误消息或退出执行。
图10是图示出通过调用API来配置用于在多个物理计算装置中计算多个可执行体中的一个的逻辑计算装置的示例的样本源代码。示例1000可以由附接了多个物理计算装置的主机系统(例如,图1的托管系统101)中运行的应用来执行。示例1000可以指定并行编程语言的主函数。示例1000中的处理操作可以通过诸如图5的处理500之类的处理、作为API调用被执行。分配流1001和加载流图像1003的处理操作可以通过图5的块501处的处理500被执行。创建计算内核对象1005的处理操作可以通过图5的块503处的处理500被执行。处理操作1007可以将诸如图9的示例900之类的计算内核源加载到所创建出的计算内核对象。处理操作1009可以从所加载的计算内核源中显式地建立计算内核可执行体。在一个实施例中,处理操作1009可以将所建立的计算内核可执行体加载到所创建的计算内核对象。随后,处理操作1011可以显式地选择所建立的计算内核可执行体以用于执行所创建的计算内核对象。
在一个实施例中,处理操作1013可以附加变量和流作为所创建的计算内核对象的函数自变量。处理操作1013可以通过图5的框505处的处理500被执行。处理操作1015可以执行所创建的计算内核对象。在一个实施例中,处理操作1015可以通过图5的块511处的处理500被执行。处理操作1015可以使得执行队列被利用与所创建的计算内核对象相应的计算内核执行实例而被更新。处理操作1017可以同步地等待所创建的计算内核对象的执行的完成。在一个实施例中,处理操作1019可以从计算内核对象的执行中取出结果。随后,处理操作1021可以清理所分配的用于执行计算内核对象的资源,例如事件对象、所创建的计算内核对象和所分配的存储器。在一个实施例中,处理操作1017可以基于内核事件对象是否被设置。处理操作1017可以通过图5的块519处的处理500被执行。
图11示出可以与本发明一个实施例一起使用的计算机系统的一个示例。首先,系统1100可以被实现为图1中所示的系统的一部分。注意,尽管图11图示出计算机系统的各种组件,但是其不意图代表互连这些组件的任何具体的体系结构或方式,因为这些细节对于本发明并没有密切的关系。还要明白,还可以与具有更少组件或可能更多组件的网络计算机和其他数据处理系统(例如,手持计算机、个人数字助理(PDA)、蜂窝电话、娱乐系统、消费电子设备等)一起来实现本发明的一个或多个实施例。
如图11中所示,作为一种形式的数据处理系统的计算机系统1101包括:耦合到诸如CPU和/或GPU之类的(一个或多个)微处理器1105的总线1103、ROM(只读存储器)1107、易失性RAM 1109和非易失性存储器1111。微处理器1103可以从存储器1107、1109、1111取出指令并且执行这些指令来执行上述操作。总线1103将这各种组件互连到一起,并且还将这些组件1105、1107、1109和1111与显示控制器和显示装置1113以及外围装置互连,外围装置例如是可以是鼠标、键盘、调制解调器、网络接口、打印机的输入/输出(I/O)装置和本领域公知的其他装置。通常输入/输出装置915通过输入/输出控制器1117耦合到该系统。易失性RAM(随机存取存储器)1109通常被实现为持续地需要电力以刷新或维护存储器中的数据的动态RAM(DRAM)。与显示装置1108耦合的显示控制器可以可选地包括一个或多个GPU来处理显示数据。可选地,可以提供GPU存储器1111来支持显示装置1108中所包括的GPU。
海量存储装置1111通常是在即使电力被从系统移除后仍然能够维护数据(例如,大量数据)的磁硬盘驱动器或磁光驱或光驱或DVD RAM或闪存或其它类型的存储系统。通常,海量存储装置1111也将可以是随机存取存储器,尽管这不被要求。尽管图11示出海量存储装置1111是直接耦合到数据处理系统中的其余组件的本地装置,然而,将明白,本发明可以利用远离该系统的非易失性存储器,例如通过诸如调制解调器或以太网接口或无线连网接口之类的网络接口耦合到数据处理系统的网络存储装置。总线1103可以包括通过本领域公知的各种桥接器、控制器和/或适配器相互连接的一个或多个总线。
可以利用诸如专用逻辑电路之类的逻辑电路或利用微控制器或执行程序代码指令的其他形式的处理核心来实现上述内容的部分。因此,可以利用诸如机器可执行指令之类的程序代码来执行通过上述讨论所教导的处理,机器可执行指令使得执行这些指令的机器执行某些功能。在该上下文中,“机器”可以是将中间形式(或“抽象”)指令转换成处理器指定指令(例如,诸如“虚拟机”(例如,Java虚拟机)、解释程序、共通语言运行时(Common Language Runtime)、高级语言虚拟机等的抽象执行环境)和/或被设计来执行指令的半导体芯片(例如,用晶体管实现的“逻辑电路”)上所部署的电子电路,例如专用处理器和/或通用处理器。通过以上讨论所教导的处理还可以由被设计来执行这些处理(或这些处理的一部分)的电子电路(代替机器或与机器结合)来执行,而不用执行程序代码。
制造品可以被用来存储程序代码。存储程序代码的制造品可以被实现为,但不限于,适于存储电子指令的一个或多个存储器(例如,一个或多个闪存、随机存取存储器(静态、动态或其它))、光盘、CD-ROM、DVD ROM、EPROM、EEPROM、磁的或光的卡或其它类型的机器可读介质。也可以(例如经由通信链路(例如,网络连接))通过传播介质中所实现的数据信号来从远程计算机(例如,服务器)将程序代码下载到请求计算机(例如,客户端)。
按照对计算机存储器内的数据比特的操作的算法和符号表述表示了先前的详细描述。这些算法描述和表述是数据处理领域中的那些技术人员向本领域其它技术人员最有效地传达它们工作的基本内容所使用工具。这里,算法一般被设想为导致所希望的结果的自洽操作序列。这些操作是需要对物理量的物理操作的那些操作。通常,但不一定是必须的,这些量采用能够被存储、被转送、被组合、被比较或以其他方式被操作的电信号或磁信号的形式。有时候,特别是为了共同使用的原由,已被证实将这些信号提作比特、值、元素、符号、字符、术语、数字等是方便的。
然而,应该注意的是,所有这些以及相似的术语中的全部术语与适当地物理量相关联并且仅仅是适用这些量的方便标签。除非特别指明或者以其他方式从以上讨论显而易见,可以明白,在整个说明书中,利用诸如“处理”或“计算”或“判断”或“显示”等的术语的讨论,涉及计算机系统或类似的电子计算装置的动作和处理,计算机系统或类似的电子计算装置操作被表示为计算机系统的寄存器和存储器内的物理(电子)量的数据并且将它们变换成被类似地表示为计算机系统存储器或寄存器或其它这样的信息存储装置、发送或显示装置内的物理量的数据。
本发明还涉及用于执行在此所述的操作的设备。该设备可以被特别构建用于所需要的目的,或其可以包括被计算机内所存储的计算机程序有选择地激活或重新配置的通用计算机。这样的计算机程序可以被存储在计算机可读存储介质中,计算机可读存储介质例如是但不限于任何类型的盘(包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM)、RAM、EPROM、EEPROM、磁卡或光卡)或适于存储电子指令的任何类型的介质,并且它们各自耦合到计算机系统总线。
这里表示的处理和显示不是固有地与任何具体计算机或其它设备有关。各自通用系统可以与根据在此的教导的程序一起使用,或者可以证实构建更加专门的设备来执行所述操作是方便的。从以下描述中,用于各种这样的系统的所需要的结构是明显的。此外,本发明并不是关于任何具体编程语言来描述的。可以理解,各种编程语言都可以用来实现如在这里所述的发明的教导。
以上讨论仅仅描述了本发明的某些示例性实施例。本领域技术人员将容易从这样的讨论认识到,可以对附图和权利要求进行各种修改而不偏离本发明的精神和范围。
Claims (19)
1.一种计算机实现的方法,包括:
在应用程序的运行时,通过所述应用程序的源代码中指定的API请求的自变量来接收性能需求,以用于由一个或多个物理计算装置来执行所述应用程序的一个或多个线程;以及
响应于所述API请求,在所述运行时生成一个或多个计算标识符以由所述一个或多个线程使用,所述一个或多个计算标识符中的至少一个计算标识符指定根据所述性能需求能够执行所述线程的所述物理计算装置。
2.根据权利要求1所述的方法,其中所述物理计算装置包括一个或多个中央处理单元或图形处理单元。
3.根据权利要求1所述的方法,其中所述性能需求是经过所述应用程序所调用的API请求而传递的配置令牌,并且其中,所述一个或多个计算标识符被经过另一API传递到所述应用程序。
4.根据权利要求1所述的方法,其中所述生成包括:
将所述性能需求与包括所述一个或多个物理计算装置的多个物理计算装置的装置性能中的至少一个装置性能进行匹配;以及
根据所述匹配来确定一个或多个匹配的物理计算装置。
5.根据权利要求4所述的方法,其中所述性能需求包括与专用纹理硬件支持、双精度浮点运算性能、专用本地存储器、流变量缓存、流图像缓存或同步原语相关联的一个或多个属性。
6.根据权利要求5所述的方法,还包括:生成数据仓库,所述数据仓库包括所述多个物理计算装置中的至少一个物理计算装置的装置性能。
7.根据权利要求5所述的方法,其中所述匹配是基于所述多个物理计算装置中的所述至少一个物理计算装置的匹配数目的,所述匹配数目指示所述性能需求与对应于所述多个物理计算装置中的所述至少一个物理计算装置的所述装置性能之间的匹配水平。
8.根据权利要求7所述的方法,其中所述匹配数目与所述多个物理计算装置中的所述至少一个物理计算装置所满足的一个或多个属性的数目关联。
9.根据权利要求5所述的方法,其中所述装置性能包括处理单元的数目、线程块中的同时线程的数目、同时流的数目、流的大小、流的宽度或流的高度。
10.根据权利要求4所述的方法,其中所述生成包括:
检测所述一个或多个匹配的物理计算装置的执行状况;以及
基于所检测到的执行状况来从所述一个或多个匹配的物理计算装置中选择所述一个或多个物理计算装置。
11.根据权利要求10所述的方法,其中所述执行状况包括运行线程的数目、本地存储器利用水平或处理器利用水平。
12.根据权利要求11所述的方法,其中所述一个或多个物理计算装置被进行负载均衡。
13.一种计算机实现的方法,包括:
从应用程序在运行时通过所述应用程序的源代码中指定的API请求的自变量来发送性能需求,以用于由一个或多个物理计算装置来执行所述应用程序的一个或多个线程;以及
在所述运行时接收一个或多个计算标识符以由所述一个或多个线程使用,所述一个或多个计算标识符指定根据所述性能需求能够执行所述线程的所述物理计算装置。
14.根据权利要求13所述的方法,其中所述一个或多个物理计算装置包括CPU或GPU。
15.根据权利要求13所述的方法,其中所述应用程序在与所述一个或多个物理计算装置耦合的主处理器上运行。
16.根据权利要求15所述的方法,其中所述一个或多个线程与在所述主处理器上运行的应用并发地在所述一个或多个物理计算装置中执行。
17.根据权利要求13所述的方法,其中所述发送包括:
通过调用API来查询所述一个或多个物理计算装置的处理配置,所述处理配置与所述一个或多个物理计算装置的装置性能相关联,其中所述数据是基于所查询到的处理配置的。
18.一种设备,包括:
用于在应用程序的运行时,通过所述应用程序的源代码中指定的API请求的自变量来接收性能需求,以用于由一个或多个物理计算装置来执行所述应用程序的一个或多个线程的装置;以及
用于响应于所述API请求,在所述运行时生成一个或多个计算标识符以由所述一个或多个线程使用的装置,所述一个或多个计算标识符中的至少一个计算标识符指定根据所述性能需求能够执行所述线程的所述物理计算装置,其中,所述物理计算装置包括一个或多个中央处理单元或图形处理单元。
19.一种设备,包括:
用于从应用程序在所述应用程序的运行时通过所述应用程序的源代码中指定的API请求的自变量来发送性能需求,以用于由一个或多个物理计算装置来执行所述应用程序的一个或多个线程的装置,所述API请求发送所述性能需求;以及
用于在所述运行时接收一个或多个计算标识符以由所述一个或多个线程使用的装置,所述一个或多个计算标识符指定根据所述性能需求能够执行所述线程的所述物理计算装置,其中,所述一个或多个物理计算装置包括CPU或GPU。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US92303007P | 2007-04-11 | 2007-04-11 | |
US60/923,030 | 2007-04-11 | ||
US92561607P | 2007-04-20 | 2007-04-20 | |
US60/925,616 | 2007-04-20 | ||
US11/800,185 | 2007-05-03 | ||
US11/800,185 US8276164B2 (en) | 2007-05-03 | 2007-05-03 | Data parallel computing on multiple processors |
PCT/US2008/004648 WO2008127622A2 (en) | 2007-04-11 | 2008-04-09 | Data parallel computing on multiple processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101657795A CN101657795A (zh) | 2010-02-24 |
CN101657795B true CN101657795B (zh) | 2013-10-23 |
Family
ID=39864587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008800118294A Active CN101657795B (zh) | 2007-04-11 | 2008-04-09 | 多处理器上的数据并行计算 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11237876B2 (zh) |
EP (2) | EP2135163B1 (zh) |
CN (1) | CN101657795B (zh) |
AU (1) | AU2008239696B2 (zh) |
WO (1) | WO2008127622A2 (zh) |
Families Citing this family (95)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8276164B2 (en) | 2007-05-03 | 2012-09-25 | Apple Inc. | Data parallel computing on multiple processors |
US11836506B2 (en) | 2007-04-11 | 2023-12-05 | Apple Inc. | Parallel runtime execution on multiple processors |
US8286196B2 (en) | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
AU2008239696B2 (en) | 2007-04-11 | 2011-09-08 | Apple Inc. | Data parallel computing on multiple processors |
US8140608B1 (en) | 2007-05-31 | 2012-03-20 | Nvidia Corporation | Pipelined integer division using floating-point reciprocal |
US9536275B1 (en) | 2007-07-31 | 2017-01-03 | Nvidia Corporation | Using a geometry shader for variable input and output algorithms |
US7725518B1 (en) | 2007-08-08 | 2010-05-25 | Nvidia Corporation | Work-efficient parallel prefix sum algorithm for graphics processing units |
US7877573B1 (en) | 2007-08-08 | 2011-01-25 | Nvidia Corporation | Work-efficient parallel prefix sum algorithm for graphics processing units |
US8370845B1 (en) | 2007-08-08 | 2013-02-05 | Nvidia Corporation | Method for synchronizing independent cooperative thread arrays running on a graphics processing unit |
US8473948B1 (en) | 2007-08-08 | 2013-06-25 | Nvidia Corporation | Method for synchronizing independent cooperative thread arrays running on a graphics processing unit |
US7689541B1 (en) | 2007-08-09 | 2010-03-30 | Nvidia Corporation | Reordering data using a series of offsets |
US8094157B1 (en) | 2007-08-09 | 2012-01-10 | Nvidia Corporation | Performing an occurence count of radices |
US8996846B2 (en) | 2007-09-27 | 2015-03-31 | Nvidia Corporation | System, method and computer program product for performing a scan operation |
US8264484B1 (en) | 2007-10-29 | 2012-09-11 | Nvidia Corporation | System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume |
US8284188B1 (en) | 2007-10-29 | 2012-10-09 | Nvidia Corporation | Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects |
US8065288B1 (en) | 2007-11-09 | 2011-11-22 | Nvidia Corporation | System, method, and computer program product for testing a query against multiple sets of objects utilizing a single instruction multiple data (SIMD) processing architecture |
US8276132B1 (en) | 2007-11-12 | 2012-09-25 | Nvidia Corporation | System and method for representing and managing a multi-architecture co-processor application program |
US8347310B1 (en) | 2007-11-12 | 2013-01-01 | Nvidia Corporation | System and method for representing and managing a multi-architecure co-processor application program |
US8281294B1 (en) | 2007-11-12 | 2012-10-02 | Nvidia Corporation | System and method for representing and managing a multi-architecture co-processor application program |
US8661226B2 (en) | 2007-11-15 | 2014-02-25 | Nvidia Corporation | System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture |
US8243083B1 (en) | 2007-12-04 | 2012-08-14 | Nvidia Corporation | System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner |
US8773422B1 (en) | 2007-12-04 | 2014-07-08 | Nvidia Corporation | System, method, and computer program product for grouping linearly ordered primitives |
US8417735B1 (en) | 2007-12-12 | 2013-04-09 | Nvidia Corporation | Instruction-efficient algorithm for parallel scan using initialized memory regions to replace conditional statements |
US8413151B1 (en) | 2007-12-19 | 2013-04-02 | Nvidia Corporation | Selective thread spawning within a multi-threaded processing system |
US8219371B1 (en) | 2008-01-21 | 2012-07-10 | Nvidia Corporation | Computing inter-atom forces between atoms in a protein |
US8938485B1 (en) | 2008-02-12 | 2015-01-20 | Nvidia Corporation | Integer division using floating-point reciprocal |
US8095746B1 (en) | 2008-02-13 | 2012-01-10 | Nvidia Corporation | Conserving and shaping address space with arrays |
US7945757B1 (en) | 2008-02-13 | 2011-05-17 | Nvidia Corporation | Conserving and shaping address space with arrays |
US8539516B1 (en) | 2008-02-14 | 2013-09-17 | Nvidia Corporation | System and method for enabling interoperability between application programming interfaces |
US8402229B1 (en) | 2008-02-14 | 2013-03-19 | Nvidia Corporation | System and method for enabling interoperability between application programming interfaces |
US8055856B2 (en) | 2008-03-24 | 2011-11-08 | Nvidia Corporation | Lock mechanism to enable atomic updates to shared memory |
US8086806B2 (en) | 2008-03-24 | 2011-12-27 | Nvidia Corporation | Systems and methods for coalescing memory accesses of parallel threads |
US8200947B1 (en) | 2008-03-24 | 2012-06-12 | Nvidia Corporation | Systems and methods for voting among parallel threads |
US8392669B1 (en) | 2008-03-24 | 2013-03-05 | Nvidia Corporation | Systems and methods for coalescing memory accesses of parallel threads |
US8312254B2 (en) | 2008-03-24 | 2012-11-13 | Nvidia Corporation | Indirect function call instructions in a synchronous parallel thread processor |
US9678775B1 (en) | 2008-04-09 | 2017-06-13 | Nvidia Corporation | Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment |
US8776030B2 (en) | 2008-04-09 | 2014-07-08 | Nvidia Corporation | Partitioning CUDA code for execution by a general purpose processor |
JP5188269B2 (ja) | 2008-05-30 | 2013-04-24 | Hoya株式会社 | 光学ガラス、プレス成形用ガラス素材、光学素子ブランク、光学素子およびそれらの製造方法 |
US8286198B2 (en) | 2008-06-06 | 2012-10-09 | Apple Inc. | Application programming interfaces for data parallel computing on multiple processors |
US8225325B2 (en) | 2008-06-06 | 2012-07-17 | Apple Inc. | Multi-dimensional thread grouping for multiple processors |
US8151095B1 (en) | 2008-07-18 | 2012-04-03 | Nvidia Corporation | System and method for context migration across CPU threads |
US9542192B1 (en) | 2008-08-15 | 2017-01-10 | Nvidia Corporation | Tokenized streams for concurrent execution between asymmetric multiprocessors |
US8959497B1 (en) | 2008-08-29 | 2015-02-17 | Nvidia Corporation | System and method for dynamically spawning thread blocks within multi-threaded processing systems |
US8615770B1 (en) | 2008-08-29 | 2013-12-24 | Nvidia Corporation | System and method for dynamically spawning thread blocks within multi-threaded processing systems |
US8570333B2 (en) | 2008-12-11 | 2013-10-29 | Nvidia Corporation | Method and system for enabling managed code-based application program to access graphics processing unit |
US8321492B1 (en) | 2008-12-11 | 2012-11-27 | Nvidia Corporation | System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm |
US8645634B1 (en) | 2009-01-16 | 2014-02-04 | Nvidia Corporation | Zero-copy data sharing by cooperating asymmetric coprocessors |
CN101482813B (zh) * | 2009-02-24 | 2012-02-29 | 上海大学 | 一种线程并行执行优化方法 |
US8655937B1 (en) | 2009-04-29 | 2014-02-18 | Nvidia Corporation | High precision integer division using low precision hardware operations and rounding techniques |
US9547535B1 (en) | 2009-04-30 | 2017-01-17 | Nvidia Corporation | Method and system for providing shared memory access to graphics processing unit processes |
US8395631B1 (en) | 2009-04-30 | 2013-03-12 | Nvidia Corporation | Method and system for sharing memory between multiple graphics processing units in a computer system |
US8564616B1 (en) | 2009-07-17 | 2013-10-22 | Nvidia Corporation | Cull before vertex attribute fetch and vertex lighting |
US8542247B1 (en) | 2009-07-17 | 2013-09-24 | Nvidia Corporation | Cull before vertex attribute fetch and vertex lighting |
US8667200B1 (en) | 2009-09-22 | 2014-03-04 | Nvidia Corporation | Fast and highly scalable quota-based weighted arbitration |
US8683089B1 (en) | 2009-09-23 | 2014-03-25 | Nvidia Corporation | Method and apparatus for equalizing a bandwidth impedance mismatch between a client and an interface |
US8271763B2 (en) | 2009-09-25 | 2012-09-18 | Nvidia Corporation | Unified addressing and instructions for accessing parallel memory spaces |
US8595425B2 (en) | 2009-09-25 | 2013-11-26 | Nvidia Corporation | Configurable cache for multiple clients |
US8266382B1 (en) | 2009-09-28 | 2012-09-11 | Nvidia Corporation | Cache interface protocol including arbitration and hints |
US8335892B1 (en) | 2009-09-28 | 2012-12-18 | Nvidia Corporation | Cache arbitration between multiple clients |
US8266383B1 (en) | 2009-09-28 | 2012-09-11 | Nvidia Corporation | Cache miss processing using a defer/replay mechanism |
US8301980B2 (en) | 2009-09-28 | 2012-10-30 | Nvidia Corporation | Error detection and correction for external DRAM |
US8190974B2 (en) | 2009-09-28 | 2012-05-29 | Nvidia Corporation | Error detection and correction for external DRAM |
US8321761B1 (en) | 2009-09-28 | 2012-11-27 | Nvidia Corporation | ECC bits used as additional register file storage |
US8250439B1 (en) | 2009-09-28 | 2012-08-21 | Nvidia Corporation | ECC bits used as additional register file storage |
US8411103B1 (en) | 2009-09-29 | 2013-04-02 | Nvidia Corporation | Processing global atomic operations using the bending unit datapath |
US8522000B2 (en) | 2009-09-29 | 2013-08-27 | Nvidia Corporation | Trap handler architecture for a parallel processing unit |
US8976195B1 (en) | 2009-10-14 | 2015-03-10 | Nvidia Corporation | Generating clip state for a batch of vertices |
US8384736B1 (en) | 2009-10-14 | 2013-02-26 | Nvidia Corporation | Generating clip state for a batch of vertices |
US9298427B2 (en) | 2010-01-06 | 2016-03-29 | Microsoft Technology Licensing, Llc. | Creating inferred symbols from code usage |
US8723877B2 (en) | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
JP2012003619A (ja) * | 2010-06-18 | 2012-01-05 | Sony Corp | 情報処理装置、情報処理装置の制御方法、およびプログラム |
US8914805B2 (en) * | 2010-08-31 | 2014-12-16 | International Business Machines Corporation | Rescheduling workload in a hybrid computing environment |
US8402450B2 (en) * | 2010-11-17 | 2013-03-19 | Microsoft Corporation | Map transformation in data parallel code |
US9430204B2 (en) | 2010-11-19 | 2016-08-30 | Microsoft Technology Licensing, Llc | Read-only communication operator |
CN101996087B (zh) * | 2010-12-02 | 2013-12-04 | 北京星河亮点技术股份有限公司 | 多核处理器阵列程序的动态加载方法 |
US9507568B2 (en) | 2010-12-09 | 2016-11-29 | Microsoft Technology Licensing, Llc | Nested communication operator |
US20120198458A1 (en) * | 2010-12-16 | 2012-08-02 | Advanced Micro Devices, Inc. | Methods and Systems for Synchronous Operation of a Processing Device |
US9395957B2 (en) | 2010-12-22 | 2016-07-19 | Microsoft Technology Licensing, Llc | Agile communication operator |
US9841958B2 (en) | 2010-12-23 | 2017-12-12 | Microsoft Technology Licensing, Llc. | Extensible data parallel semantics |
CN102184093A (zh) * | 2011-06-14 | 2011-09-14 | 复旦大学 | 多cell处理器构建的并行计算阵列架构 |
US8990515B2 (en) * | 2011-06-14 | 2015-03-24 | Microsoft Technology Licensing, Llc | Aliasing buffers |
KR101845328B1 (ko) | 2011-08-22 | 2018-04-04 | 삼성전자 주식회사 | 단말 및 그 단말에서 어플리케이션 수행 방법 |
FR2996037B1 (fr) * | 2012-09-24 | 2015-05-29 | Allegorithmic | Moteur hybride pour processeur central et processeur graphique |
CN103903219A (zh) * | 2012-12-26 | 2014-07-02 | 联想(北京)有限公司 | 一种信息处理方法及系统 |
US10133597B2 (en) * | 2014-06-26 | 2018-11-20 | Intel Corporation | Intelligent GPU scheduling in a virtualization environment |
US10558500B2 (en) | 2015-07-27 | 2020-02-11 | Hewlett Packard Enterprise Development Lp | Scheduling heterogenous processors |
CN105786523B (zh) * | 2016-03-21 | 2019-01-11 | 北京信安世纪科技股份有限公司 | 数据同步系统及方法 |
CN106776018B (zh) * | 2016-12-01 | 2020-09-01 | 三星(中国)半导体有限公司 | 用于分布式系统的主节点和从节点的并行处理方法和设备 |
CN106899657B (zh) * | 2017-01-16 | 2021-08-31 | 东南大学常州研究院 | 一种面向gps移动目标定位追踪系统的高并发接入方法 |
US10726514B2 (en) * | 2017-04-28 | 2020-07-28 | Intel Corporation | Compute optimizations for low precision machine learning operations |
US12014202B2 (en) | 2020-02-13 | 2024-06-18 | Samsung Electronics Co., Ltd. | Method and apparatus with accelerator |
US11294713B2 (en) * | 2020-03-20 | 2022-04-05 | Nvidia Corporation | Asynchronous data movement pipeline |
EP4121850B1 (en) * | 2020-05-08 | 2024-02-14 | Huawei Technologies Co., Ltd. | Processing device for a parallel computing system and method for performing collective operations |
CN114723838A (zh) * | 2020-12-22 | 2022-07-08 | 上海联影医疗科技股份有限公司 | 磁共振图像重建方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6768901B1 (en) * | 2000-06-02 | 2004-07-27 | General Dynamics Decision Systems, Inc. | Dynamic hardware resource manager for software-defined communications system |
CN1860446A (zh) * | 2003-12-16 | 2006-11-08 | 苹果计算机公司 | 支持高性能和高能效执行的准对称多处理器 |
WO2007017456A1 (en) * | 2005-08-04 | 2007-02-15 | International Business Machines Corporation | Adaptive process dispatch in a computer system having a plurality of processors |
Family Cites Families (100)
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 |
CA2137488C (en) | 1994-02-18 | 1998-09-29 | Richard I. Baum | Coexecuting method and means for performing parallel processing in conventional types of data processing systems |
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 |
AU2468899A (en) | 1998-01-26 | 1999-08-23 | Unif/X Inc. | A transaction execution system interface and enterprise system architecture thereof |
US8234650B1 (en) | 1999-08-23 | 2012-07-31 | Oracle America, Inc. | Approach for allocating resources to an apparatus |
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 |
JP3928360B2 (ja) | 2001-02-07 | 2007-06-13 | ソニー株式会社 | メモリ装置 |
JP3681680B2 (ja) | 2001-11-30 | 2005-08-10 | 株式会社リコー | 画像読み取り装置および画像形成装置 |
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 |
US7219352B2 (en) | 2002-04-15 | 2007-05-15 | Microsoft Corporation | Methods and apparatuses for facilitating processing of interlaced video images for progressive video displays |
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 |
US7444632B2 (en) * | 2003-09-25 | 2008-10-28 | International Business Machines Corporation | Balancing computational load across a plurality of processors |
US7882488B2 (en) | 2003-10-20 | 2011-02-01 | Robert Zeidman | Software tool for synthesizing a real-time operating system |
US7068284B2 (en) | 2003-11-10 | 2006-06-27 | Microsoft Corporation | Color management system that supports legacy and advanced color management applications |
US8274517B2 (en) | 2003-11-14 | 2012-09-25 | Microsoft Corporation | Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques |
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 |
US7810099B2 (en) | 2004-06-17 | 2010-10-05 | International Business Machines Corporation | Optimizing workflow execution against a heterogeneous grid computing topology |
US7426724B2 (en) | 2004-07-02 | 2008-09-16 | Nvidia Corporation | Optimized chaining of vertex and fragment programs |
US7868891B2 (en) | 2004-09-16 | 2011-01-11 | 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 |
US7598953B2 (en) | 2004-11-05 | 2009-10-06 | Microsoft Corporation | Interpreter for simplified programming of graphics processor units in general purpose programming languages |
US7800620B2 (en) | 2004-11-05 | 2010-09-21 | Microsoft Corporation | Optimizing automated shader program construction |
US7733347B2 (en) | 2004-11-05 | 2010-06-08 | Microsoft Corporation | Automated construction of shader programs |
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 | セイコーエプソン株式会社 | マルチメディア処理システム及びマルチメディア処理方法 |
JP2006285464A (ja) | 2005-03-31 | 2006-10-19 | Hitachi Ltd | 計算機システムとストレージ及びデバイス制御方法 |
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 |
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 | 삼성전자주식회사 | 디지털 방송 수신 단말기의 선호 채널 공유 방법 |
US20070169114A1 (en) | 2005-11-09 | 2007-07-19 | Microsoft Corporation | Application suite installer with automatic detection of content and configurable options |
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 |
WO2007098424A2 (en) | 2006-02-17 | 2007-08-30 | Qualcomm Incorporated | System and method for multi-processor application support |
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 |
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 |
US8381202B2 (en) | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in 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 |
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 |
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 |
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 |
WO2007149584A2 (en) | 2006-06-23 | 2007-12-27 | Hauville Francois P | Ductless fumehood 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 |
US7975001B1 (en) | 2007-02-14 | 2011-07-05 | The Mathworks, Inc. | Bi-directional communication in a parallel processing 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 |
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 |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
AU2008239696B2 (en) | 2007-04-11 | 2011-09-08 | Apple Inc. | Data parallel computing 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 |
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 |
US9268613B2 (en) | 2010-12-20 | 2016-02-23 | Microsoft Technology Licensing, Llc | Scheduling and management in a personal datacenter |
-
2008
- 2008-04-09 AU AU2008239696A patent/AU2008239696B2/en not_active Ceased
- 2008-04-09 EP EP08742741.5A patent/EP2135163B1/en active Active
- 2008-04-09 EP EP18175404.5A patent/EP3413198A1/en not_active Withdrawn
- 2008-04-09 WO PCT/US2008/004648 patent/WO2008127622A2/en active Application Filing
- 2008-04-09 CN CN2008800118294A patent/CN101657795B/zh active Active
-
2020
- 2020-02-03 US US16/780,479 patent/US11237876B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6768901B1 (en) * | 2000-06-02 | 2004-07-27 | General Dynamics Decision Systems, Inc. | Dynamic hardware resource manager for software-defined communications system |
CN1860446A (zh) * | 2003-12-16 | 2006-11-08 | 苹果计算机公司 | 支持高性能和高能效执行的准对称多处理器 |
WO2007017456A1 (en) * | 2005-08-04 | 2007-02-15 | International Business Machines Corporation | Adaptive process dispatch in a computer system having a plurality of processors |
Also Published As
Publication number | Publication date |
---|---|
AU2008239696A1 (en) | 2008-10-23 |
AU2008239696B2 (en) | 2011-09-08 |
US11237876B2 (en) | 2022-02-01 |
US20200250005A1 (en) | 2020-08-06 |
EP2135163B1 (en) | 2018-08-08 |
CN101657795A (zh) | 2010-02-24 |
EP2135163A2 (en) | 2009-12-23 |
WO2008127622A3 (en) | 2009-03-19 |
EP3413198A1 (en) | 2018-12-12 |
WO2008127622A2 (en) | 2008-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101657795B (zh) | 多处理器上的数据并行计算 | |
CN101802789B (zh) | 多处理器上的并行运行时执行 | |
US11106504B2 (en) | Application interface on multiple processors | |
US9858122B2 (en) | Data parallel computing on multiple processors | |
CN102870096B (zh) | 子缓冲器对象 | |
CN105159761B (zh) | 用于在多处理器上进行数据并行计算的应用编程接口 | |
US8990827B2 (en) | Optimizing data warehousing applications for GPUs using dynamic stream scheduling and dispatch of fused and split kernels | |
CN104823215A (zh) | 子画面图形渲染系统 | |
CN111258650A (zh) | 用于加速延迟敏感算法的恒定标量寄存器架构 | |
CN103927150A (zh) | 多处理器上的并行运行时执行 | |
US20200264781A1 (en) | Location aware memory with variable latency for accelerating serialized algorithm | |
US11836506B2 (en) | Parallel runtime execution on multiple processors | |
AU2014204556B2 (en) | Parallel runtime execution on multiple processors | |
Kaewpuang et al. | Developing a scalable high performance application on multicore clustering system using Microsoft CCR/DSS system | |
AU2018226440A1 (en) | Data parallel computing on multiple processors |
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 |