计算工作分布参考计数器的制作方法

文档序号:6380905阅读:254来源:国知局
专利名称:计算工作分布参考计数器的制作方法
技术领域
本发明总地涉及程序执行,并且更具体地涉及用于程序执行的架构资源管理。
背景技术
程序的执行典型地要求分配处理和存储资源以处理数据和存储中间结果与输出。因为架构资源是有限的,因此跟踪分配给每个程序的资源量以确保资源池中的资源不被过度分配。当程序完成执行时,所分配的资源被释放并且返回到资源池。当用上下文切换来支持多线程程序执行时,存储为每个执行线程所维持的状态数据以执行上下文切换。为存储状态数据所需的存储器是为确保状态数据可以被存储而还必须被分配的附加资源。因此,本领域所需要的是一种在多线程执行期间改进资源的分配和释放的系统和方法。

发明内容
一种在多线程程序执行期间管理资源的分配和释放的系统和方法把可编程参考计数器初始化为限制用于分配给共享同一参考计数器的处理任务的资源量的值。为每个任务指定资源参数以定义被分配以供为执行任务而启动的每个执行线程阵列消耗的资源量。资源参数还指定用于获取和释放资源的阵列的行为。最后,在阵列中的每个线程的执行期间当生成子任务时,退出指令可被配置成覆盖(override)分配给阵列的资源的释放。所述覆盖确保保留资源以供还生成的继续任务使用。在多线程系统中分配和释放架构资源的本发明的方法的多个实施例包括:把所述架构资源分配给包括多个线程的线程阵列以执行处理任务;在所述处理任务的执行期间由线程阵列中的每个线程确定当线程阵列退出时是否将覆盖所述架构资源的释放。当线程阵列退出并且线程阵列中没有线程确定将不覆盖所述架构资源的释放时,释放所述架构资源。当线程阵列退出并且线程阵列中的至少一个线程确定将覆盖所述架构资源的释放时,保留所述架构资源。本发明的多个实施例包括被配置成分配和释放架构资源的多线程系统。多线程系统包括存储器、通用处理集群和工作分布单元。存储器被配置成存储对应于处理任务的程序指令。通用处理集群被配置成处理包括多个线程的第一线程阵列以执行处理任务,其中在所述处理任务的执行期间第一线程阵列的每个线程确定当第一线程阵列退出时是否将覆盖所述架构资源的释放。工作分布单元被耦合到所述通用处理集群并且被配置成:给所述第一线程阵列分配所述架构资源;当第一线程阵列退出并且第一线程阵列中没有线程确定将不覆盖所述架构资源的释放时,释放所述架构资源;以及当第一线程阵列退出并且第一线程阵列中的至少一个线程确定将覆盖所述架构资源的释放时,保留所述架构资源。当生成子任务时,暂停父任务的执行并且生成继续任务。在子任务的执行完成后,使用分配给父任务的架构资源来执行继续任务。在退出后,继续任务释放原始分配给父任务的架构资源。架构资源未被过度分配,并且可通过资源参数来管理可用于分配的资源数量。


因此,可以详细地理解上述列举的本发明的特征,并且可以参考实施例得到对如上面所概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应该注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,因为本发明可以承认其他等效的实施例。图1是示出了经配置以实现本发明一个或多个方面的计算机系统的框图;图2是根据本发明一个实施例的用于图1的计算机系统的并行处理子系统的框图;图3A是根据本发明一个实施例的图2的任务/工作单元的框图;图3B是根据本发明一个实施例的在图2的一个并行处理单元内的通用处理集群的框图;图4A示出了根据本发明的一个实施例的图3A的参考计数器和调度器任务的资源相关参数;图4B示出了根据本发明的一个实施例的图3A的参考计数器和不同任务的资源相关参数;图5A示出了根据本发明的一个实施例的用于在启动任务时管理架构资源的方法;以及图5B示出了根据本发明的一个实施例的用于在退出执行时管理架构资源的方法。
具体实施例方式在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,对本领域的技术人员显而易见的是本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他例子中,没有描述公知的特征以避免对本发明造成混淆。系统概述图1是示出了经配置以实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU) 102和经由可以包括存储器桥105的互连路径通信的系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接至Ij I/O (输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由路径106和存储器桥105将所述输入转发到CPU 102。并行处理子系统112经由总线或其他通信路径113 (例如PCI Express、加速图形端口或超传输链路)耦合到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传递到显示设备110 (例如传统的基于CRT或IXD的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116提供I/O桥107与诸如网络适配器118以及各种外插卡120和121的其他组件之间的连接。其他组件(未明确示出),包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片录制设备及类似组件,也可以连接到I/o桥107。使图1中各种组件互连的通信路径可以使用任何适合的协议实现,诸如PCI (外围组件互连)、PC1-Express、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且不同设备间的连接可使用本领域已知的不同协议。在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成起来,诸如存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,并且其他设备经由存储器桥105和CPU 102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上。大量实施例可以包括两个或两个以上的CPU 102以及两个或两个以上的并行处理系统112。本文所示的特定组件是可选的;例如,任意数量的外插卡或外围设备都可能得到支持。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O桥107。图2示出了根据本发明一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U彡I。(本文中,类似对象的多个实体以标识该对象的参考数字和需要时标识所述实体的括号中的数字来表示。)PPU 202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存 储器设备,或者以任何其他技术可行的方式来实现。再参考图1,在一些实施例中,并行处理子系统112的一些或所有PPU 202是具有渲染管线的图形处理器,它可以经配置以执行与下述相关的各种操作:经由存储器桥105和总线113从CPU 102和/或系统存储器104所提供的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常用帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202以及包括一个或多个用于通用计算的其他PPU 202。这些PI3U可以是相同的或不同的,并且每个PPU均可具有其自己的专用并行处理存储器设备或不具有专用的并行处理存储器设备。一个或多个PPU 202可输出数据到显示设备110,或者每个PPU 202均可输出数据到一个或多个显示设备110。在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102为每个PPU 202写入命令流到数据结构中(在图1或图2中未明确示出),所述数据结构可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(PUshbuffer)以启动对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。可以为每个入栈缓冲区指定执行优先权以控制对不同入栈缓冲区的调度。
现在返回参考图2B,每个PPU 202均包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可作为外插卡来实现,所述外插卡可被插入到计算机系统100的扩展槽中。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。而在其他实施例中,PI3U 202的一些或所有元件可以和CPU 102—起集成在单个芯片上。在一个实施例中,通信路径113是PC1-EXPRESS链路,如本领域所知的,在PC1-EXPRESS链路中专用通道被分配到每个PPU 202。I/O单元205生成用于在通信路径113上传输的数据包(或其他信号),并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引导到PPU 202的适当组件。例如,可将与处理任务有关的命令引导到主机接口 206,而可将与存储器操作有关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。有利地,每个PPU 202都实现高度并行处理架构。如详细示出的,PPU 202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC) 208,其中C彡I。每个GPC 208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于执行不同类型的计算。取决于因每种类型的程序或计算所产生的工作量,GPC 208的分配可以变化。GPC 208从任务/工作单元207内的工作分布单元来接收将要执行的处理任务。所述工作分布单元接收指向被编码为任务元数据(TMD)并存储在存储器中的计算处理任务的指针。指向TMD的任务指针被包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以被编码为TMD的处理任务包括将被处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理启动前,将GPC 208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先权。处理任务还可以从处理集群阵列230接收。可选地,TMD可以包括控制是否把TMD添加到链表的头部或尾部的参数,由此提供对优先权控制的另一等级。存储器接口 214包括D个分区单元215,每个分区单元215均直接耦合到一部分并行处理存储器204,其中DS I。如所示的,分区单元215的数量一般等于DRAM 220的数量。在其他实施例中,分区单元215的数量也可以不等于存储器设备的数量。本领域的技术人员应该理解DRAM 220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM 220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。任意一个GPC 208都可以处理将要被写到并行处理存储器204内的任意DRAM 220的数据。交叉开关单元21 0经配置以路由每个GPC 208的输出到任意分区单元215的输入或到另一个GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储器接口 214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口 214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC 208内的处理内核能够与系统存储器104或对于PPU 202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC 208与分区单元215之间的业务流。另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204传送到内部(片上)存储器中,处理所述数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统组件访问,所述其他系统组件包括CPU 102或另一个并行处理子系统112。PPU 202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可被集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PC1-EXPRESS)的分立芯片提供,所述高速链路经由桥式芯片或其他通信方式将PPU202连接到系统存储器。如上所述,并行处理子系统112可以包括任意数量的PPU 202。例如,可在单个外插卡上提供多个PPU 202、或可将多个外插卡连接到存储路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PI3U系统中的PPU202可以彼此相同或不同。例如,不同的PPU202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等等。在出现多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU 202所可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。多个并发任务调度可以在GPC 208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务以由GPC 208执行。图3A是根据本发明一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级来组织将要被调度的任务。对于每个优先级,任务管理单元300将指向对应于任务的TMD322的任务指针列表存储在调度器表321中,其中该列表可以用链表来实施并且在下文中假设链表。TMD 322是代表任务的元数据,诸如为执行任务所需要的配置数据和状态信息。可以将TMD322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务以执行的速度是解耦的,这使得任务管理单元300能够基于优先权信息或使用其他技术来调度任务。工作分布单元340包括具有槽的任务表345,每个槽均可以被正在被执行的任务的TMD 322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务以执行。当没有空闲槽时,没有占用槽的较高优先权任务可以驱逐占用槽的较低优先权任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将该任务添加到调度器表321中的链表。当生成子处理任务时,将该子处理任务添加到调度器表321中的链表。当任务被驱逐时,从槽移除该任务。工作分布单元340还包括计算工作分布(CWD)参考计数器350,其用来跟踪为处理任务所需要的可用资源。参考计数器被初始化以限制可消耗的最大资源量。在工作分布单元340启动任务以供GPC 208执行时,更新参考计数器以指示在启动任务后可用的资源量,由此说明任务所消耗的资源部分。资源可为存储器存储、处理资源、线程数量或者任何其他可由任务消耗的可量化架构资源。每个TMD 322指定特定的参考计数器和一个指示由任务需要(或者可能需要)的资源量的值。在启动任务之前,工作分布单元340检查该值不大于TMD 322指定的参考计数器。当启动任务时,工作分布单元340更新指定的参考计数器从而使得分配给任务的资源值不可用。在完成任务时,分配给任务的资源被释放并且相应地更新参考计数器350。更新参考计数器350的使用和更新结合图4A、4B、5A和5B进行更详细的描述。在一个实施例中,在每个TMD 322中指定多个参考计数器连同关联的计数器值,由此说明两个或更多架构资源。任务处理概述图3B是根据本发明一个实施例的、图2的一个PPU 202内的GPC 208的框图。每个GPC 208可被配置为并行地执行大量线程,其中术语“线程”是指对特定的一组输入数据执行的特定程序的实例。在一些实施例中,采用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立指令单元。在另一些实施例中,采用单指令多线程(SMT)技术,使用被 配置为发送指令到每一个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。不同于其中所有处理引擎一般都执行相同指令的SMD执行机制,SIMT执行允许不同的线程更容易跟随(follow)通过给定线程程序的发散的执行路径。本领域普通技术人员将理解的是,SMD处理机制代表SMT处理机制的功能子集。经由管线管理器305来有利地控制GPC 208的操作,所述管线管理器305将处理任务分布到多个流多处理器(SM: streaming multiprocessor) 310。管线管理器305也可被配置为通过为由SM 310输出的处理后的数据指定目的地来控制工作分布交叉开关330。在一个实施例中,每个GPC 208均包括M个SM 310,其中M彡I,每个SM 310均被配置为处理一个或多个线程组。而且,每个SM 310有利地还包括同样的一组可被管线化的功能执行单元,从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持多种运算,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、X0R)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(be leveraged to)执行不同运算。传送到特定GPC 208的指令序列构成线程,如本文前面所定义的,并且跨SM 310内并行处理引擎(未示出)的一定数量并发执行的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被分配给SM 310内不同的处理引擎。线程组可包括比SM 310内处理引擎的数量少的线程,在此情况下,在正在处理该线程组的周期内,一些处理引擎将处于空闲状态。线程组也可包括比SM 310内处理引擎的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SM 310可以支持多达G个线程组并发执行,所以在任一给定时间都可以允许多达GXM个线程组在GPC 208中执行。另外,在SM 310内,多个相关的线程组可同时活动(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于mXk,其中k是线程组中并发执行的线程的数量,并且一般是SM 310内处理引擎的数量的整数倍,m是SM 310内同时活动的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。每个SM 310均包括一级(LI)高速缓存,或使用在SM 310之外对应的LI高速缓存中用以执行加载和存储操作的空间。每个SM 310也有权访问二级(L2)高速缓存,它们在所有GPC 208之间被共享并且可用于在线程之间传送数据。最后,SM 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU 202外部的任何存储器都可被用作全局存储器。此外,一点五级(L1.5)高速缓存335可被包括在GPC 208之内,被配置为经由存储器接口 214来接收和保持从存储器中获取的、SM 310所请求的数据,包括指令、一致性(uniform)数据以及常数数据,以及向SM 310提供所请求的数据。在GPC 208中具有多个SM 310的实施例有利地共享被高速缓存于L1.5高速缓存335中的公共指令和数据。每个GPC 208可包括存储器管理单元(MMU) 328,该单元被配置为将虚拟地址映射到物理地址。在另一些实施例中,MMU 328可处于存储器接口 214内。MMU 328包括一组页表条目(PTE)以及可选地包括高速缓存线索引(cache line index),该组PTE被用于将虚拟地址映射到像素块(tile)的物理地址。MMU 328可包括地址转译后备缓冲区(translationlookaside buffer, TLB)或高速缓存,其可处于多处理器SM 310或LI高速缓存或GPC 208内。物理地址被处理为分布表面数据访问位置以允许在分区单元之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。在图形和计算应用中,GPC 208可被配置为使得每个SM 310耦合至纹理单元315,用于执行纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理LI高速缓存(未示出)读取的,或者在一些实施例中是从SM 310内的LI高速缓存读取的,并且根据需要从L2高速缓存、并行处理存储器204或系统存储器104获取。每个SM 310将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一个GPC 208用于进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。preROP (pre-raster operations,预光栅操作)325被配置为从SM 310接收数据,将数据引向分区单元215中的ROP单元,并执行对色彩混合的优化、组织像素色彩数据以及执行地址转译。应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包含有任何数量的处理单元,例如,SM 310或纹理单元315、preROP325。此外,虽然仅示出了一个GPC 208,但PPU202可包含任何数量的GPC 208,这些GPC 208最好在功能上彼此相似,以使执行行为不依赖于接收具体处理任务的GPC 208。此外,每个GPC 208最好使用单独的且各异的处理单元、LI高速缓存等,相对于其他GPC 208独立地操作。本领域普通技术人员应理解的是,图1、2、3A和3B中所描述的架构决非限制本发明的范围,并且在不脱离本发明的范围的情况下,本文所教导的技术可在任何适当配置的处理单元上实施,这些处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元等。在本发明的实施例中,所期望的是,用PPU 202或计算系统的其他处理器使用线程阵列来执行通用计算。给线程阵列中的每个线程分配唯一的线程标识符(“线程ID”),所述线程标识符在线程执行期间可由该线程访问。线程ID可以被定义为一维或多维数值,控制线程的处理行为的各个方面。例如,线程ID可用于确定线程输入数据集中将要处理的部分和/或确定线程输出数据集中将要生成或写入的部分。每线程的指令序列可包含至少一个指令,所述至少一个指令定义线程阵列中代表性线程和一个或多个其他线程之间的协作行为。例如,每线程的指令序列可能包含下列指令:指示在序列中的特定点处暂定执行代表性线程的操作直至一个或多个其他线程到达该特定点时为止的指令;指示代表性线程将数据存储在一个或多个其他线程有权访问的共享存储器中的指令;指示代表性线程自动读取和更新存储在共享存储器中的数据的指令,一个或多个其他线程基于它们的线程ID有权访问所述共享存储器;等等。CTA程序也可以包含计算将从中读取数据的共享存储器中的地址的指令,其中地址为线程ID的函数。通过定义合适的功能并提供同步技术,可以以可预测的方式通过CTA的一个线程将数据写入到共享存储器中的给定位置,并且通过同一 CTA的不同线程从该位置读取出来。因此,线程之间任何期望模式的数据共享都可以得到支持,并且CTA中的任何线程都可以与同一 CTA中的任何其他线程共享数据。CTA的线程之间如果存在数据共享,则数据共享的程度由CTA程序决定;因而,应予以理解的是,在使用CTA的具体应用中,取决于CTA程序,CTA的线程实际上可能彼此共享或者不共享数据,并且术语“CTA”和“线程阵列”在本文中具有相同含义。计算工作分布参考计数器TMD 322封装用于处理任务的元数据,包括栅格(grid)维度。栅格维度(n,m)指定为处理任务而执行的CTA数量,其中η和m是整数。例如,栅格维度1,I指定单个CTA并且栅格维度2,I或者1,2指定两个CTA。栅格可具有两个以上维度,并且所有维度大小在TMD中指定。每个CTA要求用于执行的一些架构资源。参考计数器350提供一种用于防止架构资源的过度分配的机构。每个参考计数器350可代表单个架构资源或者两个或更多架构资源的组合。架构资源可包括部分共享存储器、本地存储器、寄存器、CTA标识器、线程组和线程。架构资源还可包括用来在线程执行屏障指令后跟踪不同CTA的同步的屏障计数器。需要单独的屏障计数器以在不同线程每个到达屏障指令时跟踪不同线程。有限数量的屏障计数器可用,因此屏障计数器是架构资源。继续任务是分配给任务的另一种架构资源。如先前所解释的,处理任务可在执行期间生成一个或多个“子”处理任务。在子处理任务在CTA的执行期间由至少一个线程生成时,分配给CTA的资源未被释放。作为替代,CTA的执行被暂停,同时使用分配给子任务的架构资源来执行子任务。在完成子任务的执行后,生成继续任务以完成CTA的执行。继续任务由TMD 322代表并且消耗继续任务。子任务不消耗分配给父CTA的架构资源。相反,父CTA不消耗分配给子任务的架构资源。任务/工作单元207暂停生成子任务的父CTA的执行,并且以与父CTA的优先级相比更高的优先级动态地调度子处理任务。指定所述更高的优先级从而使得子处理任务的执行与为与父CTA相同的任务启动的任何其他CTA相比将快速地完成。典型地,生成子任务以计算父CTA所相关的数据。当父CTA的执行被暂停时,父CTA的状态从GPC 208卸载并且被存储。父CTA的执行可在稍后时间恢复。分配继续任务来存储代表为恢复父CTA的执行而需要的状态信息的TMD 322。当不支持存储器的请求调页时,在工作分布单元340为任务启动CTA时必须预先保留用于继续任务的所有存储器。对于给定的处理任务,每个CTA所需要的继续任务的指定数量应该可用作启动CTA的先决条件,否则CTA的可能不能被保存并且随后恢复。因为继续任务使用仅对生成任务的软件运行时间已知,因此工作分布单元340在没有来自软件运行时间的帮助下不能跟踪继续任务要求。软件运行时间把需要的继续任务的数量编写到TMD 322中。在一个实施例中,作为资源参数包括的增量(delta)值代表继续任务的数量。另外,子任务还可为生成一个或多个子任务的父任务,所述一个或多个子任务每个还将需要继续任务以便成功地执行。为了保证每个子任务具有足够的继续任务来完成,子任务被分配来自与父任务不同的继续任务池的继续任务。因此,在架构资源中包括多个继续任务池。在执行处理任务之前把参考计数器350初始化为特定值。在一个实施例中,单独的参考计数器350用于可针对TMD 322指定的每个不同优先级。参考计数器350可被初始化为M*P以限制M个SM 310中的每个并发运行特定数量(P)的CTA。替代地,可初始化参考计数器350以限制并发运行的线程组的数量。因为针对CTA执行的每个线程可以生成子任务,因此继续任务的数量可基于不同优先级的数量和并发CTA的数量(或者并发线程组的数量)来计算。在表I中示出为处理任务在TMD 322中指定的资源参数。表1:资源参数
权利要求
1.一种在多线程系统中分配和释放架构资源的方法,所述方法包括: 把所述架构资源分配给包括多个线程的第一线程阵列以执行处理任务; 在所述处理任务的执行期间由第一线程阵列中的每个线程确定当第一线程阵列退出时是否将覆盖所述架构资源的释放; 当第一线程阵列退出并且第一线程阵列中没有线程确定将不覆盖所述架构资源的释放时,释放所述架构资源;以及 当第一线程阵列退出并且第一线程阵列中的至少一个线程确定将覆盖所述架构资源的释放时,保留所述架构资源。
2.根据权利要求1所述的方法,其中第一线程阵列中的第一线程在所述处理任务的执行期间生成子处理任务并且确定当第一线程阵列退出时将覆盖所述架构资源的释放。
3.根据权利要求2所述的方法,进一步包括从单独池中给所述子处理任务分配附加的架构资源,所述单独池不包括被分配给第一线程阵列的架构资源。
4.根据权利要求2所述的方法,进一步包括生成继续任务,所述继续任务被配置成完成由第一线程执行的处理任务并且释放被分配给第一线程阵列的架构资源。
5.根据权利要求1所述的方法,进一步包括初始化参考计数器,所述参考计数器对在池中可用于分配的架构资源的最大数量进行限制。
6.根据权利要求5所述的方法,其中资源参数由计算任务指定,并且所述资源参数包括指示为第一线程阵列所需要的架构资源数量的增量值。
7.—种被配置成分配和释放架构资源的多线程系统,包括: 存储器,被配置成存储对应于处理任务的程序指令; 通用处理集群,被配置成处理包括多个线程的第一线程阵列以执行处理任务,其中在所述处理任务的执行期间第一线程阵列的每个线程确定当第一线程阵列退出时是否将覆盖所述架构资源的释放; 工作分布单元,被耦合到所述通用处理集群并且被配置成: 给所述第一线程阵列分配所述架构资源; 当第一线程阵列退出并且第一线程阵列中没有线程确定将不覆盖所述架构资源的释放时,释放所述架构资源;以及 当第一线程阵列退出并且第一线程阵列中的至少一个线程确定将覆盖所述架构资源的释放时,保留所述架构资源。
8.根据权利要求7所述的多线程系统,其中第一线程阵列中的第一线程在所述处理任务的执行期间生成子处理任务并且确定当第一线程阵列退出时将覆盖所述架构资源的释放。
9.根据权利要求7所述的多线程系统,其中所述工作分布单元进一步被配置而对参考计数器进行初始化,所述参考计数器对在池中可用于分配的架构资源的最大数量进行限制。
10.根据权利要求9所述的多线程系统,其中所述参考计数器代表不同架构资源的组口 ο
全文摘要
本发明为计算工作分布参考计数器。本发明的一个实施例阐述了一种在多线程程序执行期间管理资源的分配和释放的技术。可编程参考计数器被初始化为限制用于分配给共享同一参考计数器的任务的资源量的值。为每个任务指定资源参数以定义被分配以供为执行任务而启动的每个执行线程阵列消耗的资源量。资源参数还指定用于获取和释放资源的阵列的行为。最后,在阵列中的每个线程的执行期间,退出指令可被配置成覆盖分配给阵列的资源的释放。然后可保留资源以供在线程的执行期间生成的子任务使用。
文档编号G06F9/50GK103176848SQ201210445168
公开日2013年6月26日 申请日期2012年11月8日 优先权日2011年11月8日
发明者菲利普·亚历山大·夸德拉, 卡里姆·M·阿夫达利亚, 杰尔姆·F·小杜鲁克, 卢克·杜兰特, 格拉尔德·F·路易斯, 蒂莫西·约翰·珀塞尔, 兰基·V·姗 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1