专利名称:多处理器上的数据并行计算的制作方法
技术领域:
本发明一般地涉及数据并行计算,更具体而言,本发明涉及跨越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中的至少一者。
在一个可替换实施例中,由逻辑计算装置标识符标识的并行计算机体 系结构中的计算单元包括至少一个物理处理装置,所述物理处理装置包括 存储器。这至少一个物理处理装置执行与存储器中所分配的存储流相关联 的一个或多个计算内核。
从附图和以下详细描述中,本发明的其他特征将显而易见。
.
在附图的示图中通过示例而非限制来图示本发明,相似的标号表示相
9似的元素,附图中
图1是图示出用于配置包括CPU和/或GPU的计算装置来执行应用的数 据并行计算的系统的一个实施例的框图2是图示出具有多个并行操作来并发地执行多个线程的计算处理器 的计算装置的示例的框图3是图示出经由计算装置标识符被配置为逻辑计算装置的多个物理 计算装置的 一个实施例的框图4是图示出通过匹配从应用接收到的能力需求来利用计算装置标识 符配置多个物理计算装置的处理的一个实施例的流程图5是图示出在逻辑计算装置中执行计算可执行体的处理的一个实施 例的流程图6是图示出加载可执行体的运行时处理的一个实施例的流程图,该 处理包括针对被确定来执行该可执行体的一个或多个物理计算装置来编译 源;
图7是图示出从执行队列中选择计算内核执行实例以在与和该执行实 例相关联的逻辑计算装置相对应的一个或多个物理计算装置中执行的处理 的一个实施例的流程图8A是图示出建立API (应用编程接口)库的处理的一个实施例的流 程图,该处理根据多个物理计算装置将用于一个或多个API的多个可执行 体和源存储在库中;
图8B是图示出应用执行多个可执行体中的一个和基于API请求从API库 所取出的相应源的处理的一个实施例的流程图9是图示出多个物理计算装置中所要执行的计算内核可执行体的计
算内核源的示例的样本源代码;
图10是图示出通过调用API来配置用于在多个物理计算装置中执行多
个可执行体中的一个的逻辑计算装置的示例的样本源代码;
图ll图示出可以与在此所述的实施例结合使用的、具有多个CPU和 GPU (图形处理单元)的典型计算机系统的一个示例。在此描述用于多处理器上的数据并行计算的方法和设备。在以下描述 中,阐述了大量特定细节以提供对本发明实施例的透彻说明。然而,对于 本领域技术人员显而易见的是,可以实行本发明实施例而不用这些特定细 节。在其它实例中,没有详细示出公知的组件、结构和技术以免使对本描 述的理解模糊。在说明书中,提及"一个实施例"或"实施例"意味着结合该实施例 描述的具体特征、结构或特征可以包括在本发明的至少一个实施例中。在 说明书中的各个地方出现的短语"在一个实施例中"不一定涉及同一个实通过包括硬件(例如,电路、专用逻辑等)、软件(例如在通用计算 机系统或专用机器上运行的软件)或这两者的组合的处理逻辑来执行以下 示图中所描述的处理。尽管以下根据某些顺序操作来描述处理,但是应当 明白,可以以不同的顺序来执行所述操作中的某些操作。并且,可以并行 地而不是顺序地执行某些操作。图形处理单元(GPU)可以是执行诸如2D、 3D图形操作之类的高效 图形操作和/或数字视频相关功能的专用图形处理器。GPU可以包括用来执 行诸如位块传输(blitter)操作、纹理映射、多边形渲染(rendering)、像 素着色(shading)和顶点着色之类的图形操作的专门的(可编程的)硬 件。已知GPU从帧缓冲器中获取数据并且将像素混合到一起来将图像背景 渲染到该帧缓冲器中以用于显示。GPU还可以控制该帧缓冲器并且允许该 帧缓冲器被用来刷新诸如CRT或LCD显示器之类的显示器,CRT或LCD显 示器是需要至少20Hz的速率的刷新(例如,每l/30秒,利用来自帧缓冲器 的数据刷新该显示器)的短存留显示器。通常,GPU可以从与GPU耦合的 CPU获取图形处理任务,通过显示控制器向显示装置输出光栅图形图像。 在本说明书中提及的"GPU"可以是如Lindholdm等的美国专利No. 7015913 "Method and Apparatus for Multitheraded Processing of Data In a Programmable Graphics Processor"(用于可编程图形处理器中的数据的多 线程处理的方法和设备)禾nSwan等的美国专利No. 6970206 "Method foriiDeinterlacing 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、计算平台层lll、计算运行时层109、计算编译器107 和计算应用库105。应用103可以通过API (应用程序接口)调用与其它栈 组件连接。可以为托管系统101中的应用103并发地运行一个或多个线程。 计算平台层lll可以维护数据结构、或计算装置数据结构,存储每个附接 的物理计算装置的处理能力。在一个实施例中,应用可以通过计算平台层 111来取出有关托管系统101的可用处理资源的信息。应用可以通过计算平 台层lll来选择和指定用于执行处理任务的能力需求。因此,计算平台层 lll可以针对该处理任务来确定物理计算装置的配置以从所附接的CPU 117 和/或GPU 115中分配和初始化处理资源。在一个实施例中,计算平台层 lll可以针对与所配置的一个或多个实际的物理计算装置相对应的应用来 生成一个或多个逻辑计算装置。计算运行时层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 (专用集成电路)装置的单个芯片的。在一个实 施例中,可以在跨越多个芯片的多于一个的计算处理器上并发地执行来自 应用的多个线程。
计算装置可以包括一个或多个计算处理器,例如计算处理器一l 205和 计算处理器—L 203。本地存储器可以与计算处理器耦合。可以由与计算处 理器耦合的本地存储器来支持在计算处理器中运行的单个线程块中线程之 间的共享存储器。跨越不同的线程块的多个线程,例如线程l 213和线程N 209可以共享与计算装置201耦合的流存储器217中所存储的流。流可以是 计算内核可执行体能够对其进行操作的元素的集合,例如图像流或变量 流。变量流可以被分配用于存储处理任务期间对其进行操作的全局变量。 图像流可以是可用于图像缓冲、纹理缓冲或帧缓冲的缓冲器。
在一个实施例中,计算处理器的本地存储器可以实现为专用本地存储 装置,例如处理器一1的本地共享存储器219和处理器—L的本地共享存储器 211。在另一实施例中,计算处理器的本地存储器可以实现为用于计算装 置的一个或多个计算处理器2的流存储器的流读-写缓存,例如用于计算装 置201中的计算处理器205 203的流数据缓存215。在另一实施例中,本地存 储器可以实现在与本地存储器耦合的计算处理器中运行的线程块中的线程 之间共享的专用本地存储装置,例如与计算处理器一l 205耦合的本地共享 存储器219。专用本地存储装置可以不被跨越不同线程块的线程共享。如 果计算处理器(例如处理器一l 205m)的本地存储器被实现为流读-写缓存 (例如,流数据缓存215),则在本地存储器中声明的变量可以被从流存 储器217中分配并且被存储到所实现的实现本地存储器的流读-写缓存(例 如,流数据缓存215)中。当例如流读-写缓存和专用本地存储装置对于相 应的计算装置都不可用时,线程块内的线程可以共享流存储器217中所分 配的本地变量。在一个实施例中,每个线程与私有(private)存储器相关 联,私有存储器用来存储由线程中所调用的函数使用的线程私有变量。例如,私有存储器1211可以只被线程1213访问。
图3是图示出经由计算装置标识符而被配置为逻辑计算装置的多个物 理计算装置的一个实施例的框图。在一个实施例中,应用303和平台层305 可以在主CPU 301中运行。应用303可以是图1的应用103中的一个。托管系 统101可以包括主CPU 301。物理计算装置Physical—Compute—Device-1 305 ... Physical—Compute—Device-N 311中的每一个可以是图1的CPU 117或 GPUU5中的一个。在一个实施例中,计算平台层lll可以响应于来自应用 303的API请求来生成计算装置标识符307,以用于根据API请求中所包括的 能力需求的列表来配置数据并行处理资源。计算装置标识符307可以涉及 根据计算平台层111进行的配置来选择实际的物理计算装置 Physical_Compute—Device-1 305 ... Physical—Compute—Device-N'311 。■在一 个实施例中,逻辑计算装置309可以代表与主CPU 301分离的一组所选择的 实际物理计算装置。
图4是图示出用于通过匹配从应用接收到的能力需求、利用计算装置
标识符来配置多个物理计算装置的处理的实施例的流程图。可以根据图l 的系统IOO,在由托管系统101托管的数据处理系统中执行处理400。数据
处理系统可以包括托管平台层(例如图l的计算平台层lll)的主处理器和 多个附接到主处理器的物理计算装置(例如,图1的CPU 117和GPU 115)。
在块401中,在一个实施例中,处理400可以建立代表与一种或多种相 应的能力相关联的多个物理计算装置的数据结构(或计算装置数据结 构)。各个物理计算装置可以附接到执行处理400的处理系统。诸如CPU 或GPU之类的物理计算装置的能力或计算能力可以包括物理计算装置是否 支持处理特征、存储器访问机制或指定扩展。处理特征可以与专用纹理硬 件支持、双精度浮点运算或同步支持(例如互斥)有关。物理处理装置的 存储器访问机制可以与变量流缓存的类型、图像流缓存的类型或专用本地 存储器支持有关。数据处理系统的系统应用可以响应于将新的物理计算装 置附接到数据处理系统来更新数据结构。在一个实施例中,可以预先确定 物理计算装置的能力。在另一实施例中,数据处理系统的系统应用可以在
16运行时期间发现新附接的物理处理装置。该系统应用可以取出新发现的物 理计算装置的能力,来更新代表所附接的物理计算装置及它们的相应能力 的数据结构。
根据一个实施例,在块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从有效计算上下文中释放 实例。如果cuRdeaseContext的输入自变量与有效的计算上下文对象不相对 应,则cuReleaseContext返回CU—INVALID—CONTEXT。
图5是图示出在逻辑计算装置中执行计算可执行体的处理的实施例的 流程图。在一个实施例中,可以由数据处理系统中的运行时层(例如,图 l的计算运行时层109)来执行处理500。在块501处,处理500可以为逻辑 计算装置上要运行的计算可执行体分配一个或多个流。处理任务可以由对 流进行操作的计算可执行体来执行。在一个实施例中,处理任务可以包括 输入流和输出流。处理500可以将所分配的流存储器映射到应用的逻辑地 址或从其映射到所分配的流存储器。在一个实施例中,处理500可以基于 来自应用的API请求来执行块501的操作。
在块503处,根据一个实施例,处理500可以创建逻辑计算装置的计算 内核对象。计算内核对象可以是针对用于执行函数的相应处理任务的相关 联的流和可执行体而创建的对象。处理500可以在块505为计算内核对象建 立函数自变量。函数自变量可以包括为函数输入或输出分配的流,例如块 501处分配的流。处理500可以在块507处将计算内核可执行体和/或计算内 核源加载到计算内核对象中。计算内核可执行体可以是根据逻辑计算装置 要被执行用于执行与内核对象相关联的相应处理任务的可执行体。在一个
18实施例中,计算内核可执行体可以包括例如与目标物理计算装置的类型、 版本和/或编译选项相关联的描述数据。计算内核源可以是从其编译出计算
内核可执行体的源代码。处理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可以判断是否基于计算
内核执行实例与执行队列中其他执行实例相关联的优先顺序和依赖关系而 从执行队列中选择了计算内核执行实例。可以通过根据加载到相应计算内 核对象的可执行体来执行该计算内核对象,从而执行计算内核执行实例。
在块5H,在一个实施例中,处理500可以选择加载到与所选择的计算 内核实例相对应的计算内核对象的多个可执行体中的一个可执行体,以用 于在与该计算内核对象的逻辑计算装置相关联的物理计算装置中执行。处 理500可以针对一个计算内核执行实例选择要在多于一个物理计算装置中 并行执行的多于一个可执行体。该选择可以基于与和所选择的计算内核实 例相关联的逻辑计算装置相对应的物理计算装置的当前执行状况。物理计 算装置的执行状况可以包括运行的线程的数目、本地存储器利用水平和处 理器利用水平(例如,每单位时间的操作的峰值数目)等。在一个实施例 中,该选择可以是基于预定的利用水平的。在另一个实施例中,该选择可 以是基于与计算内核执行实例相关联的线程的数目和线程块的数目。处理 500可以从物理计算装置取出执行状况。在一个实施例中,处理500可以执 行用于从执行队列中选择计算内核执行实例的操作,以在块513 517处与托 管系统中运行的应用异步地执行。
在块519,处理500可以检査被调度用于该执行队列中的执行的计算内 核执行实例的状况。可以由唯一的计算事件对象来标识各个执行实例。当 相应的计算内核执行实例根据计算运行时(例如,图1的运行时109)被排 队时,事件对象可以被返回给调用用于执行该执行实例的API的应用或计 算应用库(例如,图5的应用103或计算应用库105)。在一个实施例中, 处理500可以响应于来自应用的API请求来进行执行状况检查。处理500可 以通过查询标识该计算内核执行实例的计算事件对象的状况来确定执行计 算内核执行实例的完成。处理500可以等待直到计算内核执行实例的执行 被完成为止,以返回来自应用的API调用。处理500可以基于事件对象来控 制从各种流的处理执行实例读和/或写。
20在块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可以使用在线编译器(例如图l 的计算编译器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的系统IOI 之类的并行计算环境的编程语言。在一个实施例中,可以利用被设计来实 现在此所述实施例中的一个或多个实施例的附加扩展和限制,根据ANSI (美国国家标准学会)C标准来指定并行编程语言。这些扩展可以包括用 来指定计算装置中所要执行的计算内核函数的函数限定符(qualifier),例 如限定符905。计算内核函数可以不由其它计算内核函数调用。在一个实 施例中,可以由并行程序语言的主函数(host fimction)来调用计算内核函 数。主函数可以是常规的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被执行。
图ll示出可以与本发明一个实施例一起使用的计算机系统的一个示 例。首先,系统1100可以被实现为图1中所示的系统的一部分。注意,尽 管图ll图示出计算机系统的各种组件,但是其不意图代表互连这些组件的 任何具体的体系结构或方式,因为这些细节对于本发明并没有密切的关 系。还要明白,还可以与具有更少组件或可能更多组件的网络计算机和其 他数据处理系统(例如,手持计算机、个人数字助理(PDA)、蜂窝电 话、娱乐系统、消费电子设备等) 一起来实现本发明的一个或多个实施 例。
如图ll中所示,作为一种形式的数据处理系统的计算机系统1101包 括耦合到诸如CPU禾n/或GPU之类的(一个或多个)微处理器1105的总线 1103、 ROM (只读存储器)1107、易失性RAM 1109和非易失性存储器 1111。微处理器1103可以从存储器1107、 1109、 llll取出指令并且执行这 些指令来执行上述操作。总线1103将这各种组件互连到一起,并且还将这
25些组件1105、 1107、 1109和1111与显示控制器和显示装置1113以及外围装 置互连,外围装置例如是可以是鼠标、键盘、调制解调器、网络接口、打 印机的输入/输出(I/O)装置和本领域公知的其他装置。通常输入/输出装 置915通过输入/输出控制器1117耦合到该系统。易失性RAM (随机存取存 储器)1109通常被实现为持续地需要电力以刷新或维护存储器中的数据的 动态RAM (DRAM)。与显示装置l 108耦合的显示控制器可以可选地包括 一个或多个GPU来处理显示数据。可选地,可以提供GPU存储器1111来支 持显示装置1108中所包括的GPU。
海量存储装置llll通常是在即使电力被从系统移除后仍然能够维护数 据(例如,大量数据)的磁硬盘驱动器或磁光驱或光驱或DVD RAM或闪 存或其它类型的存储系统。通常,海量存储装置llll也将可以是随机存取 存储器,尽管这不被要求。尽管图ll示出海量存储装置llll是直接耦合到 数据处理系统中的其余组件的本地装置,然而,将明白,本发明可以利用 远离该系统的非易失性存储器,例如通过诸如调制解调器或以太网接口或 无线连网接口之类的网络接口耦合到数据处理系统的网络存储装置。总线 1103可以包括通过本领域公知的各种桥接器、控制器和/或适配器相互连接 的一个或多个总线。
可以利用诸如专用逻辑电路之类的逻辑电路或利用微控制器或执行程 序代码指令的其他形式的处理核心来实现上述内容的部分。因此,可以利 用诸如机器可执行指令之类的程序代码来执行通过上述讨论所教导的处 理,机器可执行指令使得执行这些指令的机器执行某些功能。在该上下文 中,"机器"可以是将中间形式(或"抽象")指令转换成处理器指定指 令(例如,诸如"虚拟机"(例如,Java虚拟机)、解释程序、共通语言运 行时(Common Language Runtime)、高级语言虚拟机等的抽象执行环 境)和/或被设计来执行指令的半导体芯片(例如,用晶体管实现的"逻辑 电路")上所部署的电子电路,例如专用处理器和/或通用处理器。通过以 上讨论所教导的处理还可以由被设计来执行这些处理(或这些处理的一部 分)的电子电路(代替机器或与机器结合)来执行,而不用执行程序代 码。制造品可以被用来存储程序代码。存储程序代码的制造品可以被实现 为,但不限于,适于存储电子指令的一个或多个存储器(例如, 一个或多 个闪存、随机存取存储器(静态、动态或其它))、光盘、CD-ROM、
DVD ROM、 EPROM、 EEPROM、磁的或光的卡或其它类型的机器可读介 质。也可以(例如经由通信链路(例如,网络连接))通过传播介质中所 实现的数据信号来从远程计算机(例如,服务器)将程序代码下载到请求 计算机(例如,客户端)。
按照对计算机存储器内的数据比特的操作的算法和符号表述表示了先 前的详细描述。这些算法描述和表述是数据处理领域中的那些技术人员向 本领域其它技术人员最有效地传达它们工作的基本内容所使用工具。这 里,算法一般被设想为导致所希望的结果的自洽操作序列。这些操作是需 要对物理量的物理操作的那些操作。通常,但不一定是必须的,这些量采 用能够被存储、被转送、被组合、被比较或以其他方式被操作的电信号或 磁信号的形式。有时候,特别是为了共同使用的原由,已被证实将这些信 号提作比特、值、元素、符号、字符、术语、数字等是方便的。
然而,应该注意的是,所有这些以及相似的术语中的全部术语与适当 地物理量相关联并且仅仅是适用这些量的方便标签。除非特别指明或者以 其他方式从以上讨论显而易见,可以明白,在整个说明书中,利用诸如 "处理"或"计算"或"判断"或"显示"等的术语的讨论,涉及计算机 系统或类似的电子计算装置的动作和处理,计算机系统或类似的电子计算 装置操作被表示为计算机系统的寄存器和存储器内的物理(电子)量的数 据并且将它们变换成被类似地表示为计算机系统存储器或寄存器或其它这 样的信息存储装置、发送或显示装置内的物理量的数据。
本发明还涉及用于执行在此所述的操作的设备。该设备可以被特别构 建用于所需要的目的,或其可以包括被计算机内所存储的计算机程序有选 择地激活或重新配置的通用计算机。这样的计算机程序可以被存储在计算 机可读存储介质中,计算机可读存储介质例如是但不限于任何类型的盘
(包括软盘、光盘、CD-ROM和磁光盘、只读存储器(ROM) 、 RAM、 EPROM、 EEPROM、磁卡或光卡)或适于存储电子指令的任何类型的介质,并且它们各自耦合到计算机系统总线。
这里表示的处理和显示不是固有地与任何具体计算机或其它设备有 关。各自通用系统可以与根据在此的教导的程序一起使用,或者可以证实 构建更加专门的设备来执行所述操作是方便的。从以下描述中,用于各种 这样的系统的所需要的结构是明显的。此外,本发明并不是关于任何具体 编程语言来描述的。可以理解,各种编程语言都可以用来实现如在这里所 述的发明的教导。
以上讨论仅仅描述了本发明的某些示例性实施例。本领域技术人员将 容易从这样的讨论认识到,可以对附图和权利要求进行各种修改而不偏离 本发明的精神和范围。
权利要求
1.一种计算机实现的方法,包括接收表示应用程序的处理性能需求的数据,以用于所述应用程序的一个或多个线程;以及生成一个或多个计算标识符以由所述一个或多个线程使用,所述一个或多个计算标识符中的至少一个计算标识符指定一个或多个物理计算装置。
2. 根据权利要求1所述的方法,其中所述物理计算装置包括一个或多 个中央处理单元(CPU)或图形处理单元(GPU)。
3. 根据权利要求1所述的方法,其中所述数据是被传递经过所述应用 所调用的API的配置令牌,并且其中所述一个或多个计算标识符被传递经 过另一API到所述应用。
4. 根据权利要求1所述的方法,其中所述生成包括 将所述处理性能需求与包括所述一个或多个物理计算装置的多个物理计算装置的装置性能中的至少一个装置性能进行匹配;以及 根据所述匹配来确定一个或多个匹配的物理计算装置。
5. 根据权利要求4所述的方法,其中所述处理性能需求包括与专用纹 理硬件支持、双精度浮点运算性能、专用本地存储器、流变量缓存、流图 像缓存或同步原语相关联的一个或多个属性。
6. 根据权利要求5所述的方法,还包括生成数据仓库,所述数据仓 库包括所述多个物理计算装置中的至少一个物理计算装置的装置性能。
7. 根据权利要求5所述的方法,其中所述匹配是基于所述多个物理计 算装置中的所述至少一个物理计算装置的匹配数目的,所述匹配数目指示 所述处理性能需求与对应于所述多个物理计算装置中的所述至少一个物理 计算装置的所述装置性能之间的匹配水平。
8. 根据权利要求7所述的方法,其中所述匹配数目与所述多个物理计 算装置中的所述至少一个物理计算装置所满足的一个或多个属性的数目关 联。
9. 根据权利要求5所述的方法,其中所述装置性能包括处理单元的数 目、线程块中的同时线程的数目、同时流的数目、流的大小、流的宽度或 流的高度。
10. 根据权利要求4所述的方法,其中所述生成包括检测所述一个或多个匹配的物理计算装置的执行状况;以及基于所检测到的执行状况来从所述一个或多个匹配的物理计算装置中 选择所述一个或多个物理计算装置。
11. 根据权利要求IO所述的方法,其中所述执行状况包括运行线程的 数目、本地存储器利用水平或处理器利用水平。
12. 根据权利要求11所述的方法,其中所述一个或多个物理计算装置 被进行负载均衡。
13. —种计算机实现的方法,包括从应用程序发送表示应用程序的处理性能需求的数据,以用于所述应用程序的一个或多个线程;以及接收一个或多个计算标识符以由所述一个或多个线程使用,所述一个 或多个计算标识符中的至少一个计算标识符指定一个或多个物理计算装 置。
14. 根据权利要求13所述的方法,其中所述一个或多个物理计算装置 包括CPU或GPU。
15. 根据权利要求13所述的方法,其中所述应用程序在与所述一个或 多个物理计算装置耦合的主处理器上运行。
16. 根据权利要求15所述的方法,其中所述一个或多个线程与在所述 主处理器上运行的应用并发地在所述一个或多个物理计算装置中执行。
17. 根据权利要求13所述的方法,其中所述发送包括通过调用API来查询所述一个或多个物理计算装置的处理配置,所述 处理配置与所述一个或多个物理计算装置的装置性能相关联,其中所述数 据是基于所查询到的处理配置的。
18. —种存储了指令的机器可读介质,所述指令在由机器执行时,使 得所述机器执行一种方法,所述方法包括接收表示应用程序的处理性能需求的数据,以用于所述应用程序的一个或多个线程;以及生成一个或多个计算标识符以由所述一个或多个线程使用,所述一个 或多个计算标识符中的至少一个计算标识符指定一个或多个物理计算装置。 ,
19. 根据权利要求18所述的机器可读介质,其中所述物理i+算装置包 括一个或多个中央处理单元(CPU)或图形处理单元(GPU)。
20. 根据权利要求18所述的机器可读介质,其中所述数据是被传递经 过所述应用所调用的API的配置令牌,并且其中所述一个或多个计算标识 符被传递经过另一 API到所述应用。
21. 根据权利要求18所述的机器可读介质,其中所述生成包括 将所述处理性能需求与包括所述一个或多个物理计算装置的多个物理计算装置的装置性能中的至少一个装置性能进行匹配;以及 根据所述匹配来确定一个或多个匹配的物理计算装置。
22. 根据权利要求21所述的机器可读介质,其中所述处理性能需求包 括与专用纹理硬件支持、双精度浮点运算性能、专用本地存储器、流变量 缓存、流图像缓存或同步原语相关联的一个或多个属性。
23. 根据权利要求22所述的机器可读介质,还包括生成数据仓库, 所述数据仓库包括所述多个物理计算装置中的至少一个物理计算装置的装 置性能。
24. 根据权利要求22所述的机器可读介质,其中所述匹配是基于所述 多个物理计算装置中的所述至少一个物理计算装置的匹配数目的,所述匹 配数目指示所述处理性能需求与对应于所述多个物理计算装置中的所述至 少一个物理计算装置的所述装置性能之间的匹配水平。
25. 根据权利要求24所述的机器可读介质,其中所述匹配数目与所述 多个物理计算装置中的所述至少一个物理计算装置所满足的一个或多个属 性的数目关联。
26. 根据权利要求22所述的机器可读介质,其中所述装置性能包括处 理单元的数目、线程块中的同时线程的数目、同时流的数目、流的大小、流的宽度或流的高度。
27. 根据权利要求21所述的机器可读介质,其中所述生成包括检测所述一个或多个匹配的物理计算装置的执行状况;以及基于所检测到的执行状况来从所述一个或多个匹配的物理计算装置中 选择所述一个或多个物理计算装置。
28. 根据权利要求27所述的机器可读介质,其中所述执行状况包括运 行线程的数目、本地存储器利用水平或处理器利用水平。
29. 根据权利要求28所述的机器可读介质,其中所述一个或多个物理 计算装置被进行负载均衡。
30. —种存储了指令的机器可读介质,所述指令在由机器执行时,使 得所述机器执行一种方法,所述方法包括从应用程序发送表示应用程序的处理性能需求的数据,以用于所述应 用程序的一个或多个线程;以及接收一个或多个计算标识符以由所述一个或多个线程使用,所述一个 或多个计算标识符中的至少一个计算标识符指定一个或多个物理计算装 置。
31. 根据权利要求30所述的机器可读介质,其中所述一个或多个物理 计算装置包括CPU或GPU。
32. 根据权利要求30所述的机器可读介质,其中所述应用程序在与所 述一个或多个物理计算装置耦合的主处理器上运行。
33. 根据权利要求30所述的机器可读介质,其中所述一个或多个线程 与在所述主处理器上运行的应用并发地在所述一个或多个物理计算装置中 执行。
34. 根据权利要求30所述的机器可读介质,其中所述发送包括 通过调用API来查询所述一个或多个物理计算装置的处理配置,所述处理配置与所述一个或多个物理计算装置的装置性能相关联,其中所述数 据是基于所查询到的处理配置的。
35. —种并行计算体系结构,包括-主处理器;耦合到所述主处理器的图形处理单元(GPU); 耦合到所述主处理器的中央处理单元(CPU);以及耦合到所述主处理器、所述CPU、所述GPU中的至少一者的存储器,所述存储器存储至少部分地在所述主处理器上执行的第一应用程序, 所述第一应用程序具有多个线程,所述多个线程被有选择地调度用于所述GPU和所述CPU中任一者上的执行,并且所述存储器存储通过API与所 述第一应用程序通信的系统应用程序,所述系统应用程序向所述多个线程 指派至少一个逻辑计算装置标识符,所述至少一个逻辑计算装置标识符指 定所述CPU和所述GPU中的至少一者。
36. 根据权利要求35所述的并行计算体系结构,其中所述系统应用程 序包括生成所述至少一个逻辑计算装置标识符的平台层和调度所述多个线 程以用于执行的运行时层。
37. 根据权利要求35所述的并行计算体系结构,其中所述多个线程是 基于通过配置API来自所述第一应用的处理性能需求的,其中所述处理性 能需求与所述CPU或所述GPU的装置性能相关联。
38. 根据权利要求35所述的并行计算体系结构,其中所述主处理器包 括一个或多个核心。
39. —种并行计算体系结构中的计算单元,所述计算单元包括 由逻辑计算装置标识符所标识的至少一个处理装置;以及 耦合到所述至少一个处理装置的存储器,所述存储器用于存储所分配的存储流和所分配的计算内核。
40. 根据权利要求39所述的计算单元,其中所述至少一个处理装置包 括主处理器和图形处理单元(GPU)中的任一者,并且其中,所分配的存 储流和所分配的计算内核是响应于来自应用程序的API (应用程序编程接 口)调用而分配的。
41. 根据权利要求40所述的计算单元,其中所述应用程序生成API, 所述API包括以下内容中的至少一者(a)用于创建计算内核对象的调用;(b)用于加载计算内核源的调用;(C)用于加载计算可执行体的调 用;(d)用于获取配置信息的调用;(e)用于编译计算内核可执行体的调用;(f)用于创建计算装置的上下文的调用;(g)用于删除所创建的 计算装置的上下文的调用;(h)用于分配变量存储流的调用;(i)用于 分配数据存储流的调用;(j)用于删除所分配的存储流的调用;(k)用 于读或写所分配的存储流的调用;(1)用于映射到/来自客户端地址空间 的存储流的调用;(m)用于执行计算内核对象的调用;(n)用于确定计 算内核对象的状况的调用;(o)用于删除计算内核事件对象的调用;以 及(p)用于删除计算内核对象的调用。
42. 根据权利要求41所述的计算单元,其中所述计算内核对象是在与 所述至少一个处理装置分离的处理单元中被创建的。
43. —种设备,包括用于接收表示应用程序的处理性能需求的数据,以用于所述应用程序 的一个或多个线程的装置;以及用于生成一个或多个计算标识符以由所述一个或多个线程使用的装 置,所述一个或多个计算标识符中的至少一个计算标识符指定一个或多个 物理计算装置,其中,所述物理计算装置包括一个或多个中央处理单元 (CPU)或图形处理单元(GPU)。
44. 一种设备,包括用于从应用程序发送表示应用程序的处理性能需求的数据,以用于所 述应用程序的一个或多个线程的装置;以及用于接收一个或多个计算标识符以由所述一个或多个线程使用的装 置,所述一个或多个计算标识符指定一个或多个物理计算装置,其中,所 述一个或多个物理计算装置包括CPU或GPU。
全文摘要
公开了分配附接到运行应用的主处理单元的诸如CPU或GPU之类的一个或多个物理计算装置以用于执行该应用的一个或多个线程的方法和设备。该分配可以是基于代表来自应用的用于执行在一个或多个线程中执行可执行体的处理性能需求的数据的。计算装置标识符可以与所分配的物理计算装置相关联,用来并发地在所分配的物理计算装置中的一个或多个物理计算装置中的一个或多个线程中并发地调度和执行该可执行体。
文档编号G06F9/50GK101657795SQ200880011829
公开日2010年2月24日 申请日期2008年4月9日 优先权日2007年4月11日
发明者杰里米·萨德梅尔, 阿夫泰伯·穆恩史 申请人:苹果公司