自动从属任务启动的制作方法

文档序号:6398712阅读:144来源:国知局
专利名称:自动从属任务启动的制作方法
技术领域
本发明总地涉及程序执行,并且,更具体地,涉及当第一任务的执行完成时从属任务的自动启动。
背景技术
从属任务的执行通常要求通过使用信号量(semaphore)来协调,其中第一任务释放从属任务随后所取得的信号量。信号量的使用确保第一任务的执行在从属任务的执行开始之前完成。因为从属任务依赖于由第一任务所计算的值或数据,所以从属任务必须等待直到第一任务的执行完成为止。通过存储器读和写来实施对信号量的释放和取得信号量。第一任务写存储器以释放信号量而从属任务读存储器以取得信号量。一旦从属任务取得了信号量,则之后将从属任务输入到处理器并且之后可以启动从属任务的执行。信号量释放和取得事务在第一任务的执行完成与从属任务的执行可以开始之间引入了大量的延迟,例如若干时钟周期。信号量释放和取得操作还使得一个存储器写和通常数个存储器读成为必要。存储器写和读消耗存储器带宽并且当可用存储器带宽受限时可降低处理性能。因此,本领域所需的是用于在多线程执行期间从属任务的改进启动的系统和方法。具体来讲,所期望的是降低第一任务的执行与第一任务的执行完成时从属任务的执行之间的过渡所带来的延迟
发明内容
用于当第一任务的执行完成时自动启动从属任务的系统和方法降低了从第一任务到从属任务的过渡期间所带来的延迟。将与从属任务相关联的信息编码为用于第一任务的元数据的一部分。当第一任务的执行完成时通知任务调度单元以及在不要求任何信号量的释放或取得的情况下启动从属任务。与从属任务相关联的信息包括使能标志和指向从属任务的指针。一旦启动从属任务,就将第一任务标记为完成以使得存储所述用于第一任务的元数据的存储器可以重新用来存储用于新任务的元数据。用于自动启动从属任务的本发明方法的各种实施例包括接收第一处理任务已经在多线程系统中完成执行的通知。读取在编码第一处理任务的第一任务元数据中所存储的从属任务使能标志。在第一处理任务的执行之前写入从属任务使能标志。当第一处理任务的执行完成时,确定所要设置的指示应该执行从属任务的从属任务使能标志以及调度从属任务用于在多线程系统中执行。本发明的各种实施例包括配置为自动启动从属任务的多线程系统。多线程系统包括配置为存储编码第一处理任务的第一任务元数据的存储器、通用处理集群和耦连到通用处理集群的任务管理单元。通用处理集群配置为执行第一处理任务以及当第一处理任务的执行完成时生成通知。任务管理单元配置为接收第一处理任务已经完成执行的通知、读取存储在第一任务元数据中的从属任务使能标志,其中在第一处理任务的执行之前写入从属任务使能标志、确定从属任务使能标志指示当第一处理任务的执行完成时应该执行从属任务,以及调度从属任务用于由通用处理集群执行。当第一任务完成执行时自动启动从属任务的执行,与使用信号量相比降低了从第一任务到从属任务的过渡期间所带来的延迟。当编码第一任务的时候第一任务包括与从属任务相关联的信息。因此,当执行第一任务时信息已经是已知和可用的。此外,从属任务可以包括与将在从属任务的执行之后自动执行的第二从属任务相关联的信息。


因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以承认其他等效的实施例。图1为示出了配置为实现本发明一个或多个方面的计算机系统的框图;图2为根据本发明一个实施例的、用于图1的计算机系统的并行处理子系统的框图;图3A为根据本发明一个实施例的、图2的任务/工作单元的框图;图3B为根·据本发明一个实施例的、在图2的并行处理单元之一内的通用处理集群的框图;图4A为根据本发明一个实施例的、图3A的TMD的内容的示意图;图4B示出了根据本发明一个实施例的原始任务和两个从属任务;以及图5示出了根据本发明一个实施例的、用于自动启动从属任务的方法。
具体实施例方式在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,对本领域的技术人员来说显而易见的是,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,未描述公知的特征以避免对本发明造成混淆。系统概述图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU) 102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到I/O (输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或其他通信路径113 (例如PCIExpress、加速图形端口或超传输链路)耦连到存储器桥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、CPU102以及I/O桥107集成在一起以形成片上系统(SoC)。应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上。大型实施例可以包括两个或两个以上的CPU102以及两个或两个以上的并行处理系统112。本文所示的特定部件是可选的;例如,任意数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。图2示出了根据本 发明一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中US I。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。再次参考图1,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述从属的各种操作:经由存储器桥105和总线113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PTO可以是同样的或不同的,并且每个PPU均可具有其自己的专用并行处理存储器设备或不具有专用并行处理存储器设备。一个或多个PPU202可输出数据到显示设备110,或者每个PPU202均可输出数据到一个或多个显示设备110。在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。现在返回参考图2B,每个PPU202均包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。在一个实施例中,通信路径113是PC1-EXPRESS链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。有利地,每个PPU202都实现高度并行处理架构。如详细示出的,Pro202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C彡I。每个GPC208都能够并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可分配不同的G·PC208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的计算处理任务的指针。指向TMD的任务指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到链表的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。存储器接口 214包括D个分区单元215,每个分区单元215均直接耦连到并行处理存储器204的一部分,其中D彡I。如所示的,分区单元215的数目一般等于DRAM220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。任意一个GPC208都可以处理要被写到并行处理存储器204内的任意DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任意分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口 214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口 214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。另外,GPC208可被编程以执行与种类繁多的应用从属的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色、顶点着色、几何着色、和/或像素着色程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。PPU202可配备有任意容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PC1-EXPRESS)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。如上所示,在并行处理子系统112中可以包括任意数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。多个并发任务调度 可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。任务/工作单元207还配置为当指定具体从属任务的处理任务已经完成执行时自动调度从属任务用于执行。从属任务不同于子任务,因为在父处理任务执行期间不生成从属任务。相反,当定义父任务例如指定从属任务的任务时定义从属任务,并因此等到父任务开始执行时从属任务才是已知和可用的。图3A为根据本发明一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD322的任务指针的列表存储在调度器表321中,其中所述列表可以用链表实现,以及下文中假定为链表。TMD322是代表任务的元数据,诸如执行任务所需要的配置数据和状态信息。TMD高速缓存350存储一个或多个TMD322的至少一部分。可以将存储在TMD高速缓存350中的TMD322连同其部分还未被存储在TMD高速缓存350中的其他TMD —起存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的,使任务管理单元300能够基于优先级信息或使用其他技术来调度任务。工作分布单兀340包括具有槽的任务表345,每个槽均可以被用于正在执行的任务的TMD322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务执行没有完成,则将该任务添加到调度器表321中的链表。当生成子处理任务时,将该子处理任务添加到调度器表321中的链表。类似地,当启动从属任务的执行时,将该从属任务添加到调度器表321中的链表。当任务被驱逐时从槽移除该任务。每个TMD322可以是大的结构,例如256字节或更多,其典型地存储在PP存储器204中。由于大的尺寸,TMD322根据带宽进行访问是昂贵的。因此,当启动任务时TMD高速缓存350仅存储任务管理单元300进行调度所需的TMD322的(相对小的)一部分。当调度任务,即将任务转移到工作分布单元340时,可以从PP存储器204获取TMD322的其余部分。在软件控制下写入TMD322,并且,当计算任务完成执行时,可回收与已完成的计算任务相关联的TMD来存储用于不同计算任务的信息。因为可将TMD322存储在TMD高速缓存350中,所以应该从TMD高速缓存350去除存储用于已完成的计算任务的信息的条目。去除操作是复杂的,因为写入用于新计算任务的信息与将存储在TMD高速缓存350中的信息写回到由该去除所产生的TMD322是解耦的。具体来讲,将用于新任务的信息写到TMD322然后将TMD322作为入栈缓冲区的一部分输出到前端212。这样,软件没有接收到TMD高速缓存350已被去除的确认,以使得·TMD322的写入可被延迟以确保在去除期间不会覆写用于新任务的信息。因为用于去除的高速缓存写回可能覆写存储在TMD322中用于新任务的信息,所以留出每个TMD322的“纯硬件”部分用于仅由任务管理单元300访问。TMD322的其余部分可以由软件和任务管理单元300所访问。TMD322可由软件所访问的部分典型地由软件来填充以发起任务。之后在任务的调度和执行期间由任务管理单元300和GPC208中的其他处理单元来访问TMD322。当将用于新计算任务的信息写到TMD322时,在第一次将TMD322加载进TMD高速缓存350中时,启动TMD322的命令可以指定是否将位拷贝进TMD322的纯硬件部分。这保证TMD322将正确地仅存储用于新计算任务的信息,这是因为用于已完成的计算任务的任何信息将已经仅被存储在TMD322的纯硬件部分。当TMD322包括用于从属TMD的信息时,从属TMD当TMD322的执行完成时自动启动。用于从属TMD的信息包括指示当将TMD加载进TMD高速缓存350并启动时是否应该将位拷贝进从属TMD的纯硬件部分。任务处理概述图3B为根据本发明一个实施例的在图2的PPU202之一内的GPC208的框图。每个GPC208均可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。经由将处理任务分布到流多处理器(SM) 310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目的地来控制工作分布交叉开关330。在一个实施例中,每个GPC208均包括M个SM310,其中M彡1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样的功能执行单元集,其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任意组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、X0R)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周·期内发生。因为每个SM310均可以并发支持多达G个线程组,结果是在任意给定时间在GPC208中可以执行多达G*M个线程组。此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。每个SM310均包含一级(LI)高速缓存或使用用于实施加载和存储操作的SM310外部的相应LI高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任意存储器均可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口 214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。每个GPC208均可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU) 328ο在其他实施例中,MMU328可以驻留在存储器接口 214内。MMU328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存线索引。MMU328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM310或LI高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元之间交错。高速缓存线索引可用于确定用于高速缓存线的请求命中还是未命中。在图形和计算应用中,GPC208可配置为使得每个SM310均耦连到用于实施纹理映射操作例如确定纹理样本位置、读出纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理LI高速缓存(未示出)或者在一些实施例中从SM310内的LI高速缓存读出纹理数据并根据需要从L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310均将所处理的任务输出到工作分布交叉开关330。preROP (预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任意数目的处理单元例如SM310或纹理单元315、preR0P325均可以包括在GPC208内。进一步地,虽然仅示出了一个GPC208,但是PPU202可以包括任意数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地均使用分开且各异的处理单元、LI高速缓存等等来独立于其他GPC208操作。本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任意经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。 在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程均指派在其执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程以原子方式读出和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读出的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读出数据。因此,数据在线程之间共享的任意期望模式可以得到支持,以及CTA中的任意线程可以与同一个CTA中的任意其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。计算任务元数据图4A为根据本发明一个实施例的、存储在PP存储器204中的TMD322的内容的示意图。TMD322配置为存储初始化参数405、调度参数410、执行参数415、CTA状态420、纯硬件字段422和队列425。纯硬件字段422存储TMD322的纯硬件部分,其包括一个或多个纯硬件参数。所有TMD322公共的状态不包括在每个TMD322中。因为TMD322是存储在PP存储器204中的数据结构,所以运行在CPU102或PPU112上的计算程序可以在存储器中创建TMD322结构并且随后通过将指向TMD322的任务指针发送到任务/工作单元207来提交TMD322用于执行。初始化参数405用于当启动TMD322时配置GPC208并且可以包括开始程序地址和队列425的大小。注意可以将队列425与TMD322分开存储在存储器中,在这种情况下TMD322包括指向队列425的指针(队列指针)而不是实际的队列425。初始化参数405还可以包括位以指示当启动TMD322时各种高速缓存,例如纹理头高速缓存、纹理采样器高速缓存、纹理数据高速缓存、数据高速缓存、常数高速缓存等等是否是无效的。初始化参数405还可以包括线程中的CTA的维数、TMD版本号、指令集版本号、关于CTA宽度、高度和深度的网格的维数、存储器库映射参数、应用程序所看到的调用栈的深度以及用于TMD322的调用返回栈的大小。调度参数410控制任务/工作单元207如何调度TMD322用于执行。调度参数410可以包括指示TMD322是队列TMD还是网格TMD的位。如果TMD322是网格TMD,那么不使用允许在启动TMD322之后对附加数据进行排队的TMD322的队列特性,并且TMD322的执行使得固定数目的CTA启动并执行以处理固定量的数据。CTA的数目指定为网格宽度、高度和深度的乘积。用指向将由执行TMD322所指定的程序的CTA所处理的数据的队列指针来取代队列425。 如果TMD322是队列TMD,那么使用TMD322的队列特性,这意味着将数据存储在队列425中作为队列条目。队列条目是到TMD322的CTA的输入数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。典型地,线程或包括线程的CTA的执行被挂起直到子任务的执行完成。队列425可以实现为循环队列以使得数据的总量不被队列425的大小所限制。如前所述的,可以将队列425与TMD322分开存储并且TMD322可以存储指向队列425的队列指针。有利地,当代表子任务的TMD322正在执行时可以将用于子任务的队列条目写到队列425。执行可变数目的CTA用于队列TMD,其中CTA的数目取决于写到队列TMD的队列425的条目的数目。用于队列TMD的调度参数410还包括由每个CTA所处理的队列425的条目的数目(N)。当将N个条目添加到队列425时,启动一个CTA用于TMD322。任务/工作单元207可以构造进程的有向图,其中每个进程是具有队列的TMD322。可以基于用于每个TMD322的N的值和已经写在队列425中的条目的数目来确定用于每个TMD322的所要执行的CTA的数目。队列TMD的调度参数410还可以包括合并等待时间参数,其设置在用少于N个队列条目运行CTA之前所等待的时间量。当队列几乎是空的但是存在队列条目的数目不足时需要合并等待时间参数,其当在执行的过程期间队列条目的总数目不能被N整除时发生。为了避免死锁,对于生产者-消费者队列的情况也需要合并等待时间参数。在正用少于N个条目来执行CTA的情况下,将队列条目的数目作为参数传递到TMD程序,以使得在执行期间可以将条目的数目列入考虑。
替代实施例可以具有用于网格TMD和队列TMD的不同结构,或者实现网格TMD或队列TMD。TMD322的调度参数410可以包括指示调度从属TMD是否还导致TMD字段被拷贝到纯硬件字段422的位。调度参数410还可以包括TMD组ID、指示在何处将TMD322添加到链表(头部或尾部)的位、以及指向TMD组中下一个TMD322的指针。调度参数410还可以包括使能/禁用GPC208内的特定流多处理器的掩码。TMD322可以包括指向当TMD322完成时自动启动的从属TMD的任务指针。从属TMD字段424包括使能标志,其设置为指示当原始TMD322的执行完成时应该启动从属TMD用于执行。指向从属TMD的任务指针还存储在从属TMD字段424中。在一个实施例中,任务指针是若干虚拟地址的最重要的位,例如从属TMD的40位虚拟地址中的32位。从属TMD字段424还可以存储用于从属TMD的TMD类型的指示,例如网格或队列TMD。最后,从属TMD字段还可以包括指示当启动从属TMD (或将从属TMD加载进TMD高速缓存350)时应该将数据拷贝到从属TMD的纯硬件字段的标志。在原始TMD322的执行完成之后使用从属TMD来自动地启动任务是有利的,因为在当原始TMD322的执行完成时和当从属TMD开始执行时之间的延迟是低的。可替代地,可以由TMD322执行信号量以保证不同TMD322和CPU102之间的依赖性得到满足。例如,第二 TMD322的执行可以取决于第一 TMD322完成,所以第一 TMD322生成信号量释放,并且在相应的信号量取得成功之后第二 TMD322执行。在一些实施例中,在主机接口 206或前端212中实施信号量取得。用于TMD322的执行参数415可以存储多个信号量释放,包括存储器屏障·的类型、存储器中的信号量数据结构的地址、信号量数据结构的大小、有效载荷以及缩减操作的使能、类型和格式。信号量的数据结构可以存储在执行参数415中或者可以存储在TMD322之外。然而,实施信号量操作而不使用从属TMD来保证两个TMD322连续执行导致了对从第一 TMD322到第二 TMD322的过渡的较高的延迟。自动从属任务启动图4B不出了根据本发明一个实施例的原始任务450和两个从属任务460和470。原始任务450由任务/工作单元207经由前端212接收并被包括在入栈缓冲区中。如前所述的,TMD322封装用于处理任务的元数据,包括网格维数。网格维数(n,m),其中η和m是整数,指定被执行以处理任务的CTA的数目。例如,网格维数1,I指定单个CTA ;以及网格维数2,I或1,2指定两个CTA。网格可以具有两个以上的维数,并且所有维数大小在TMD322中指定,假定TMD322是网格TMD。原始任务450是指定网格(2,2)的网格TMD以使得四个CTA将执行由原始任务450所指定的数据和程序。原始任务450中的从属TMD字段包括从属TMD使能位451、从属TMD指针452和TMD字段拷贝使能位453。从属TMD使能位451设置为TRUE,这指示当原始任务450的执行完成时应该启动从属任务460。从属TMD指针452指向从属任务460并且TMD字段拷贝使能位453也设置为TRUE,这指示应该将从属TMD数据拷贝到从属任务460的纯硬件区。从属任务460还是网格TMD,但是不同于原始任务450,从属任务460指定网格(1,O以使得仅一个CTA将执行由从属任务460所指定的数据和程序。从属任务460的从属TMD字段包括从属TMD使能位461、从属TMD指针462和TMD字段拷贝使能位463。从属TMD使能位461设置为TRUE,这指示当从属任务460的执行完成时应该启动从属任务470。从属TMD指针462指向从属任务470并且TMD字段拷贝使能位463设置为FALSE,这指示不应将从属TMD数据拷贝到从属任务470的纯硬件区。从属任务470是队列TMD。从属任务470中的从属TMD字段包括从属TMD使能位471、从属TMD指针472和TMD字段拷贝使能位473。从属TMD使能位471设置为FALSE,这指示当从属任务470的执行完成时不应启动从属任务。因为从属TMD使能位471为FALSE,所以忽略从属TMD指针462和TMD字段拷贝使能位463。不同于在入栈缓冲区中所指定的原始任务450,从属任务460和470不出现在入栈缓冲区中。相反在执行编码原始任务450的TMD322之前将编码从属任务460和470的TMD写到存储器以及分别将用于执行从属任务460和470的信息编码在原始任务450和从属任务460的从属TMD字段中。从属任务460和470可以用于实施分批式处理功能,其不需要或不应该由执行原始任务450的CTA的每线程来实施。具体来讲,虽然原始任务450由四个CTA执行,但是从属任务460仅由单个CTA执行。可以通过指定各自TMD的相对网格大小来控制从属任务460相对于原始任务450的执行的频率。在一个实施例中,从属任务460或470可以配置为实施存储器碎片整理、存储器分配或存储器解除分配操作。在另一个实施例中,从属任务460或470可以是配置为具有高优先级级别的调度器任务。每次仅执行单个调度器CTA以及调度器任务负责确定何时网格已经完成执行并负责发起延续任务的启动。图5示出了根据本发明一个实施例的、用于自动启动从属任务的方法500。尽管结合图1、2、3A和3B的系统描述了该方法步骤,但是本领域技术人员应该理解配置为以任意顺序实施该方法步骤的任意系统均在本发明的范围内。 在步骤505由任务管理单元300接收来自处理集群阵列230的编码为TMD322的第一处理任务已经完成执行的通知。在步骤510任务管理单元单元300读取存储在用于第一任务的任务元数据中的从属任务使能标志。重要的是,从属任务使能标志和编码从属任务的TMD322在第一任务的执行和未在入栈缓冲区中指定从属任务之前编码。在步骤515,任务管理单元300确定从属任务使能标志指示当第一任务的执行完成时是否应该执行从属任务,即是否将从属TMD使能位设置为TRUE。如果在步骤515没有使能从属任务,那么在步骤520将原始TMD识别为已完成。否则在步骤525任务管理单元300确定是否应该将用于从属任务的TMD数据拷贝到从属TMD的纯硬件区,即是否将TMD字段拷贝使能位设置为TRUE。如果在步骤525任务管理单元300确定将TMD字段拷贝使能位设置为TRUE,那么在步骤530,在前进到步骤535之前任务管理单元300将位从从属TMD的非纯硬件部分拷贝到存储从属TMD的纯硬件部分的条目部分。将位从从属TMD的非纯硬件部分拷贝到存储纯硬件的条目部分保证了任务管理单元300能够访问任务管理单元300所需的TMD322的字段。如果在步骤525任务管理单元300确定将TMD字段拷贝使能位设置为FALSE,那么在步骤540任务管理单元300将原始TMD识别为正在完成执行。在步骤545任务管理单元300通过将从属TMD添加到调度器表321来启动编码从属任务的从属TMD用于由处理集群阵列230执行。因为当原始任务完成执行时自动启动从属任务用于执行,因此与使用信号量相比从原始任务到从属任务的过渡期间所带来的延迟降低。当编码原始任务的时候原始任务包括与从属任务相关联的信息。因此,当执行原始任务时该信息已经是已知和可用的。此外,从属任务可以包括与将在从属任务的执行之后自动执行的第二从属任务相关联的信息。因此,多个处理任务的执行可以有效率地完成。此外,可以控制从属任务相对于原始任务的执行的频率以使得当原始任务由多个CTA执行时从属任务仅由单个CTA执行。相反,当原始任务仅由单个CTA执行时从属任务仅由多个CTA执行。本发明的一个实施例可以作为与计算机系统一起使用的程序产品实现。程序产品的程序定义实施例(包括本文所述的方法)的功能并且可以被包含在各种计算机可读存储介质上。示例性的计算机可读存储介质包括,但不限于:(i )信息被永久存储在其上的非可写存储介质(例如,计算机内的只读存储器设备,诸如可被CD-ROM驱动器读取的CD-ROM盘、闪速存储器、ROM芯片或任何类型的固态非易失性半导体存储器)jP(ii)可变信息被存储在其上的可写存储介质(例如,磁盘驱动器内的软盘或者硬盘驱动器或者任何类型的固态随机存取半导体存储器)。以上已经参照特定·实施例描述了本发明。然而,本领域技术人员应该理解可以另外做出各种修改和改变,而不脱离如所附权利要求提出的本发明更宽的精神和范围的情况。因此,前述的描述和附图应被视为示例性的而非限制性的意义。
权利要求
1.一种自动启动从属任务的方法,所述方法包括: 接收第一处理任务已经在多线程系统中完成执行的通知; 读取存储在编码所述第一处理任务的第一任务元数据中的从属任务使能标志,其中所述从属任务使能标志在所述第一处理任务的执行之前写入; 确定所述从属任务使能标志指示当所述第一处理任务的执行完成时应该执行从属任务;以及 调度所述从属任务用于在所述多线程系统中执行。
2.根据权利要求1所述的方法,进一步包括读取指向编码所述从属任务的从属任务元数据的指针。
3.一种配置为自动启动从属任务的多线程系统,包括: 存储器,其配置为存储编码第一处理任务的第一任务元数据; 通用处理集群,其配置为执行所述第一处理任务以及当所述第一处理任务的执行完成时生成通知; 任务管理单元,其耦连到所述通用处理集群并且配置为: 接收所述第一处理任务已经完成执行的所述通知; 读取存储在所述第一任务元数据中的从属任务使能标志,其中所述从属任务使能标志在所述第一处理任务的执行之前写入; 确定所述从属任务使能标志指示当所述第一处理任务的执行完成时应该执行从属任务;以及 调度所述从属任务用于由所述通用处理集群执行。
4.根据权利要求3所述的多线程系统,其中所述任务管理单元进一步配置为读取指向编码所述从属任务的存储在所述存储器中的从属任务元数据的指针。
5.根据权利要求4所述的多线程系统,其中指向所述从属任务元数据的所述指针包括在所述第一任务元数据中。
6.根据权利要求4所述的多线程系统,其中所述任务管理单元进一步配置为确定是否使能到所述从属任务元数据的纯硬件区的拷贝。
7.根据权利要求6所述的多线程系统,其中所述任务管理单元进一步配置为当使能到所述从属任务元数据的纯硬件区的所述拷贝时将所述从属任务元数据的第一区中的数据拷贝到所述从属任务元数据的所述纯硬件区。
8.根据权利要求4所述的多线程系统,其中所述任务管理单元进一步配置为在所述指针的所述读取之后将所述第一处理任务识别为已经完成。
9.根据权利要求3所述的多线程系统,其中所述从属任务的任务类型包括在所述第一任务元数据中。
10.根据权利要求3所述的多线程系统,其中编码所述从属任务的从属任务元数据指示所述从属任务指定第二从属任务。
全文摘要
本发明的一个实施例提出了用于当第一任务的执行完成时自动启动从属任务的技术。自动启动从属任务降低了从第一任务到从属任务的过渡期间所带来的延迟。将与从属任务相关联的信息编码为用于第一任务的元数据的一部分。当第一任务的执行完成时通知任务调度单元以及在不要求任何信号量的释放或取得的情况下启动从属任务。与从属任务相关联的信息包括使能标志和指向从属任务的指针。一旦启动从属任务,就将第一任务标记为完成以使得存储用于第一任务的元数据的存储器可以重新用来存储用于新任务的元数据。
文档编号G06F9/445GK103226481SQ201310032030
公开日2013年7月31日 申请日期2013年1月28日 优先权日2012年1月27日
发明者菲利普·亚历山大·夸德拉, 兰基·V·姗, 蒂莫西·约翰·珀塞尔, 格拉尔德·F·路易斯, 杰尔姆·F·小杜鲁克 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1