处理系统中动态生成的任务的信令、排序和执行的制作方法

文档序号:6384484阅读:434来源:国知局
专利名称:处理系统中动态生成的任务的信令、排序和执行的制作方法
技术领域
本发明总体上涉及计算任务的执行,并且更具体地,涉及处理系统中动态生成的任务的信令、排序和执行。
背景技术
常规上,将要在多处理器系统中处理的任务均接收自单个输入流。如果第一任务将会生成将要由第二任务所处理的数据,那么还从单个输入流接收第二任务,并且由中央处理单元(CPU)实施将第二任务插入单个输入流,该中央处理单元与多处理器系统是分开的。为了实施插入,必须告知CPU准备处理第二任务,并且为其提供存储第二任务的位置。第二任务的处理由于执行第一任务的多处理器系统和CPU之间所需的通信而造成的延迟而引发附加等待时间。相应地,本领域需要一种用于使能所生成的任务插入到多处理器系统的调度管线中而无需CPU的参与的系统和方法。

发明内容
用于使能所生成的处理任务插入到多处理器系统的调度管线中而无需CPU的参与的系统和方法。当正在执行的计算任务动态生成动态任务并且写存储器中队列的用于动态任务的数据存储于其中的条目时,生 成反射通知信号并且直接将其传输到多处理器系统的调度单元,而无需CPU参与。所传输的反射通知信号包括与在队列中存储数据的写请求相对应的信息。响应于其他事件在计算任务的执行期间生成附加信号并且其被直接传输到调度单元,所述其他事件例如开始动态任务的处理、使存储用于计算任务的数据的高速缓存条目无效,以及使能另一个计算任务的调度。用于通知任务管理器数据可用于处理的本发明的方法的各种实施例包括:生成传输到任务管理器的第一通知信号,其中通知信号包括第一偏移和第一 Λ值。在与第一处理任务相对应的队列中存储与第一偏移和第一 △值相关联的第一数据。生成第二通知信号并将其传输到任务管理器,其中通知信号包括第二偏移和第二 Λ值。在与第一处理任务相对应的队列中存储与第二偏移和第二 △值相关联的第二数据。接收所述第一通知信号和第二通知信号,并且任务管理器确定第一偏移和第一 △值是否能够与第二偏移和第二 Δ值合并,以生成经合并的偏移和经合并的△值。任务管理器调度用于处理集群阵列中的第一处理任务的第一数据和第二数据中的至少一个的处理。本发明的各种实施例包括用于通知任务管理器数据可用于处理的系统,其包括队列、存储器管理单元和任务管理器。队列对应于第一处理任务并且配置为存储包括第一数据和第二数据的数据;存储器管理单元配置为生成直接传输到任务管理器的第一通知信号,其中通知信号指定与第一数据相关联的第一偏移和第一 △值,以及生成直接传输到任务管理器的第二通知信号,其中通知信号指定与第二数据相关联的第二偏移和第二 Λ值。任务管理器配置为接收第一通知信号和第二通知信号,确定第一偏移和第一 Λ值是否能够与第二偏移和第二 △值合并,以生成经合并的偏移和经合并的△值,以及调度用于处理集群阵列中的第一处理任务的第一数据和第二数据中的至少一个的处理。此外,与将动态任务队列中的条目分配给生成用于动态任务的数据的线程的顺序相比,写动态任务队列的条目的顺序可以不同。因此,当由线程动态生成的数据写入队列时,跟踪已经被写的队列的有顺序的条目,并且当在队列的前面的条目的序列已经被写并且可以调度用于处理以开始(或继续)动态任务的执行时通知调度单元。分配条目给执行生成用于动态任务的数据的计算任务的线程与由不同的线程写条目的解耦允许生成数据的线程简单地写条目并随后退出或继续处理其他数据。因此,线程写队列不需要按照与线程接收条目的分配相同的顺序进行。但是,当条目的序列准备好被调度时,跟踪和通知调度单元允许尽快地处理数据。重要的是,做以下事情不需要与CPU通信:(a)当用于动态任务的数据准备好被处理时通知CPU,(b)使高速缓存条目无效,或(C)使能另一个计算任务的调度。因此,与要求(PU参与的系统相比较,为以下工作减小等待时间:(a)调度动态任务数据的处理,(b)无效高速缓存条目,和(c )使能另一个计算任务的调度。


为了详细地理解本发明的上述特征,对于以上简要概括的发明,可以参照实施例进行更为具体的描述,其中一些实施例示出于附图中。然而,应注意的是,附图中示出的只是本发明的代表性实施例,因此不应被认为是对本发明的范围的限制,本发明可以适用于其他同等有效的实施例。图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;图2是根据本发明一个实施例的、用于图1的计算机系统的并行处理子系统的框图;图3A是根据本发明一个实施例的、图2的任务/工作单元的框图;图3B是根据本发明一个实施例的、图2的通用处理集群(GPC)的框图;图3C是根据本发明一个实施例的、图3A的任务元数据(TMD)的内容的概念图;图3D示出根据本发明一个实施例的、用于当生成子任务时写入队列的方法的流程图;图4示出根据本发明一个实施例的、用于处理vspan反射通知信号的方法的流程图;图5是根据本发明一个实施例的、当vspan被合并时的图3C的队列的内容的概念图;图6示出根据本发明一个实施例的、用于合并vspan的方法的流程图;以及图7示出根据本发明一个实施例的、用于处理反射通知信号的方法。
具体实施例方式在下面的描述中,将阐述大量的特定细节以提供对本发明更深入的理解。然而,本技术领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他例子中,没有描述公知的特征以避免对本发明造成混淆。处理单元直接与任务管理单元通信而无需由CPU参与并且无需插入指令到入栈缓冲区中。当处理单元执行计算任务并动态生成子任务的时候,当用于子任务的数据可用于处理时处理单元通知任务管理单元。随后任务管理单元通过将子任务插入到任务列表中来调度子任务用于执行。处理单元和任务管理单元之间的直接通信最小化了生成子任务数据的时间和调度该子任务数据的处理之间引发的延迟。系统概述图1是示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU) 102和系统存储器104,两者经由可包括存储器桥105的互连路径通信。存储器桥105例如可以是北桥芯片,经由总线或其他通信路径106(例如,超传输链接)连接到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以及各种插卡(add-1n card) 120和121的其他部件之间提供了连接。其他部件(未明确示出)也可以连接到I/O桥107,包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片记录设备等。图1中所示的包括具体命名为通信路径106和113的各种通信路径可以使用任何合适的协议来实现,诸如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包括一个或多个并行处理单元(Pro)202,其每一个均耦合至本地并行处理(PP)存储器204。一般来讲,并行处理子系统包括U个PPU,其中US I。(本文中,相似对象的多个实体用标识该对象的参考数字并根据需要结合标识该实体的带括号的数字加以表示)。PPU202和并行处理存储器204可用一个或多个诸如可编程处理器、专用集成电路(ASIC)或存储器器件这类集成电路器件来实现,或者以任何其他在技术上可行的方式来实现。再次参照图1,在一些实施例中,并行处理子系统112中的一些或所有PPU 202是具有渲染管线的图形处理器,可以配置为实施与下述各项相关的各种任务:由图形数据生成像素数据,所述图形数据是由CPU 102和/或系统存储器104经由存储器桥105和第二通信路径113而供给的;与本地并行处理存储器204 (可以作为图形存储器加以使用,包括例如常规的帧缓冲区)交互,以存储和更新像素数据;将像素数据传递到显示设备110 ;等等。在一些实施例中,并行处理子系统112可包括作为图形处理器而操作的一个或多个PPU202以及供通用计算使用的一个或多个其他PPU 202。这些PTO可相同或不同,并且每个PPU均可具有其自己的专用的并行处理存储器器件或非专用并行处理存储器器件。并行处理子系统112中的一个或多个PPU 202可向显示设备110或并行处理子系统112中的每个PPU202输出数据,或者每个PPU 202均可向一个或多个显示设备110输出数据。操作中,CPU 10 2是计算机系统100的主处理器,控制并协调其他系统部件的操作。特别是,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102将针对每个PPU 202的命令流写入到数据结构(图1和图2中均未明确示出)中,所述数据结构可位于系统存储器104、并行处理存储器204或者CPU 102和PPU 202均可访问的另一个存储位置中。对入栈缓冲区(pushbuffer)写入指向每个数据结构的指针来开始数据结构中命令流的处理。PPU 202从一个或多个入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。可经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级,以控制不同入栈缓冲区的调度。现在返回参考图2,每个PPU 202均包括I/O (输入/输出)单元205,该I/O单元205经由通信路径113与计算机系统100的其余部分通信,其连接到存储器桥105 (或者,在一个替代实施例中,直接连接到CPU 102)。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112实现为可以被插入到计算机系统100的扩展槽中的插卡。在另一些实施例中,PPU 202可以集成在具有诸如存储器桥105或I/O桥107这类总线桥的单个芯片上。在又一些实施例中,PI3U 202中的一些或全部元件可集成在具有CPU 102的单个芯片上。在一个实施例中,通信路径113是PCI Express链接,其中给每个PPU202分配有专用通道(lane),如本领域已知的。也可使用其他通信路径。I/O单元205生成数据包(或其他信号)用于在通信路径113上传输,并且也从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引向PPU 202的适当部件。例如,可将与处理任务相关的命令引向主机接口 206,而可将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引向存储器交叉开关(crossbar)单元210。主机接口 206对每个入栈缓冲区进行读取并将存储在入栈缓冲区中的命令流输出到前端212。每个PPU 202均有利地实现高度并行的处理架构。如图中详细所示,PPU 202(0)包括处理集群阵列230,该阵列包括C个通用处理集群(GPC) 208,其中C彡I。每个GPC208均能够并发执行大量(例如,数百个或数千个)线程,其中每个线程均为程序的实例(instance)。在各种应用中,可分配不同的GPC 208,用于处理不同类型的程序或用于实施不同类型的计算。GPC 208的分配可依据每个类型的程序或计算产生的工作量而变化。GPC 208从在任务/工作单元207内的工作分布单元接收将要执行的处理任务。工作分布单元接收指向被编码为任务元数据(TMD)并存储在存储器中的计算处理任务的指针(任务指针)。指向TMD的任务指针包括在命令流中,所述命令流被存储为入栈缓冲区并由前端单元212从主机接口 206接收。可编码为TMD的处理任务包括将要处理的数据的索引以及定义将如何处理数据(例如,将执行什么程序)的命令和状态参数。任务/工作单元207从前端212接收任务并保证GPC 208在由每一个TMD所指定的处理开始前被配置为有效状态。可为每个用于调度处理任务的执行的TMD指定优先级。存储器接口 214包括D个分区单元215,这些分区单元每一个均直接耦合至并行处理存储器204的一部分,其中D彡I。如图所示,分区单元215的数目通常等于DRAM 220的数目。在另一些实施例中,分区单元215的数目可以不等于存储器器件的数目。本领域的普通技术人员将认识到,DRAM 220可用其他合适的存储器件代替,并且可以采用一般常规设计。因此省略详细描述。可跨DRAM 220来存储诸如帧缓冲区或纹理映射这样的渲染对象,允许分区单元215并行地写入每个渲染对象的各部分,以高效地使用并行处理存储器204的可用带宽。GPC 208中的任何一个都可处理将被写入并行处理存储器204内任何DRAM 220的数据。交叉开关单元210配置为将每个GPC 208的输出路由(route)至任何分区单元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之间分割业务(traffic)流。再者,GPC 208可以编程为执行与种类繁多的应用相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,运用物理定律确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分着色、顶点着色、几何着色和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,对数据进行处理,并将结果数据写回到系统存储器104和/或本地并行处理存储器204,在这里这类数据可以由其他系统部件访问,包括CPU 102或另一并行处理子系统112。PPU 202可设置具有任何容量(amount)的本地并行处理存储器204,包括不设置本地存储器,并且可以任何组合方式来使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将会提供极少的甚至不提供专用图形(并行处理)存储器,并且PPU 202将以排他的方式或者几乎以排他的方式使用系统存储器。在UMA实施例中,PPU 202可集成到桥式芯片或处理器芯片中,或者可被提供为具有高速链接 (例如,PCI EXPRESS)的分立芯片,所述高速链接经由桥式芯片或其他通信手段将PPU 202连接到系统存储器。
如上所述,并行处理子系统112中可以包括有任何数目的PPU 202。例如,可以在单个插卡上提供多个PPU 202,或者多个插卡可以连接到通信路径113,或者PPU 202中的一个或多个可以集成到桥式芯片中。多PPU系统中的PPU 202可彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等。在存在有多个PPU202的情况下,可以并行地操作这些PI3U从而以高于单个PPU 202可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来加以实现,包括桌上型电脑、膝上型电脑或者手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等。多个并发任务调度可在GPC 208上并发执行多个处理任务,并且处理任务可在执行期间生成一个或多个动态处理任务。任务/工作单元207接收任务并动态调度处理任务和动态处理任务用于由GPC 208执行。图3A是根据本发明的一个实施例的、图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织将要调度的任务。对于每个优先级级别,任务管理单元300存储指向与在调度器表321中的任务相对应的TMD 322的任务指针的列表,其中可采用链接列表来实现列表。TMD 322可存储在PP存储器204或系统存储器104中。任务管理单元300接受任务和将任务存储在调度器表321中的速率与任务管理单元300调度任务用于执行的速率解耦。因此,任务管理单元300可以在调度任务之前收集若干个任务。然后,所收集的任务可以基于优先级信息或使用诸如轮叫调度的其他技术来调度。工作分布单元340包括具有槽的任务表345,所述槽可每个被TMD322占用,用于正在执行的任务。当任务表345中存在空闲槽时,任务管理单元300可调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务停止,并且如果该任务的执行未完成,那么指向将指向该任务的指针添加到将要被调度的任务指针的列表,使得稍后恢复该任务的执行。当在任务的执行期间生成动态处理任务时,将指向动态任务的指针添加到将要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD 322来生成动态任务。与由任务/工作单元207从前端212处所接收的任务不同,动态任务是从处理集群阵列230处接收的。动态任务不插入入栈缓冲区中或者传输到前端。当生成动态任务或者将用于动态任务的数据存储在存储器中时,不通知CPU 102。通过入栈缓冲区所提供的任务和动态任务之间的另一个不同之处在于,通过入栈缓冲区所提供的任务由应用程序定义,而动态任务在任务执行期间动态生成。任务管理单元300还包括调度器表421、存储一个或多个TMD 322的TMD高速缓存305。每个TMD 322可以是通常存储在PP存储器204中的大的结构,例如256字节或更大。由于大尺寸,依据带宽来访问TMD 322是昂贵的。因此,TMD高速缓存305仅存储任务管理单元300所需的TMD322的一部分(相对小)用于调度。当调度任务时,即传送至工作分配单元340时,可以从PP存储器204取得TMD 322的其余部分。在软件控制下写TMD 322,并且当计算任务完成执行时,可以循环利用与所完成的计算任务相关联的TMD 322以存储用于不同计算任务的信息。因为TMD 322可以存储在TMD高速缓存305中,应该使存储用于完成的计算任务的信息的条目在重新使用之前从TMD高速缓存305无效。因为在由于潜在进行中的高速缓存线驱逐而将存储在TMD高速缓存305中的信息写回到TMD 322和将用于新任务的信息写入TMD 322之间存在竞争条件,所以无效操作是复杂的。特别是,将用于新任务的信息写入TMD322并且随后将TMD 322输出至前端212作为入栈缓冲区的一部分。因此,在设备驱动程序103开始写新信息之前,写新任务的设备驱动程序103不会接收到TMD高速缓存305已经无效的确认。因此,设备驱动程序103不能够对将用于新任务的信息写入TMD 322进行延迟,直到完成任何的潜在写回。因为存储在TMD高速缓存305中的驱逐信息所引起的写回可以为新任务重写存储在TMD 322中的信息,所以每个TMD 322的“纯硬件”部分为仅由任务管理单元300所访问而留出。TMD 322的其余部分可以由软件或者任务管理单元300访问。可以由设备驱动程序103访问的TMD 322的部分一般经由设备驱动程序103由应用程序填充以开始任务。随后在任务的调度和执行期间,TMD 322由任务管理单元300和GPC 208中的其他处理单元访问。当用于新计算任务的信息写入TMD 322时,启动TMD 322的命令可以在首次将TMD 322加载到TMD高速缓存305时指定是否复制位到TMD 322的纯硬件部分中。这确保TMD 322将正确地仅存储用于新计算任务的信息,这是因为用于完成的计算任务的任何信息仅存储在TMD322的纯硬件部分。处理集群阵列230生成各种不同的信号来实施不同的操作。在一些实施例中,所生成的信号转换为传输到任务/工作单元207的反射通知信号以实施不同的操作,而无需CPU 102参与。当存储器管理单元(MMU,图3B中示出为MMU 328)接收到针对TMD 322队列的写请求时,生成反射通知信号。配置MMU的页表条目使得将数据存储在TMD 322队列的一个或多个条目中的写请求以反射通知信号的形式反射到任务管理单元300。写请求的一部分编码所生成的反射通知信号的类型,例如,无效、调度、复制和vspan。在其他实施例中,一个或多个特定指令用于直接传输通知信号到任务/工作单元207。特别是,特定指令可以用于生成无效、调度和复制通知信号,这是因为这些通知信号不指定由vspan通知信号所指定的附加信息(偏移、△值)。在处理集群阵列2 30完成任务的执行之后,生成第一类型的反射通知信号。第一类型的反射通知信号是无效反射通知信号,其用于使TMD高速缓存305中的条目无效。当执行任务的最后的线程退出由TMD 322所指定的程序时,也就是当TMD 322的执行完成时,可以生成无效反射通知信号。可替代地,可以在最后的线程退出之后但在重新使用TMD高速缓存305中的条目之前,生成无效反射通知信号。当处理集群阵列230使能编码为不同的TMD 322的计算任务的调度时,生成第二类型的反射通知信号。第二类型的反射通知信号是调度反射通知信号。当TMD 322首次用来控制TMD 322的纯硬件部分的复制时,由处理集群阵列230生成第三类型的反射通知信号。第三类型的反射通知信号是复制反射通知信号。除了指定反射通知信号的类型外(无效、调度、复制),每个不同的反射通知信号还指定与生成各自反射通知信号的TMD322相对应的标识符。反射通知信号的类型可以通过与无效、调度和复制操作相关联的特定的写地址指示。可以定义反射地址的范围,以致针对特定写地址的写请求使得生成反射通知信号。在一个实施例中,因为使得生成无效反射通知信号、调度反射通知信号和复制反射通知信号的写请求实际上不需要数据,所以写请求不指定数据。
任务管理单元300还包括vspan单元312,其配置为对动态生成并写入用于动态任务的TMD 322的队列的数据进行合并。队列的条目可以按一个顺序来分配而且可以按不同的顺序来填充。当由处理集群阵列230将数据存储在动态TMD 322中时,生成是vpsan反射通知信号的反射通知信号并且将其输出到任务管理单元300,指示已经被写的队列的条目。等待将写入队列的顺序的条目中的数据与等待队列条目解耦,允许生成数据的TMD 322简单地写条目并且随后退出或者继续处理其他数据。由针对队列的写请求所生成的vspan反射通知信号包括对应于该写请求的信息。vspan反射通知信号指定所写的数据的长度和起始条目。对应于写请求的vspan反射通知信号不包括写到队列的数据。vspan指示动态TMD 322的队列中的有效的,即已经写入数据的,条目的集合。在TMD 322的执行期间,写到动态TMD 322的数据可以由相同的动态TMD322、不同的TMD 322或者不是动态生成的TMD 322来写。分配队列条目给线程,并且之后每个线程将数据写入分配给各自线程的条目。因为每个线程独立执行,所以可以不按照分配条目的顺序来向条目写数据。换言之,可以“不按顺序”写队列条目。vspan单元312跟踪由vspan反射通知信号提供的vspan,并且当可能时合并相邻的vspan到队列条目的序列中。然后,当在用于TMD 322的队列的前面的队列条目的序列可用于处理时,vspan单元312通知任务管理单元300。当vspan单元312通知任务管理单元300队列条目的序列可用于处理时,将指向队列的前面的指针更新为指向第一未写条目。因为条目的 写与队列条目的序列可用于处理的通知是解耦的,所以每个线程可以对分配给各自线程的条目进行写,并且可以退出而无需等待队列中的其他条目被写、由线程所写的队列条目被读,或由线程所写的队列条目的处理被调度。任务处理概述图3B是根据本发明一个实施例的、图2的一个PPU 202内的GPC 208的框图。每个GPC 208均可配置为并行地执行大量线程,其中术语“线程”是指对特定的一组输入数据执行的特定程序的实例。在一些实施例中,使用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立指令单元。在另一些实施例中,采用单指令多线程(SMT)技术,使用配置为发送指令到每一个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。不同于其中所有处理引擎一般都执行相同指令的SMD执行机制,SIMT执行允许不同的线程更容易跟随(follow)通过给定线程程序的发散的执行路径。本领域的普通技术人员将理解的是,SMD处理机制代表SMT处理机制的功能子集。经由管线管理器305来有利地控制GPC 208的操作,所述管线管理器305将处理任务分布到流多处理器(SM) 310。管线管理器305也可配置为通过为由SM 310输出的经处理的数据指定目的地来控制工作分布交叉开关330。在一个实施例中,每个GPC 208均包括M个SM 310,其中M彡I,每个SM 310均配置为处理一个或多个线程组。而且,每个SM 310还最好包括同样的一组可被管线化的功能执行单元(例如,执行单元和加载-存储单元等),从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持各种操作,包括整数和浮点算法(例如,加法和乘法)、比较操作、布尔操作(AND、OR、X0R)、位移以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(be leveraged to)实施不同操作。传输到特定GPC 208的一系列指令构成线程,如本文前面所定义的,并且跨SM310内并行处理引擎(未示出)的一定数量并发执行的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被指派给SM 310内不同的处理引擎。线程组可包括比SM 310内处理引擎的数量少的线程,在此情况下,在正在处理该线程组的周期内,一些处理引擎将处于闲置状态。线程组也可包括比SM 310内处理引擎的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SM310均可以并发地支持多达G个线程组,结果是在任意给定时间在GPC 208中可以执行多达G*M个线程组。另外,在SM 310内,多个相关的线程组可同时处于激活状态(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于mXk,其中k是线程组中并发执行的线程的数量,并且一般是SM 310内并行处理引擎的数量的整数倍,m是SM 310内同时处于激活状态的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。每个SM 310均含有一级(LI)高速缓存(未示出),或使用在SM 310之外的相应LI高速缓存中用以实施加载和存储操作的空间。每个SM 310也均有权访问二级(L2)高速缓存,所述二级高速缓存在所有GPC 208之间共享并且可用于在线程之间转移数据。最后,SM310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器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)集合以及可选地包括高速缓存线索引,该PTE集合用于将虚拟地址映射到像素块(tile)的物理地址。MMU 328可包括地址转译后备缓冲区(translation lookasidebuffer, TLB)或高速缓存,其可驻留在多处理器SM 310或LI高速缓存或GPC 208内。处理物理地址以分布表面数据访问位置,从而允许在图2所示的分区单元215之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。在图形和计算应用中,GPC 208可配置为使得每个SM 310均耦合至纹理单元315,用于实施纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理LI高速缓存(未示出)读取的,或者在一些实施例中是从SM 310内的LI高速缓存读取的,并且根据需要从L2高速缓存、并行处理存储器204或系统存储器104所获取。每个SM 310均将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一 GPC 208用于进一步处理,或者将处理后的任务存储在在所有GPC 208之间共享的L2高速缓存、或经由交叉开关单元210存储在并行处理存储器204或系统存储器104中。preROP (pre-rasteroperations,预光栅操作)325配置为从SM 310接收数据,将数据引向分区单元215内的ROP单元,并实施对色彩混合的优化、组织像素色彩数据以及实施地址转译。应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包括任何数量的处理单元,例如,SM 310或纹理单元315、preR0P 325。此外,如图2所示,但PPU 202可包括任何数量的GPC 208,这些GPC 208最好在功能上彼此相似,以使执行行为不依赖于接收特定处理任务的GPC 208。此外,每个GPC 208最好使用单独的且各异的处理单元、LI高速缓存等,相对于其他GPC 208独立地操作,来执行用于一个或多个应用程序的任务。本领域的普通技术人员应该理解,图1、2、3A和3B中描述的架构不以任何方式来限制本发明的范围,并且本文教导的技术可以在任意经适当配置的处理单元上实现,包括但不限于一个或多个CPU、一个或多个多内核CPU、一个或多个PPU 202、一个或多个GPC208、一个或多个图形或专用处理单元等等,而不脱离本发明的范围。在本发明的实施例中,所期望的是,使用PPU 202或计算系统的其他处理器采用线程阵列来执行通用计算。给线程阵列中的每个线程都指派唯一的线程标识符(“threadID”),所述线程标识符在该线程执行期间可由该线程访问。线程ID可被定义为一维或多维数值,其控制线程处理行为的各个方面。例如,线程ID可用于确定线程将处理哪部分输入数据集和/或确定线程将产生或写入哪部分输出数据集。每线程的指令序列可包括至少一个指令,所述指令定义了代表线程与线程阵列中一个或多个其他线程之间的协作行为。例如,每线程的指令序列均可包括以下指令:在序列中的特定点将对于代表线程的操作执行挂起直到一个或多个其他线程到达该特定点时的指令;指示代表线程在一个或多个其他线程有权访问的共享存储器中存储数据的指令;指示代表线程自动地读取和更新存储在一个或多个其他线程基于其线程ID有权访问的共享存储器中的数据的指令等等。CTA程序也可包括计算从其中读取数据的共享存储器中的地址的指令,该地址为线程ID的函数。通过定义适合的函数并提供同步技术,数据可以以可预测的方式由CTA的一个线程写入共享存储器中给定的位置,并且由同一个CTA的不同线程从该位置读取。因此,可以支持以任意所希望的方式将数据在线程中共享,并且CTA中的任意线程都可以和同一个CTA中的任意其他线程共享数据。如果在CTA的线程中间共享有数据,则数据共享的程度由CTA程序确定;因此,应该理解在使用CTA的特定应用中,CTA的线程实际上可能相互共享数据或者可能不相互共享数据,这取决于该CTA程序,并且术语“CTA”和“线程阵列”在本文中同义使用。任务调度和管理返回参考图3A,任务管理单元300管理待调度的计算任务,其作为存储在调度表321中的TMD组的阵列。TMD组是具有相同调度优先级的计算任务的集合。TMD组的数目或优先级级别可以是一个或多个。在每个TMD组中,各自的优先级级别的计算任务存储在列表中,其可以采用链接列表来实现,并且下文中假设是链接列表。在链接列表中的每个TMD存储指向各自链接列表中的下一个TMD的指针。为每个TMD存储用于链接列表的头指针和尾指针。没有任务的TMD组的头指针与尾指针相等,并且空位设置为TRUE。当从主机接口 206接收计算任务时,任务管理单元300将计算任务插入TMD组。更具体地,将指向与计算任务相对应的TMD的任务指针添加到用于该组的链接列表的尾部,除非设置了特定的TMD位使得将任务添加到链接列表的头部。虽然TMD组内的所有任务都具有相同的调度优先级级别,TMD组链接列表的头部是由任务管理单元300所选择并调度用于执行的第一计算任务。因而,与在相同优先级级别的其他计算任务相比,在链接列表的头部的计算任务具有相对较高的优先级。类似地,链接列表中的每个连续的计算任务处于与相对于在该链接列表中的在前面的计算任务较低优先级相同的优先级级别。因此,任务管理单元300能够按照相对于彼此的输入顺序来调度TMD组内的计算任务(假设一个都没有被特定标记为添加到TMD组的头部)。因为TMD组被指定为TMD结构的一部分,所以当正在执行计算任务时不可以改变计算任务的TMD组。还可以从图2中所示的PPU 202的处理集群阵列230接收计算任务。特别是,可以将在TMD 322的执行期间所生成的数据写到TMD 322的队列,并且响应于针对TMD 322的队列的每个写请求,由MMU 328生成反射通知信号。任务管理单元300可实施选择以使用若干不同的技术来调度计算任务:循环、优先级或部分优先级调度。对于每种不同的调度技术,当选择计算任务来调度时,将所选择的计算任务从所选择的计算任务存储在其中的组中移除。不论什么调度技术,通过选择合适组的链接列表中的第一表项,任务管理单元300能够快速选择计算任务。因此,可以按照与任务管理单元300从主机接口 206接收任务指针的顺序不同的顺序来调度和/或执行计算任务。图3C是根据本发明一个实施例的、可以存储在PP存储器204中的图3A的TMD 322的内容的概念图。TMD 322配置为存储初始化参数305、调度参数306、执行参数365、CTA状态370、纯硬件域372和队列375。纯硬件域372存储TMD 322的纯硬件部分,其包括一个或多个纯硬件参数。所有TMD 322共用的执行状态不包括在每个TMD 322中。因为TMD322是存储在PP存储器204中的数据结构,所以运行在CPU 102或PPU 112上的应用程序可以在存储器中创建TMD 322结构,并且随后通过发送用于TMD 322的任务指针至任务/工作单元207来提交TMD 322用于执行。初始化参数355用于当TMD 322启动时配置GPC 208,并且可以包括队列375的大小和起始程序地址。注意队列375可以和TMD 322分开存储在存储器中,在这种情况下,TMD 322包括指向代替实际的队列375的队列375的指针(队列指针)。初始化参数355还可以包括指示当TMD 322启动时,例如纹理头高速缓存、纹理采样器高速缓存、纹理数据高速缓存、数据高速缓存、常数高速缓存等等的各种高速缓存是否无效的位。初始化参数355中还可以包括指示纹理采样器是否与纹理头一对一链接的位。初始化参数355还可以包括线程中CTA的维度、TMD版本号、指令集版本号、根据CTA宽度、高度和深度的栅格的维度、存储体映射参数、应用程序所看到的调用堆栈的深度和用于TMD的调用返回堆栈的大小。初始化参数355可以包括常数缓冲区的大小、常数缓冲区的地址、指示常数缓冲区绑定是有效的位,以及初始化参数355中可以存储指示在TMD启动之前来自常数缓冲区的数据在高速缓存中是无效的位。最后,初始化参数355可以包括与CTA的每个线程均可用的存储器的容量有关的若干个参数。当需要多个CTA的TMD 322准备好被调度用于执行时,其中每个CTA均要求大容量的共享存储器,任务/工作单元207可以限制(即,节流(throttle))并发执行的CTA的数目,使得CTA不会尝试消耗比可用于由TMD 322访问的存储器更多的存储器。调度参数360控制任务/工作单元207如何调度TMD 322用于执行。调度参数360可以包括指示TMD 322是队列TMD还是栅格TMD的位。如果TMD 322是栅格TMD,那么不使用在TMD 322启动后允许附加数据排队的TMD 322的队列特征,并且TMD 322的执行使得固定数目的CTA被启动并执行以处理存储在队列375中的固定数量的数据。CTA的数目被指定为栅格宽度、高度和深度的乘积。由队列指针来代替队列375,所述队列指针指向将由执行由TMD 322所指定的程序的CTA来处理的数据。当使用调度类型的反射通知信号来创建TMD时或者创建栅格TMD之后,设置(使能)用于栅格TMD的调度标记。如果TMD 322是队列TMD,则使用TMD 322的队列特征,这意味着数据存储在队列375中,作为队列条目。队列条目被输入数据到TMD 322的CTA。队列条目还可以存储用于动态任务的数据,所述动态任务由另一个TMD 322在线程的执行期间生成,从而提供嵌套的并行性。一般来说,线程或包括线程的CTA的执行被挂起,直到完成动态任务的执行。队列375可以实现为循环队列,以使得数据的总数量不限于队列375的大小。如上所述,队列375可以和TMD 322分开存储,并且TMD 322可以存储指向队列375的队列指针。有利地,在执行表示动态任务的TMD 322的同时,可以将用于动态任务的队列条目写入队列375。当使用调度类型的反射通知信号来创建队列TMD时或者创建队列TMD之后,设置(使能)用于队列TMD的调度标记。针对队列TMD执行可变数目的CTA,其中CTA的数目取决于写入TMD队列的队列375的条目的数目。用于队列TMD的调度参数360还包括由每个CTA所处理的队列375的条目的数目。当添加N个条目到队列375时,针对TMD 322启动一个CTA。任务/工作单元207可以构建处理的有向图,其中每个处理均是具有队列的TMD 322。可以基于用于每个TMD 322的N的值和已经写入队列375中的条目的数目来确定执行用于每个TMD 322的CTA的数目。替代实施例可以具有用于栅格TMD和队列TMD的不同结构,或仅实现栅格TMD或队列TMD。TMD 322可以包括指向当TMD完成时自动启动的独立TMD的任务指针。可由TMD322执行信号量(semaphore)以确保满足不同的TMD 322和CPU 102之间的独立。例如,第一 TMD 322的执行可取决于第二 TMD完成,因此第二 TMD生成信号量释放,并且在成功获得对应的信号量之后第一 TMD执行。在某些实施例中,在主机接口 206或前端212中实施信号量获得。用于TMD 322的执行参数365可以存储多个信号量版本(release),包括存储器屏障(barrier)的类型、存储器中信号量数据结构的地址、信号量数据结构的大小、有效负载以及归约运算(reduction operation)的使能、类型和格式。信号量的数据结构可以存储在执行参数365中或者存储在TMD 322的外面。TMD 322的调度参数360可以包括当TMD 322被创建时所设置的位,其使得当由任务管理单元300首次加载TMD 322时,TMD域被复制到纯硬件域372。调度参数360还可以包括TMD组ID、指示将TMD 322添加到链接列表的哪里(头部或尾部)的位以及指向TMD组中的下一个TMD322的指针。调度参数360还可以包括启用/禁用GPC 208内的特定流多处理器的掩码(mask)。执行参数365还可以包括执行用于TMD 322的程序的起始地址、当TMD 322的执行完成时被实施的存储器屏障操作的类型、指示对于TMD322是否每次仅执行单个CTA (串行)的串行执行标记和控制任务/工作单元207是否可以基于指定用于TMD 322的存储器限制来限制并发运行的CTA的数目的节流使能标记。
当处理被抢占,TMD 322的处理可以在指令边界或CTA边界处停止,并且将处理将会从该处恢复的CTA的标识符存储在CTA状态370中。在抢占之后恢复TMD 322的执行所需要的状态信息可以存储在CTA状态370中,或者在PP存储器204中的单独的区域中,或者在系统存储器104中。CTA状态370还存储指向队列375的条目的数据指针和计数器溢出标记,该计数器溢出标记指示每个数据指针增量均超过队列375的末尾并且需要卷绕回到队列375的开始处的时间。调度标记以及一个或多个数据指针的纯硬件版本可以存储在纯硬件域372中。图3D示出根据本发明一个实施例的、用于写入队列375的方法380的流程图。虽然结合图1、2、3A和3B的系统来描述方法步骤,本领域技术人员应该理解,配置为按任何顺序实施该方法步骤的任何系统均在本发明范围内。由TMD 322所编码的“生产者(piOducer)”计算任务分配队列375中的空间并且随后写数据到所分配的空间。“消费者”计算任务最终读取由“生产者”计算任务所写的数据。单个计算任务可以生成一个或多个动态任务和/或写数据到队列375。可以将数据写入队列375,用于所生成的动态任务或者用于现存的计算或者动态任务。在步骤382,由任务/工作单元207所启动的一个或多个CTA来在处理集群阵列230中执行由TMD 322所编码的计算任务。在步骤385,一个或多个线程在队列375中保留空间以存储将要由动态任务读取的数据。按照处理分配请求的顺序使用原子操作来分配队列375中的条目给线程,该线程执行生成用于动态任务的数据的任务。使用原子操作使得只分配队列中特定的条目给一个线程。换言之,使得当同时接收到分配请求时,线程中没有条目被分配给两个或更多个线程。如前面所述,线程不需要按照分配条目的顺序来在条目中存储数据。因此,当接收每个vspan反射通知信号时,vspan单元312尽可能合并队列375中的多个vspan到更大的连续的vspan中。当队列的条目存储数据可供调度用于处理时,vspan单元312通知任务管理单元300。在步骤386,分配了队列375中的条目的一个或多个线程输出写请求以在条目中存储数据。在步骤388,针对每个写请求生成vspan反射通知信号,并且将vspan反射通知信号传输至vspan单元312。在步骤390,执行计算任务的一个或多个线程确定是否将会生成将要要求队列中的附加空间的任何新的动态任务,或者是否已经生成的动态任务将需要队列375中的附加条目,并且如果是,那么一个或多个线程返回步骤385。否则,在步骤395,执行TMD 322的最后的线程退出,并且由TMD 322所编码的计算任务的执行完成。图4不出根据本发明一个实施例的、用于处理vspan反射通知信号的方法400的流程图。虽然结合图1、2、3A和3B的系统来描述方法步骤,本领域技术人员应该理解,配置为按任何顺序实施该方法步骤的任何系统均在本发明范围内。在步骤405,任务/工作单元207从处理集群阵列230接收vspan反射通知信号。在步骤410, vspan单元312确定是否指定增量模式用于TMD322,并且,如果是,那么vspan单元312直接进行到步骤425以确定TMD322是否是可调度的。当可以按照任何顺序处理vspan反射写通知时,使用增量模式。因此,vspan单元312不实施vspan的合并。在一个实施例中,可以使用从处理集群阵列230传输至任务管理单元300的通知信号来启用或者禁用增量模式。如果在步骤410,vspan单元312确定没有指定增量模式用于TMD322,那么在步骤415, vspan单元312尝试将由vspan反射通知信号所指定的新的vspan与一个或多个其他vspan合并。结合图5和6进一步详细描述合并处理。在步骤420,vspan单元312确定由内部置入指针所指向的队列375的条目是否已经被写,并且如果不是,那么在步骤440,vspan反射通知信号的处理完成。内部置入指针指示已经被写入但仍然没有提供给任务管理单元300用于调度的队列375的第一条目。否贝U,在步骤425,vspan单元312确定队列375的至少一个条目的序列可调度用于执行。可使用调度标记配置TMD 322为只有当调度标记被设置时其可调度,而不论由内部置入指针所指向的队列375的条目是否已经被写入或增量模式是否用于TMD322。当由任务管理单元300从处理集群阵列230接收调度类型的反射通知信号时,调度标记被设置。如果在步骤425, vspan单元312确定队列375不可调度,那么在步骤440, vspan反射通知信号的处理完成。否则,在步骤430,任务管理单元300被告知队列375的条目被写入,并且任务管理单元300调度TMD 322用于由一个或多个CTA来处理。在步骤435,工作分布单元340启动一个或多个CTA以执行TMD 322。以这种方式,按照与由一个或多个并发执行的线程写队列375的数据序列的顺序相同的分配顺序,发起队列375中的数据的处理。对用于处理任务的调度的任务数据的写进行跟踪图5是根据本发明一个实施例的、当vspan被合并时的图3C的队列375的内容的概念图。如前面所解释,写在队列375中编码的处理任务的数据与队列375中的条目的分配是解耦的。外部置入指针545指向将要被分配的队列375中的下一个可用条目,并且内部置入指针540指向已经被分配但是仍然未被写的队列375中的最旧的条目。当在由内部置入指针540所指向的条目中写数据时,内部置入指针540向外部置入指针545前进,并且vspan单元312指示数据已经被调度用于处理。因为不需要按照分配条目的顺序来写条目,所以在内部置入指针540和外部置入指针545之间可能存在一个或多个已经被写入的条目(除了由内部置入指针540所指向的条目以外)。外部获取指针530指向队列375的最旧的条目,其存储已经指派给CTA用于处理的数据,即,将处理数据的CTA已经启动但该CTA仍然还未读数据。内部获取指针535指向队列375的最新条目,其已经指派给CTA用于处理。已经写入队列375但仍然未指派给CTA用于处理的数据存储在内部获取指针535和内部置入指针540之间的条目中。已经指派给CTA用于处理但未读取的数据存储在外部获取指针530和内部获取指针535之间。四个vspan:vspan 501、502、503和504,每个均与队列375中的部分条目500相关联。Vspan 501-504是当与每个单独的vspan相关联的条目500的条目被写入时所生成的vspan反射通知信号。每个vspan由表示队列375中的起始条目位置的偏移和指示写请求所写入的队列375中的条目的数目的Λ (delta)值来表示,其vspan反射通知信号为该写请求而生成。在一个实施例中,Λ值等于末端值,S卩:Λ值=偏移+所写入的条目的数目。当vspan反射通知信号被接收时,vspan单元312尝试将新的vspan与现存的vspan合并。基于起始条目位置和vspan的△值来在链接列表中存储现存的vspan,使得vspan的顺序与队列375的条目被分配的顺序相同以用于存储数据。

当新的vspan不能与存储在链接列表中的现存的vspan合并时,从未使用的vspan存储器块的池中分配存储新的vspan所需要的存储器。在所有队列TMD 322之间共享该池。存储和跟踪vspan的单独的链接列表用于每个队列TMD 322。当新的vspan与现存的vspan合并时,更新现存的vspan的Δ值和/或偏移值。当新的和现存的vspan合并时,存储用于TMD 322的链接列表中不再需要的现存vspan的存储器块被释放至共享池。在与vspan 501,503和504相关联的数据被写入之前,通过第一写请求写入与vspan 502相关联的数据。与vspan 502相关联的数据填充条目512,该条目512是队列375的三个条目。用于vspan 502的偏移和Δ分别为2和3,并且从共享池分配vspan存储器块以存储vspan 502。响应于第一写请求生成vspan 502并将其包括在第一 vspan反射通知信号中。其次,通过第二写请求写入与vspan 504相关联的数据,填充条目514,该条目514是队列375的三个以上的条目。响应于第二写请求,生成vspan504并将其包括在第二 vspan反射通知信号中。用于vspan 504的偏移和Δ分别为7和3。因为与vspan 503相关联的数据仍然未写入,所以不可以合并vspan 502和vspan 504,因此从共享池分配附加的vspan存储器块以存储vspan 504。第三,通过第三写请求写入与vspan 501相关联的数据,填充条目511,该条目511是队列375的前两个条目。响应于第三写请求生成vspan 501并将其包括在第三vspan反射通知信号中。用于vspan 501的偏移和Δ分别为O和2。Vspan 501可以和vspan 502合并,因此用于vspan 502的Λ从3变为5,并且偏移变为O。内部置入指针504提前以指向未写vspan 503的第一条目。此时,可调度由TMD 322所编码的计算任务以运行用于条目511和512。当内部置入指针540提前时,释放存储vspan 502的vspan存储器块到共享池。最后,通过第四写请求写入与vspan 503相关联的数据,填充条目513,该条目513是队列375的两个以上的条目。响应于第四写请求生成vspan503并将其包括在第四vspan反射通知信号中。用于vspan 503的偏移和Δ分别为5和2。Vspan 503与vspan 504合并,因此用于vspan 504的Λ从3变为5,并且偏移变为5。内部置入指针504提前以指向vspan 504之后的第一条目。此时,可调度由TMD 322所编码的计算任务以运行用于条目513和514。当内部置入指针540提前时,释放存储vspan 504的vspan存储器块到共享池。图6示出根据本发明一个实施例的、处理vspan反射通知信号和合并vspan的方法600的流程图。虽然结合图1、2、3A和3B的系统来描述方法步骤,本领域技术人员应该理解,配置为按任何顺序实施本方法步骤的任何系统均在本发明范围内。在步骤605,当数据被写入队列375的一个或多个条目时,vspan单元312接收vspan反射通知信号。在步骤610, vspan单元312确定在用于TMD322的链接列表中由vspan反射通知信号所指定的vspan是否在两个vspan之间并且可以和两个vspan合并,并且如果是,那么在步骤625,在链接列表中vspan单元312将新的vspan和两个vspan合并。在步骤630,在进行步骤632之前,vspan单元312返回一个vspan到共享池。如果在步骤610, vspan单元312确定在用于TMD 322的链接列表中由vspan反射通知信号所指定的vspan不可以和两个vspan合并,那么vspan单元312确定在用于TMD322的链接列表中由vspan反射通知信号所指定的vspan是否可以和一个vspan合并,并且如果可以,那么在步骤620, vspan单元312将最新写入的vspan和一个vspan合并,并且进行到步骤632。否则,在步骤618, vspan单元312从共享池分配vspan以存储新的vspan,并且插入所分配的vspan到链接列表中,并进行到步骤632。在步骤632,vspan单元312确定内部置入指针540是否可以提前,并且如果不可以,那么在步骤640, vspan反射通知信号的处理完成。否则,在步骤635, vspan单元312使内部置入指针540提前并且返回在链接列表头部的vspan到共享池。在步骤640, vspan反射通知信号的处理完成。图7示出根据本发明一个实施例的、用于对不是vspan反射通知信号的反射通知信号进行处理的方法的流程图。虽然结合图1、2、3A、3B和3C的系统来描述方法步骤,本领域技术人员应该理解,配置为按任何顺序实施本方法步骤的任何系统均在本发明范围内。在步骤702,任务管理单元300从处理集群阵列230接收反射通知信号。在步骤705,任务管理单元300确定通知信号是否是复制反射通知信号,并且如果是,那么在步骤715,将TMD 322的一部分复制到TMD 322的纯硬件域372中。在步骤750,反射通知信号的处理完成。在步骤705,如果任务管理单元300确定反射通知信号不是复制反射通知信号,那么在步骤720,任务管理单元300确定反射通知信号是否是无效反射通知信号。如果反射通知信号是无效反射通知信号,那么在步骤725,如果数据出现在TMD高速缓存305中,那么任务管理单元300从TMD高速缓存305移除TMD 322数据。存储从TMD高速缓存305移除的TMD 322数据的任何脏高速缓存线不写存储器。随后TMD 322可重新用于不同的计算任务。如果在步骤720,任务管理单元300确定反射通知信号不是无效反射通知信号,那么反射通知信号是调度信号,其设置调度标记用于TMD 322。由任务管理单元300使用调度标记来确定队列375的至少一个条目的序列是否可调度用于执行。在步骤730,当调度标记被写入时,用于TMD 322的标度标记被设置。在步骤750,反射通知信号的处理完成。当任务/工作单元207从GPC 208接收到通知信号时,在由TMD 322所编码的计算任务的执行期间动态生成的动态计算任务可以直接插入到PPU 202的调度管线中,无需由CPU 102参与。当数据排队用于动态计算任务将时,机制生成vspan反射通知信号,并且为其他事件生成附加的通知信号,所述其他事件例如开始加载TMD高速缓存305、无效存储用于计算任务的数据的高速缓存条目以及使能计算任务的调度。此外,可以不按顺序对存储用于计算任务队列的数据的条目进行写。因此,当动态生成的数据写入队列的时候,部分数据被合并并且通知任务/工作单元207当条目的序列准备好被调度用于处理时开始或继续计算任务的执行。等待数据写入队列的顺序条目中与写队列条目的解耦允许生成数据的线程简单地写条目并随后退出或继续处理其他数据。本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示出的计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的光盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息jP(ii)可写入的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。以上已参照特定实施例对本发明进行了描述。然而,本领域技术人员将理解的是,在不脱离如随附权利要求书中所阐释的本发明的较宽精神和范围的情况下,可对此做出各种修改和变化。因此,前面的描述以及附图应被视为是例示性而非限制性的。
权利要求
1.一种通知任务管理器数据可用于处理的方法,所述方法包括: 生成传输到所述任务管理器的第一通知信号,其中所述通知信号指定第一偏移和第一Δ值; 在与第一处理任务相对应的队列中存储与所述第一偏移和所述第一△值相关联的第一数据; 生成传输到所述任务管理器的第二通知信号,其中所述通知信号包括第二偏移和第二Δ值; 在与所述第一处理任务相对应的所述队列中存储与所述第二偏移和所述第二 △值相关联的第二数据; 接收所述第一通知信号和第二通知信号; 确定所述第一偏移和所述第一 △值是否能够与所述第二偏移和所述第二 △值合并,以生成经合并的偏移和经合并的Λ值;以及 由所述任务管理器调度用于处理集群阵列中的所述第一处理任务的所述第一数据和所述第二数据中的至少一个的处理。
2.一种用于通知任务管理器数据可用于处理的系统,所述系统包括: 队列,其对应于第一处理任务并且配置为存储所述数据,所述数据包括第一数据和第二数据; 存储器管理单元,其配置为: 生成直接传输到所 述任务管理器的第一通知信号,其中所述通知信号指定与所述第一数据相关联的第一偏移和第一 △值;以及 生成直接传输到所述任务管理器的第二通知信号,其中所述通知信号指定与所述第二数据相关联的第二偏移和第二 △值;以及任务管理器,其配置为: 接收所述第一通知信号和所述第二通知信号; 确定所述第一偏移和所述第一 △值是否能够与所述第二偏移和所述第二 △值合并,以生成经合并的偏移和经合并的Λ值;以及 调度用于处理集群阵列中的所述第一处理任务的所述第一数据和所述第二数据中的至少一个的处理。
3.根据权利要求2所述的系统,其中所述任务管理器进一步配置为:当用于所述第一反射通知信号的所述第一偏移和所述第一 △值不能够与所述第二偏移和所述第二 △值合并时,按照基于所述第一偏移和所述第二偏移的顺序将所述第一偏移、所述第一 △值、所述第二偏移和所述第二△值插入链接列表。
4.根据权利要求3所述的系统,其中所述任务管理器进一步配置为: 当指针指向存储所述第一数据的至少一部分的所述队列的条目时,将所述指针提前到所述队列的头部;以及 从所述链接列表移除所述第一偏移和所述第一 △值。
5.根据权利要求2所述的系统,其中所述存储器管理单元进一步配置为: 接收针对存储器地址的第一写请求,所述第一写请求包括用于所述第一处理任务的第一数据;检测所述存储器地址在反射地址的范围内;以及 直接反射所述第一写请求至所述任务管理器,作为所述第一通知信号。
6.根据权利要求2所述的系统,其中所述处理集群阵列进一步配置为: 按照第一顺序分配所述队列中的第一条目用于存储所述第一数据以及所述队列中的第二条目用于存储所述第二数据;以及 传输包括用于所述处理任务的所述第二数据的第二写请求到所述存储器,以及 所述存储器管理单元进一步配置为处理所述第二写请求,以在所述存储器中存储用于所述处理任务的所述第二数据,其中所述第一写请求和所述第二写请求按照与所述第一顺序相比不同的第二顺序来处理。
7.根据权利要求2所述的系统,其中所述处理集群阵列进一步配置为生成直接传输到所述任务管理器的第三通知信号,并且所述第三通知信号配置为从任务元数据结构的第一部分复制数据至所述任务元数据结构的第二部分。
8.根据权利要求2所述的系统,其中多线程处理器进一步配置为生成直接传输至所述任务管理器的第三通知信号,并且所述第三通知信号配置为使高速缓存中的条目无效,所述高速缓存存储编码所述处理任务的任务元数据结构的数据。
9.根据权利要求2所述系统,其中多线程处理器进一步配置为生成直接传输到所述任务管理器的第三通知信号,并且所述第三通知信号配置为写控制是否调度所述处理任务用于执行的标记。
10.一种用于通知任务管理器数据可用于处理的系统,所述系统包括: 处理集群阵列, 其配置为: 执行第一处理任务,以及 在所述第一处理任务的执行期间,生成第一通知信号,所述第一通知信号配置为写控制是否调度第二处理任务用于执行的标记; 存储器管理单元,其配置为直接从所述处理集群阵列传输所述第一通知信号到所述任务管理器;以及 所述任务管理器,其配置为当所述标记使能时,调度用于所述处理集群阵列中的所述第二处理任务的所述数据的处理。
全文摘要
本发明的一个实施例阐述了一种技术,其用于使能所生成的任务插入多处理器系统的调度管线中,以允许正在执行的计算任务动态地生成动态任务并且通知多处理器系统的调度单元,而无需由CPU参与。当用于动态任务的数据被写入队列时,响应于写请求生成反射通知信号。生成附加的反射通知信号用于在计算任务的执行期间发生的其他事件,所述其他事件例如使存储用于计算任务的数据的高速缓存条目无效,以及使能另一个计算任务的调度。
文档编号G06F9/46GK103197955SQ20121054849
公开日2013年7月10日 申请日期2012年12月17日 优先权日2011年12月16日
发明者蒂莫西·约翰·珀塞尔, 兰基·V·姗, 杰尔姆·F·小杜鲁克, 肖恩·J·特赖斯勒, 卡里姆·M·阿夫达利亚, 菲利普·亚历山大·夸德拉, 贝里安·帕里斯 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1