资源分配的系统、方法及非暂时性计算机可读媒体与流程

文档序号:15115587发布日期:2018-08-07 20:00阅读:143来源:国知局

本申请大体来说涉及计算机系统,且更具体来说,涉及一种有序及乱序资源分配的系统及方法及非暂时性计算机可读媒体。



背景技术:

图形处理器(graphicsprocessingunit,gpu)在用于操纵计算机图形且甚至用于通用计算的计算机系统中得到广泛应用。这些计算机系统中的许多计算机系统必须管理会受到寄存器分配设计影响的高度受限的硬件资源。在这些系统中,有序分配器(例如,环形分配器)有时会由于其简单性而被用于资源分配。一些图形处理器针对图形及计算管线并行地运行多种着色器(shader)。另外,在任意时刻可有每一种类型的多个不同的着色器处于现用状态。对于这些条件,有序分配器可能不是用于分配资源的最高效的方式。



技术实现要素:

本发明提供一种资源分配的系统。所述系统包括:多个硬件资源;一个或多个处理器,被配置成执行一个或多个程序以实行一个或多个操作;以及资源分配器,被配置成向一组硬件线程实施所述多个硬件资源的资源分配。所述多个硬件资源的资源分配是通过以下步骤来实行:构建包括多个节点的链接列表,其中所述多个节点中的每一者分别包括关于下一节点或前一节点中的至少一者的信息;以第一次序将所述多个硬件资源中的自由资源的一个或多个范围分配给所述多个节点中的一个或多个节点;以及以与所述第一次序不同的第二次序来乱序地释放所分配节点。

本发明提供一种资源分配的方法。所述方法包括在包括多个硬件资源及一个或多个处理器的系统中构建包括多个节点的链接列表,所述一个或多个处理器被配置成执行一个或多个程序以实行一个或多个操作。所述多个节点中的每一者分别包括关于至少一个下一节点或前一节点的信息。所述方法还包括以第一次序将所述多个硬件资源中的自由资源的一个或多个范围分配给所述多个节点中的一个或多个节点。所述方法还包括以与所述第一次序不同的第二次序来乱序地释放所分配节点。

本发明提供一种非暂时性计算机可读媒体。所述非暂时性计算机可读媒体包括多个指令,所述多个指令在由一个或多个处理器执行时,被配置成通过以下步骤来向所述一个或多个处理器实施多个硬件资源的资源分配:构建包括多个节点的链接列表,其中所述多个节点中的每一者分别包括关于下一节点或前一节点中的至少一者的信息;以第一次序将所述多个硬件资源中的自由资源的一个或多个范围分配给所述多个节点中的一个或多个节点;以及以与所述第一次序不同的第二次序来乱序地释放所分配节点。

在阐述以下具体实施方式之前,陈述在本专利文件通篇中所使用的某些用词及短语的定义可为有利的:用语“包括(include)”及“包括(comprise)”以及其派生词意指包括但不限于;用语“或(or)”是包括在内的,意指及/或;短语“与...相关联(associatedwith)”及“与其相关联(associatedtherewith)”、以及其派生形式可意指包括、包括在...内、与...互连、包含、包含在...内、连接到...或与...连接、耦合到...或与...耦合、可与...连通、与...合作、交错(interleave)、并置(juxtapose)、接近、结合到...或与...结合、具有、具有...性质、等等;且用语“控制器”意指任意控制至少一个操作的任意装置、系统或其部分,此种装置可以硬件、固件、或软件、或者硬件、固件、或软件中的至少两者的一些组合来实施。应注意,与任意特定控制器相关联的功能可为集中式的或分布式的,无论是在本地还是远程的。在本专利文件通篇中提供了某些用词及短语的定义,所属领域中的技术人员应理解,在许多情形中(即使不是大多数情形中),这些定义适用于这些所定义的用词及短语的以前的用法以及将来的用法。

另外,以下阐述的各种功能可由一个或多个计算机程序来实施或支持,所述一个或多个计算机程序中的每一者是由计算机可读程序代码形成且收录在计算机可读媒体中。用语“应用”及“程序”是指适合实作在合适的计算机可读程序代码中的一个或多个计算机程序、软件组件、指令集(setsofinstruction)、流程、函数、物件、类(class)、实例、相关数据、或其一部分。短语“计算机可读程序代码”包括任意类型的计算机代码,包括源代码、目标代码、及可执行代码。短语“计算机可读媒体”包括能够由计算机存取的任意类型的媒体,例如只读存储器(readonlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、硬盘驱动器(harddiskdrive)、光盘(compactdisc,cd)、数字视频光盘(digitalvideodisc,dvd)、或任意类型的存储器。“非暂时性”计算机可读媒体不包括传输暂时性电信号或其他信号的有线链路、无线链路、光学链路、或其他通信链路。非暂时性计算机可读媒体包括可在其中永久地存储数据的媒体以及可在其中存储数据且随后对数据进行改写的媒体(例如,可重写光盘或可擦除存储器装置)。

附图说明

为了更完整地理解本发明及其优点,现结合附图参考以下说明,在附图中,相同的参考编号表示相同的部件:

图1示出根据本发明的示例性计算系统。

图2及图3示出根据本发明的计算系统中的示例性装置。

图4示出根据本发明实施例的环形缓冲器分配。

图5示出根据本发明实施例的双重链接队列节点。

图6示出根据本发明实施例的分配表。

图7示出根据本发明实施例的分配进程。

符号的说明

100:计算系统/系统

102:网络

104、200:服务器

106:客户机装置/台式计算机

108:客户机装置/移动电话/智能手机

110:客户机装置/个人数字助理

112:客户机装置/膝上型计算机

114:客户机装置/平板计算机

116:基站

118:无线接入点

205:总线系统

210:处理装置

215:存储装置

220:通信单元

225:输入/输出单元

230、360:存储器

235:持久性存储元件

240、365:硬件资源

245、370:资源分配器

300:客户机装置

305:天线

310:射频收发器

315:发射处理电路系统

320:麦克风

325:接收处理电路系统

330:扬声器

340:主处理器/主控制器

345:输入/输出接口

350:小键盘

355:显示器/显示单元

361:操作系统程序

362:应用

400:环形缓冲器

405:分配/节点/节点j

410:分配/节点

415:分配/节点/第三节点

420、430:起点/分配头

425、435、445:终点

440:起点

500:双重链接队列节点

505:分配头的(起点,终点)

510:节点j

515:节点i/前一节点

520:节点k/下一节点

600:分配表

605:分配头

610:分配

615:节点

700:分配进程

705、710、715、720、725:步骤

具体实施方式

以下所论述的图1至图7以及在本专利文件中用于阐述本发明原理的各种实施例仅用于例示,而不应被视为以任何方式限制本发明的范围。所属领域中的技术人员应理解,本发明的原理可实施于任意经过适当配置的装置或系统中。

图形处理器(gpu)的其中一个主要问题是对图形处理器的可编程部件(可编程硬件)进行资源分配,所述可编程部件在计算机架构教科书中被称为算术逻辑单元(arithmeticlogicunit,alu)、且在本文中被称为处理元件(processingelements,pe)。处理元件除了基本算术运算之外还可提供许多操作,比如存储器加载/存储、条件语句(例如,如果-则-否则)、及跳转语句(例如,转到)等等。为实现与现代应用程序接口(applicationprograminterface,api)一致的并行计算,处理元件还包括具有变化的吞吐量、延迟、及存取特性的有限存储。处理元件包括最快的寄存器、最慢的全局存储器(globalmemory)/私有存储器(privatememory)、以及也能够实现线程之间的交互作用的处于中间水平的共享/本地存储器。最后,处理元件也提供一些同步原语(例如,屏障(barrier)及栅栏(fence))来实现现代并行程序。由于所有的这些存储及其他原语在本质上是有限的,因此它们均需要高效的分配,而不是在各组硬件线程之间静态地划分,以便根据需求来实现最佳利用。

这些资源包括但不限于:1)线程束(warp)或用于描述运行单段着色器代码的一组线程的实体,其中处理元件可并行地运行多个线程束,或者可以未知的或任意的粒度(granularity)在线程束之间切换(例如,基于某一组规则在未知数目的或任意数目的指令之后进行切换);2)各种寄存器或用于存储由线程束存取的工作集数据的高速存储器;3)共享/本地存储器,即,可由线程束内或不同线程束之间的线程使用以共同地实行一些计算的本地暂存空间(尽管可通过全局存储器来模仿共享/本地存储器,然而一些应用程序接口(例如,开放计算语言(opencomputinglanguage,opencl))仍需要共享/本地存储器且因而共享/本地存储器通常被实施为专用硬件);以及

4)在不同图形处理器之间变化的其他有限资源。这些资源的统一特性是:它们是有限的,但它们的数目可能很高;且这些资源的分配粒度可大于1,即,可在一个请求中分配这些资源的子集。

对于这种资源分配来说,硬件中常用的方法是使用简单的有序分配器,例如环形分配器。这些有序分配器之所以是优选的,是因为它们易于实现及调试,且具有对设计者来说可在直觉上得知的非常可预测的行为。在工作的性质及寿命在多个线程束之间一致的或几乎相同时,这种有序分配器非常适合。然而,新近的图形处理器必须针对图形及计算管线并行地运行多种着色器。另外,在任意时刻可有每一种类型的多个不同的着色器处于现用状态,从而形成在处理元件上现用的各种各样的线程束。这意味着有序分配器可能效率不高且会人为地使处理元件瘫痪;也就是说,不允许执行原本能够运行但因资源未处于可分配区中而无法运行的线程束。

这可使用环形分配器来说明,环形分配器将任何资源视为环形(即,在头部进行分配并从尾部释放),因此分配及释放均是有序的。举例来说,当对两个线程束进行分配时,以0及1的次序来对线程束进行分配,之后请求第三线程束。当所有可用的处理元件资源均被线程束0及线程束1消耗时,线程束1在线程束0之前完成,且线程束2的资源需求是线程束0及线程束1各自的子集,当线程束1完成而线程束0仍在运行时,无法通过有序分配器来对线程束2进行分配,这是因为线程束1的资源只能在线程束0的资源之后被释放。也就是说,在这个实例中,由于线程束1是在线程束0之后进行分配,因此必须首先释放线程束0且线程束1无法在线程束0之前释放。

这种情景可实施乱序分配来改善性能。对于像线程束隙(warpslot)这样一次仅需要分配及释放1个资源(所述资源是这个隙本身,而不是像寄存器及共享存储器等相关联的资源)的资源来说,创建乱序分配器可涉及以隙为单位来保持有效位,如果线程束得到分配且尚未完成,则设定成1,否则设定成0。具有这种功能的分配器通过找到有效位为0的任何(通常为第一个)隙来工作,同时释放逻辑甚至更简单,因为它仅将适当的有效位设定成0。

对于像寄存器及共享存储器这样的资源来说,情况可能更复杂。举例来说,对于处理元件实作方式来说,与使用对地址进行重映射的表相反,将寄存器及共享存储器的邻接范围分配给单个线程束可能更高效,因为在其中进行的寻址可被实作为简单的(基值+偏移量)。用以上设计来分配资源的邻接范围很复杂。

另外,有序分配器(比如环形分配器)也必须以正确的串行次序来释放资源。因此,释放请求在可使用之前也必须进行重新排序。

本发明的实施例解决了本文中的上述问题。所述实施例也可进行扩展以用于其他分配情景。也就是说,某些实施例提供乱序分配,从而使存储碎片(fragmentation)最小化并且实现尽可能快的资源重新利用。某些实施例还避免了使用重映射表。

图1示出根据本发明的示例性计算系统100。图1所示计算系统100的实施例仅用于例示。可使用计算系统100的其他实施例,此并不背离本发明的范围。

如图1所示,系统100包括网络102,网络102便于系统100中的各个组件之间进行通信。举例来说,网络102可在网络地址之间传送网际协议(internetprotocol,ip)分组、帧中继帧(framerelayframes)、异步传输模式(asynchronoustransfermode,atm)单元或其他信息。网络102可在一个或多个位置处包括一个或多个局域网(localareanetwork,lan)、城域网(metropolitanareanetwork,man)、广域网(wideareanetwork,wan)、例如因特网等全局网络的全部或一部分、或任意其他的一种或多种通信系统。

网络102便于至少一个服务器104与各种客户机装置106-114之间进行通信。每一个服务器104包括可为一个或多个客户机装置提供计算服务的任意适合的计算或处理装置。每一个服务器104可例如包括一个或多个处理装置、用于存储指令及数据的一个或多个存储器、以及便于通过网络102进行通信的一个或多个网络接口。

每一个客户机装置106至114均代表通过网络102与至少一个服务器或其他计算装置交互作用的任意适合的计算或处理装置。在此实例中,客户机装置106至114包括台式计算机106、移动电话或智能手机108、个人数字助理(personaldigitalassistant,pda)110、膝上型计算机112及平板计算机114。然而,在计算系统100中也可使用任意其他的或另外的客户机装置。另外,客户机装置106至114中的一者或多者可代表不与网络102通信或不通过网络102通信的独立装置。

在此实例中,一些客户机装置108至114间接地与网络102通信。举例来说,客户机装置108至110通过一个或多个基站116(例如,蜂窝基站或演化节点b(evolvednodeb,enodeb))进行通信。另外,客户机装置112至114通过一个或多个无线接入点118(例如,电气电子工程师学会(instituteofelectricalandelectronicsengineers,ieee)802.11)进行通信。应注意,这些仅用于例示且每一个客户机装置可通过任意适合的中间装置或网络来与网络102进行直接通信或与网络102进行间接通信。

如以下更详细阐述,一个或多个服务器104或客户机装置106至114包括供一个或多个处理元件(pe)(例如,中央处理器(centralprocessingunit,cpu)、图形处理器、或用于进行处理的其他硬件组件)的一个或多个硬件进程(例如,一组或多组线程,例如图形处理器线程束或线程组(wavefront))使用的多个硬件资源。所述装置中的任意者(即,服务器104或客户机装置106至114)可包括能够通过以下步骤来向所述一个或多个处理元件实施所述多个硬件资源的资源分配的资源分配器:构建包括多个节点的链接列表,其中所述多个节点中的每一者分别包括关于下一节点或前一节点中的至少一者的信息;以第一次序将所述多个硬件资源中的自由资源的一个或多个范围分配给所述多个节点中的一个或多个节点;以及以与所述第一次序不同的第二次序来乱序地释放所分配节点。

尽管图1示出计算系统100的一个实例,然而可对图1作出各种改变。举例来说,系统100可以任意合适的排列形式包括任意数目的每一种组件。一般来说,计算及通信系统具有各种各样的配置,且图1并非将本发明的范围限制成任意特定配置。尽管图1示出可在其中使用本专利文件中所公开的各种特征的一个操作环境,然而这些特征可用于任何其他合适的系统中。

图2及图3示出根据本发明的计算系统中的示例性装置。具体来说,图2示出示例性服务器200,且图3示出示例性客户机装置300。服务器200可代表图1中的服务器104,且客户机装置300可代表图1中的客户机装置106至114中的一者或多者。

如图2所示,服务器200包括总线系统205。总线系统205支持至少一个处理装置210、至少一个存储装置215、至少一个通信单元220、及至少一个输入/输出(input/output,i/o)单元225之间的通信。

处理装置210执行可被加载到存储器230中的指令。处理装置210可以任意适合的排列形式包括任意适合的数目及类型的处理器或其他装置。处理装置210的示例性类型包括微处理器、微控制器、数字信号处理器、现场可编程门阵列、应用专用集成电路、及分立电路系统。在某些实施例中,处理装置210包括被配置为用于执行处理线程(也被称为线程束)的图形处理器(gpu)的一个或多个处理器。

存储器230及持久性存储元件(persistentstorage)235是存储装置215的实例,存储装置215代表能够存储信息(例如,数据、程序代码、及/或其他合适的临时信息或永久信息)且便于撷取所述信息的任意结构。存储器230可代表随机存取存储器或任意其他合适的易失性存储装置或非易失性存储装置。持久性存储元件235可包含支持数据的长期存储的一个或多个组件或装置,例如只读存储器、硬盘、闪速存储器、或光盘。

通信单元220支持与其他系统或装置的通信。举例来说,通信单元220可包括便于通过网络102进行通信的网络接口卡或无线收发器。通信单元220可通过任意合适的实体通信链路或无线通信链路来支持通信。

输入/输出单元225能够实现数据的输入及输出。举例来说,输入/输出单元225可通过键盘、鼠标、小键盘、触摸屏或其他合适的输入装置来提供对用户输入的连接。输入/输出单元225也可向显示器、打印机、或其他合适的输出装置发送输出。

在某些实施例中,服务器200包括多个硬件资源240。硬件资源240包括计算资源,例如:

·可编程处理器、纹理单元或电路(textureunitorcircuit)、或帧缓冲器。

·线程束或用于描述运行单段着色器代码的一组线程的实体。处理元件可并行地运行多个线程束,或者可以未知的或任意的粒度在线程束之间切换(例如,基于某一组规则在未知数目的或任意数目的指令之后进行切换)。

·各种寄存器或用于存储由线程束存取的工作集数据的高速存储器。

·共享/本地存储器,即,可由线程束内或不同线程束之间的线程使用以共同地执行一些计算的本地暂存空间。尽管可通过全局存储器来模仿共享/本地存储器,然而一些应用程序接口(例如,开放计算语言)仍需要共享/本地存储器且因而共享/本地存储器通常被实作为专用硬件。

·在图形处理器之间变化的其他有限资源。

这些资源的统一特性是:

·它们是有限的,但它们的数目可能很高

·这些资源的分配粒度可大于1,即,可在一个请求中分配这些资源的子集

在某些实施例中,服务器200包括资源分配器245。资源分配器245可包括被配置成将所述多个资源分配给一个或多个进程(例如,图形处理器线程束)的处理电路系统。处理电路系统可包括被配置成实行分配的一个或多个处理器,或者包括被配置成执行多个指令(例如,存储在存储器230中指令)的一个或多个处理器,所述多个指令被配置成使一个或多个处理器通过以下步骤来向所述一个或多个处理器实行所述多个硬件资源的资源分配:构建包括多个节点的链接列表,其中所述多个节点中的每一者分别包括关于下一节点或前一节点中的至少一者的信息;以第一次序将所述多个硬件资源中的自由资源的一个或多个范围分配给所述多个节点中的一个或多个节点;以及以与所述第一次序不同的第二次序来乱序地释放所分配节点。

应注意,尽管图2被阐述为代表图1所示服务器104,然而可在客户机装置106至114中的一者或多者中使用相同或相似的结构。举例来说,膝上型计算机或台式计算机可具有与图2所示相同或相似的结构。

如图3所示,客户机装置300包括天线305、射频(radiofrequency,rf)收发器310、发射(tx)处理电路系统315、麦克风320及接收(rx)处理电路系统325。客户机装置300还包括扬声器330、主处理器340、输入/输出(i/o)接口(interface,if)345、小键盘350、显示器355及存储器360。存储器360包括基本操作系统(operatingsystem,os)程序361以及一个或多个应用362。尽管图3所示实例示出天线306、射频(rf)收发器310、发射(tx)处理电路系统315、麦克风320及接收(rx)处理电路系统325,然而在某些实施例中,客户机装置300不包括这些元件中的一者或多者。

射频收发器310从天线305接收由系统中的另一个组件发射的传入射频信号。射频收发器310对传入射频信号进行下变频以产生中频(intermediatefrequency,if)信号或基带信号。中频信号或基带信号被发送到接收处理电路系统325,接收处理电路系统325通过对基带信号或中频信号进行滤波、解码及/或数字化来产生经处理的基带信号。接收处理电路系统325将经处理的基带信号传送到扬声器330(例如作为声音数据)或传送到主处理器340以进行进一步处理(例如作为网页浏览数据)。

发射处理电路系统315从麦克风320接收模拟或数字声音数据或者从主处理器340接收其他传出基带数据(例如,网页数据、电子邮件、或交互式视频游戏数据)。发射处理电路系统315对传出基带数据进行解码、多路传输、及/或数字化以产生经处理基带信号或中频信号。射频收发器310从发射处理电路系统315接收传出的经处理基带信号或中频信号并将基带信号或中频信号上变频成射频信号以通过天线305发射。

主处理器340可包括一个或多个处理器或其他处理装置并执行存储在存储器360中的基本操作系统程序361以控制客户机装置300的总体操作。举例来说,主处理器340可根据众所周知的原理通过射频收发器310、接收处理电路系统325、及发射处理电路系统315来控制正向信道信号的接收以及反相信道信号的发射。在一些实施例中,主处理器340包括至少一个微处理器或微控制器。

主处理器340也能够执行驻存在存储器360中的其他进程及程序。主处理器340可根据正在执行的进程的需要将数据移到存储器360中或将数据移出存储器360。在一些实施例中,主处理器340被配置成基于操作系统程序361或响应于从外部装置或操作员接收到的信号来执行应用362。主处理器340还耦合到输入/输出接口345,输入/输出接口345向客户机装置300提供连接到其他装置(例如,膝上型计算机或手持式计算机)的能力。输入/输出接口345是这些配件(accessory)与主处理器340之间的通信路径。

主处理器340还耦合到小键盘350及显示单元355。客户机装置300的操作员可使用小键盘350将数据输入到客户机装置300。显示器355可为能够渲染文本及/或至少有限的图形(例如,来自网站)的液晶显示器或其他显示器。

存储器360耦合到主处理器340。存储器360的一部分可包括随机存取存储器(ram),且存储器360的另一部分可包括闪速存储器或其他只读存储器(rom)。

在某些实施例中,客户机装置300包括多个硬件资源365。硬件资源365包括硬件资源240中的一者或多者。

在某些实施例中,客户机装置300包括资源分配器370。资源分配器370可包括被配置成将所述多个资源分配给一个或多个进程(例如,图形处理器线程束)的处理电路系统。处理电路系统可包括被配置成实行分配的一个或多个处理器,或者包括被配置成执行多个指令(例如,存储在存储器360中的指令)的一个或多个处理器,所述多个指令被配置成使一个或多个处理器通过以下步骤来向所述一个或多个处理器实行所述多个硬件资源的资源分配:构建包括多个节点的链接列表,其中所述多个节点中的每一者分别包括关于下一节点或前一节点中的至少一者的信息;以第一次序将所述多个硬件资源中的自由资源的一个或多个范围分配给所述多个节点中的一个或多个节点;以及以与所述第一次序不同的第二次序来乱序地释放所分配节点。

尽管图2及图3示出计算系统中的装置的实例,然而可对图2及图3作出各种改变。举例来说,可对图2与图3中的各种组件进行组合、进一步细分、或省略,且可根据具体需要来增加另外的组件。作为具体实例,主处理器340可被划分成多个处理器,例如一个或多个中央处理器(cpu)及一个或多个图形处理器(gpu)。作为具体实例,主处理器340可为包括多个固定功能硬件及可编程硬件的图形处理器。固定功能硬件的一些实例是用于存取图像数据并根据需要进行内插的纹理单元、或者是用于创建几何原语(geometricprimitive)的像素覆盖的光栅化程序(rasterizer)。可编程硬件包括在本上下文中被称为处理元件的算术逻辑单元(alu)。尽管可编程组件使图形处理器用于通用用途,但是对于像着色处理(shading)这样大的并行工作负载来说高效的是:固定功能单元使图像处理器专用于对专用硬件实施而言有利的特定操作。另外,尽管图3示出被配置为移动电话或智能手机的客户机装置300,然而客户机装置也可被配置成作为其他类型的移动装置或固定装置运行。另外,如同计算及通信网络一样,客户机装置及服务器可具有各种各样的配置,且图2及图3并非将本发明限制成任意特定的客户机装置或服务器。

资源分配器(例如,资源分配器245或资源分配器370)被配置成向一个或多个硬件线程(例如,由一个或多个处理器执行的多组线程,例如图形处理器线程束)实行所述一个或多个处理器上的资源的资源分配。资源分配器可利用硬件实作方式以有序模式及乱序模式两者发挥作用。资源分配器通过将环形缓冲器视为链接列表来将环形缓冲器一般化,链接列表具有分配头及释放头(或尾部),分配头是资源范围内的作为所接收到的任意分配请求的开始点的点且标记“有效”范围的终点,释放头标记“有效”范围的起点,其中有效被定义为资源正在使用。

资源分配器将环形缓冲器或链接列表构建成双重链接列表,在双重链接列表中每一个节点包括关于下一分配或前一分配的信息。每一个分配节点包括邻接范围的资源。资源分配器使用指明所述多个节点中的下一节点及/或前一节点的链接列表的信息来分配节点及释放所分配节点。资源分配器以第一次序将节点分配给自由资源的邻接范围且能够例如以与第一次序不同的第二次序乱序地释放节点。举例来说,资源可被界定成环形,具有从0到k的索引,其中k通常是2n-1。构建环形意指(k+1)绕回到索引0。分配是将资源i...j指派到具体的线程束/线程。这种分配是资源范围。分配器中的每一个节点指向一个这样的范围。分配请求在时间上是以特定次序接收的。最常见的分配次序是以与接收次序相同的次序来指派资源。此通常被称为有序分配。当这些资源所指派到的线程束完成时,所述资源也被腾出。有序释放是指即使线程束以与对线程束进行分配的次序不同的次序完成,相关联的资源也将以与分配次序相同的次序释放。乱序释放指的是乱序完成的线程束在完成时便被处理。被释放的资源可立即“被腾出”或者可不立即“被腾出”,其中“被腾出”指的是它们可被分配给另一个线程束。分配头是资源范围0...k内的对于所接收到的任意分配请求而言的合法起始点的点。每一个分配头也包括“大小”,即从这一合法起始点开始可用的资源的数目。在初始化(即,执行的起点)处,必须存在在m处开始的分配头,其中m通常是0等。有序分配器维持一个且仅一个分配头,所述分配头的起始位置随着每一次分配而仅增加。在所述范围的终点处,分配头所指向的起始位置绕回0。根据本发明的某些实施例,乱序分配器能够维持一个或多个分配头。本发明的实施例也使所述头的合法起始位置以除了仅增大之外的方式移动,即在一些情形中可重新指派到有效范围中的任意合法位置。

图4示出根据本发明实施例的环形缓冲器分配。图4所示环形缓冲器400的实施例仅用于说明,且可使用其他实施例、配置或说明,此并不背离本发明的范围。

简单的环形缓冲器可被概念化为循环的单向链接列表,其中每一次分配均是列表中的节点。一些节点是与所分配资源的范围(为范围元组(起点,终点)或(起点,大小)形式)对应的分配,且这些节点的下一分配(节点)是通过‘下一个’指针知晓。自由资源范围是链接列表中由‘头部’指针(从其开始分配)所指向的单个节点(或多个节点),而‘尾部’指针(从其开始释放)指向在这一节点之后的包含最早分配的节点。

如图4所示实例所示,环形缓冲器400包括三次分配405、410、415。两个节点是所分配资源。以节点405及节点410的次序来对节点进行分配,之后分配第三节点415。节点405包括起点420及终点425以及位于其之间的多个邻接资源。节点410包括起点430及终点435以及位于其之间的多个邻接资源。节点415包括起点440及终点445以及位于其之间的多个邻接资源。每一个节点均包括邻接资源范围。举例来说,节点405可包括资源i到j,节点410可包括资源k到m,且节点415可包括资源a到f。尽管每一个节点包括资源的邻接范围,然而节点405、节点410及节点415之间的资源未必是邻接的。如果资源是j==k及m==a,则资源不需要为邻接的。

本发明的实施例将双重链接列表视为基本概念容器(underlyingconceptualcontainer),即,每一个分配包括关于下一分配及前一分配的信息。资源分配器使用指明所述多个节点中的下一节点及/或前一节点的链接列表的信息来分配节点及释放所分配节点。这是通过允许超过1个范围(节点)的自由资源来实现的。因此,如果这些自由范围与所要释放的资源相邻(即,如果这些自由范围是下一节点或前一节点),则资源分配器尝试将资源释放到这些自由范围中的一者中。否则,资源分配器将资源合并到与所释放节点相邻的下一最早的分配中。资源分配器可从自由资源节点中的任意一者开始实行分配。举例来说,节点405是具有分配头420的初始节点(节点0)且节点410是下一节点。当在节点410(节点1)处观察时,节点405是前一节点且节点415是下一节点。当在节点415(节点2)处观察时,节点410是前一节点且下一分配是空的。在图4所示实例中,节点405是最早的分配。

当节点410在节点405之前完成,且接收到所请求的对另一个线程束的资源要求时,资源分配器可释放节点410并将资源分配给分配头430。也就是说,资源分配器可将节点410的资源赋予下一分配。另外,资源分配器被配置成基于对于资源的请求以及优先次序(即,启发法(heuristic)或算法)来选择分配头。举例来说,当优先次序函数包括贪婪启发法(greedyheuristic)时,资源分配器选择具有最大量的邻接资源的分配头;当优先次序函数包括最佳匹配优先次序时,资源分配器选择具有最小量的资源的分配头来分配,且当所述优先级函数包括差分优先级(differenceprioritization)时,资源分配器选择具有处于所请求资源的量的预定义裕量以内的可用范围的邻接资源的分配头。另外,分配器可基于对于资源的请求,从自由资源的所述一个或多个邻接范围中选择第一范围来分配给所述一个或多个节点中的第一节点,所述选择可包括基于所述请求的元数据。所述元数据可包括:关于着色器代码、着色器类型的信息;关于具体代码/程序的一些信息;以及执行特性,例如用于预测着色器程序可能持续多长时间的任意方法;等等。举例来说,实作方式可选择从特定分配头来对具体的着色器的所有线程束进行分配。

因此,在某些实施例中,资源分配器被配置成以第一次序(例如将资源分配给节点405、接着分配给节点410且接着分配给节点415)分配资源。之后,响应于接收到释放请求(例如在线程束完成时),资源分配器以与第一次序不同的第二次序(例如,在从节点405释放资源之前从节点410释放资源;或者在从节点410或节点405释放资源之前从节点415释放资源)自由地释放资源。

在一些实施例中,仍可通过将自由节点的数目限制成1以及不允许创建新的自由节点来迫使进行有序分配行为。这样一来,资源分配器能够乱序地释放资源,因此不需要资源分配器来对释放请求进行重新排序,因为被腾出的资源将简单地被添加到与所述节点相邻的下一最早的分配。因此,即使乱序地处理释放,资源分配器也能够有序地腾出资源。

在一些实施例中,为防止出现碎片化,在从两个相邻的节点释放资源之后,将这些自由节点合并。如果自由节点的数目低于预定最大值,则可将任意的正被腾出的节点作为新的自由节点。

在某些实施例中,资源分配器被配置成将所有的非现用分配指派为分配头。在某些实施例中,资源分配器被配置成通过将所述多个硬件资源重新映射到以下中的一者来乱序地释放节点:前一分配节点;下一分配节点;具有较少资源的分配头;空的分配节点,即不具有资源的分配头;或最早的相邻的分配。资源分配器也可在释放时,将所释放的资源与自由资源范围进行合并。在某些实施例中,资源分配器使用关于指明所给出节点的下一节点或前一节点的双重链接列表的信息。也就是说,资源分配器使用指明所述多个节点中的下一节点及/或前一节点的链接列表的信息来分配节点及释放所分配节点。

图5及图6示出根据本发明实施例的利用节点表的分配器的结构。应注意,尽管节点为便于存储而具有索引,然而所述索引并非指的是双重链接列表的排序中的下一节点或前一节点。在分配期间,所述实作方式可选择任何空的节点来将分配放入,有可能使用与上文所述相同的有效位方法。另外,尽管示出头部指针及尾部指针,但是它们仅用于说明目的以将所述结构匹配到有序环形缓冲器。

图5示出根据本发明实施例的双重链接队列节点。图5所示双重链接队列节点500的实施例仅用于说明。可使用其他实施例,而此并不背离本发明的范围。

在某些实施例中,链接列表中的节点的数目是固定的。举例来说,链接列表包括现用分配的最大数目以及分配头的各个最大数目。也就是说,在图形处理器的实例中,可编程硬件通常限制在可编程硬件上现用的现用着色器线程束(或工作组)(它们是最大现用分配)的数目。资源分配器被配置成将分配头的数目选择成分配数目的函数。

分配是通过以下步骤来进行:选择非现用节点来保持正在被分配的资源的范围;接着在分配头内发现含有足以用于分配请求的资源的节点,即,所请求资源大小小于分配头的(起点,终点)505元组所指向的资源的范围。可使用贪婪方法来实行对作为分配起点的分配头的选择,但是其他实施例可使用不同的方法。

资源分配器也实行资源分配释放操作。资源分配器可能已接收到对于资源的请求或者可能已确定另一个分配(例如,图形处理器线程束)已完成。资源分配器被配置成将自由资源组的范围长度最大化。资源分配器可腾出几个已分配节点(例如,线程束)的资源并创建最大可能的范围。由此,被腾出的资源可在最短的时间内再次用于分配。资源分配器(例如,资源分配器245或资源分配器370)可采用各种启发法来缩短无法再次使用资源的时间量并将自由资源的范围的长度最大化。

资源分配器确定节点j510已准备好被释放。举例来说,所分配节点j510的字符串或进程可能已完成,且因此被分配给节点j510的资源可被释放。资源分配器确定节点j510的起点及终点。资源分配器还识别出前一节点(节点i515)及下一节点(节点k520)。资源分配器将资源从节点j510指派到前一节点(节点i515)或下一节点(节点k520)。在某些实施例中,资源分配器将资源从节点j510指派到节点i515或节点k520中的较大者以使下一分配的长度最大化。在某些实施例中,资源分配器将资源从节点j510指派到节点i515或节点k520中的可能结束得较快的节点。

因此,资源分配器被配置成使用双重链接列表中的信息在现有分配的中途实现恒定时间分配及释放。通过使用前一分配及下一分配的信息,资源分配器能够在对资源进行恒定时间分配及释放的同时对资源保持跟踪,以在不在恒定时间中干扰现有分配以及无需在许多分配中进行搜索的条件下对资源的范围进行寻址。因此,在一些实施例中,由资源分配器进行的分配是具有简单的索引、具有前一分配节点及下一分配节点的信息的分配节点。

在某些实施例中,资源分配器被配置成将最新释放的资源指派为另一个分配头。也就是说,资源分配器将最新释放的资源指派给与这一范围相邻的分配头(即,从概念上来说为这一节点的‘前一’节点或‘下一’节点)。与另一个分配头进行合并会缩短资源被闭锁至零的时间量。在某些实施例中,为使另一个分配头的分配最优化,分配头应为空的或者分配节点中的资源范围的长度小于最新释放的资源的长度。由此,资源分配器将最新释放的资源指派到其中不具有自由资源的、或者所具有的资源范围短于这一范围的分配头。在某些实施例中,资源分配器被配置成通过将最新释放的资源与和未被指派有分配的自由分配头对应的资源进行合并来增大资源的范围,且此是在分配头的数目低于实作方式规定的最大值时进行。在某些实施例中,资源分配器将最新释放的资源指派到与这一节点相邻的现有分配(即,前一节点或下一节点)。在某些实施例中,资源分配器将最新释放的资源指派到任意节点,这一步骤与未被限制到恒定时间的实施例中对节点进行的一定的重新排序组合进行。

因此,在某些实施例中,资源分配器被配置成以第一次序分配资源(例如将资源分配给节点i515、接着分配给节点j510且接着分配给节点k520)。之后,响应于接收到释放请求(例如在线程束完成时),资源分配器以与第一次序不同的第二次序(例如,在从节点i515释放资源之前从节点j510释放资源;或者在从节点i515或节点j510释放资源之前从节点k520释放资源)自由地释放资源。

资源分配器能够确定相邻的节点都不是分配头。在某些实施例中,资源分配器判断任意分配头内是否均不具有资源。如果资源分配器将一个或多个分配头识别为不具有资源,则资源分配器将把最新腾出的资源指派到其中不具有资源的分配头中的一者。如果资源分配器未识别出任何不具有资源的分配头,则资源分配器接着将腾出的资源吸收到下一最早的相邻(例如,前一)分配中。

图6示出根据本发明实施例的分配表。图6所示分配表600的实施例仅用于说明。可使用其他实施例,此并不背离本发明的范围。

在图6所示实例中,可从其进行分配的头(即,分配头605)的数目是固定的。资源分配器以固定数目的节点工作,所述数目界定分配(线程束)的最大数目nwarps且界定自由节点(被称为分配头)的最大数目。由于节点的数目是固定的,因此所述节点在硬件中可被实体化成存储在通过节点索引来检索的存储器中的阵列,从而实现简单的实作方式。在这种阵列中,前nwarps个隙可含有有效分配,且新的分配可仅使用来自节点nwarps→nwarps+nallocationheads的资源。

资源分配使所有可能的(现用的及非现用的)分配610进入到双重链接列表中的节点615中。在这个实例中,节点615对应于将由一个或多个处理器执行的各组线程(例如,线程束)。此处,分配是阵列起始点处的节点,每一个节点615对应于线程束。每一个分配字符串的头部620指向相邻的节点且尾部625指向另一个相邻的节点。

对现用节点的释放是通过接收节点索引来进行,使用所述节点索引可在表内获得相关联的节点。所分配资源可利用赋予作为分配头的节点的优先级而被指派给下一节点520或前一节点515。如果两个节点均为分配节点,则在释放之后,可对这两个节点进行合并。如果这两个节点均不是分配头,则可出现两种情景中的一种。如果所述分配头中的一者中不具有资源(也就是说,分配头是‘空的’),则分配头可改为指向这些资源,从而生成新的分配头。如果不存在可用的自由分配头,则资源被指派到下一最早的节点:如果前一节点515有效则所述节点可能是前一节点515,否则是下一节点520。

这种方法使用近似的最近最久未使用(leastrecentlyused,lru)高速缓存来保持跟踪这些漏洞(hole),且如果可能的话,则在这些漏洞内通过以减小的自由范围(由节点代表)大小对分配头进行分类来进行分配。这一链接列表中的节点的数目是有限制的,这是因为可在处理元件上现用的线程束的数目是有限制的。这一方法使用(nwarps+nallocationheads)个隙,其中nallocationheads是现用分配点的数目。

图7示出根据本发明实施例的分配进程。尽管流程图绘示了一系列顺序步骤,然而除非明确说明,否则不应从所述顺序推断出关于具体实行次序的顺序,即,依序地而非同时地或以重叠的方式实行各步骤或步骤的各部分、或者仅仅实行所绘示的步骤而不会出现插入步骤或中间步骤。在所绘示的实例中绘示的进程是通过计算机式装置中的处理电路系统来实施。所述进程不需要以所给出的次序实行。举例来说,释放资源可在一个或多个分配之前、之后、或同时发生。

在分配进程700中,资源分配器将链接列表构建成双重链接列表,在双重链接列表中每一个分配包括关于下一分配或前一分配中的至少一者的信息。资源分配器可使用不同的方法来确定线程束请求将被指派到哪一个分配头。分配头可通过一些堆性质(heapproperty)(例如,资源的最大数目)来分类。举例来说,系统可具有三个分配头:第一分配头对应于十五个寄存器;第二分配头对应于八个寄存器;且第三分配头对应于四个寄存器。

在方块705中,资源分配器接收到请求。在方块710中,请求可为线程束请求或要求释放资源的请求。在所示实例中,线程束请求可为要求得到七个寄存器的请求。资源分配器可接收具有相同的或不同的大小的多个线程束请求。释放请求可针对对线程束请求进行的前面的分配中的任意一者。

当在方块710中所述请求是对于资源的请求时,资源分配器在方块715中选择要分配的头。在某些实施例中,资源分配器基于自由资源可被分配到的节点的最大数目来选择分配头的数目,其中所述分配头分别对应于多个硬件资源中的自由资源的邻接范围。可使用贪婪方法、最佳匹配方法、差分方法、或任何其他合适的方法来实行对作为分配起点的分配头的选择。在贪婪方法中,资源分配器选择具有最大量的邻接资源的分配头;在最佳匹配优先次序中,资源分配器选择具有最小量的资源的分配头来分配;且在差分优先级中,资源分配器选择具有处于所请求资源的量的预定义裕量以内的可用范围的邻接资源的分配头。另外,分配器可基于对于资源的请求,从所述自由资源的所述一个或多个邻接范围中选择第一范围来分配给所述一个或多个节点中的第一节点,所述选择可包括基于所述请求的元数据。如上所述,所述元数据可包括:着色器类型;关于具体代码或程序的一些信息;用于预测着色器程序可能运行多长时间的任意方法;等等。

在某些实施例中,资源分配器在方块715中使用贪婪方法来选取从哪一个头开始分配。在方块720中,资源分配器从具有最多资源的头开始分配。因此,资源分配器从具有十五个寄存器的第一分配头开始分配。资源分配器实行恒定时间节点检查来维持循环性的双重链路列表。

在某些实施例中,在方块715中,当资源分配器使用最佳匹配方法来选取从哪一个头开始分配时,资源分配器选择刚好具有足够的资源的分配头来进行分配。因此,资源分配器在方块720中从具有八个寄存器的第二分配头开始分配。最佳匹配优先级函数使资源分配器能够作出最高效的资源分配并留下可用于可能较大的线程束请求的具有十五个寄存器的较大的第一分配头。最佳匹配优先级函数在小的碎片方面可能具有高风险。

资源分配器在方块720中以第一次序将节点分配给自由资源的邻接范围。以第一次序进行的分配定义了进行分配的顺序或次序。举例来说,资源分配器可响应于第一线程束(线程束0)请求来向节点0进行分配,接着响应于第二线程束(线程束1)请求来向节点1进行分配,接着响应于第三线程束(线程束2)请求来向节点2进行分配,等等。

当方块710中所述请求是释放时,资源分配器在方块725中乱序地(例如,以与第一次序不同的第二次序)释放节点。应注意,尽管对方块720中的分配的论述是在对方块725中的释放的论述之前进行,且尽管方块720及725的例示可表示从方块720到方块725的数字流程,但是方块725中的一个或多个释放操作可在方块720中的一个或多个分配之前、同时、或之后进行。方块720中的资源的释放可无论分配发生的次序(即,第一次序)如何均会发生。举例来说,在以第一次序向节点0、接着节点1、接着节点2等等进行分配之后,资源分配器可以在节点0之前从节点1释放或者在节点0或节点1之前从节点2释放的第二次序进行释放。方块720中的资源释放可响应于方块710中的释放(包括要求释放资源的请求、线程束的完成、等等)来进行。因此,当线程束完成时,可释放分配给线程束的资源。举例来说,当线程束1在线程束0之前完成时,分配给线程束1的资源在分配给线程束0的资源之前释放。另外,在释放线程束1的资源之前、之后或同时,资源分配器可响应于另外的线程束请求而在方块710中分配另外的资源。在释放时,资源可被重新映射到任何可用的空的分配头、重新映射到具有较少资源的分配头、重新映射到最大的分配、重新映射到最小的分配或重新映射到最早的相邻的分配(前一分配或下一分配)。在一些实施例中,第二次序与第一次序相同。释放次序也可基于除分配器控制之外的因素,例如响应于针对不同的、特定的硬件请求而完成线程束等等。

当在方块725中进行释放时,资源可被指派给其他分配头。在某些实施例中,资源分配器通过将所释放分配的资源与自由资源的范围进行合并来释放所述所分配节点。另外,在某些实施例中,资源分配器将所有的非现用分配指派为分配头。在某些实施例中,资源分配器使用指明所述多个节点中的下一节点或前一节点的链接列表的信息来分配节点及释放所分配节点。

为协助专利局及本申请所发表的任何专利的任何读者理解所附权利要求,申请人希望指出,除非在具体权利要求中明确使用“...的手段(meansfor)”或“...的步骤(stepfor)”一词,否则并非意图使任何所附权利要求或权利要求要件援引35u.s.c.§112(f)。在权利要求内使用包括但不限于“机构”、“模块”、“装置”、“单元”、“组件”、“元件”、“构件”、“设备”、“机器”、“系统”、“处理器”、或“控制器”等任何其他用语时,申请人理解为指代所属领域中的技术人员所知的结构而非旨在援引35u.s.c.§112(f)。

尽管已利用示例性实施例对本发明进行了阐述,然而所属领域中的技术人员可提出各种改变及修改。本发明旨在囊括落于所附权利要求的范围内的这些改变及修改。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1