维持公平性和顺序的资源管理子系统的制作方法

文档序号:6503061阅读:132来源:国知局
维持公平性和顺序的资源管理子系统的制作方法
【专利摘要】本公开的一个实施例阐述了在进行与重演操作有关的公用资源访问请求的调度中维持公平性和顺序的有效方式。具体地,流多处理器(SM)包括全序队列(TOQ),该全序队列配置为通过一个或多个执行周期来调度访问请求。当所需要的公用资源已分配到请求时允许访问请求取得进展。在多个访问请求要求相同公用资源的情况下,对较老的访问请求给予优先级。访问请求可置于挂起有待某些公用资源的可用性的睡眠态中。可通过允许较老的访问请求从较年轻的资源请求窃取资源来避免死锁。所公开的技术的一个优点是较新的访问请求不会反复地阻止较老的公用资源访问请求取得进展。
【专利说明】维持公平性和顺序的资源管理子系统
【技术领域】
[0001]本发明总地涉及计算机架构,并且,更具体地,涉及维持公平性和顺序的资源管理子系统。
【背景技术】
[0002]并行处理系统中的普遍做法是设计同时执行某个数目的线程的处理器。每个线程可在处理器内的单独执行管线中执行。随着执行并行地前进,不同线程可以以可能造成线程遭遇资源冲突的方式来请求访问公用资源,诸如所共享的存储器。例如,多个线程可执行公用资源访问操作,诸如存储器加载指令,其中多个线程不能同时访问资源。在这种情况下,至少一个线程被允许访问公用资源并完成公用资源访问操作。管线转移公用资源的拷贝,诸如一些线程正在访问的高速缓存行中的一个,并且那些线程能够完成公用资源访问操作。然而,访问相同公用资源的其他线程不被允许完成公用资源访问操作并且保持于未被服务(unserviced)。因此,一些线程被允许完成公用资源访问操作,而其他线程不被允许。缺乏处理访问公用资源的多个线程的手段,操作不能成功完成。
[0003]为访问公用资源的多个线程服务的一个方法是将资源分配到一个或多个线程直到公用资源没有附加的可用访问端口为止。访问相同资源的剩余线程被置于等待公用资源的可用性的挂起态中。当公用资源具有一个或多个可用访问端口时,对一个或多个用于服务的挂起的请求分配公用资源直到所有访问端口再次已被分配为止。处理继续,直到对公用资源的所有请求已得到服务为止。
[0004]该方法的一个缺点是新请求可继续到达并消耗到公用资源的访问端口,同时等候相同公用资源的挂起的请求保持未被服务。当较新的访问公用资源的请求在挂起的请求之前得到服务时,这种发生的情况称为“优先级反转”。该方法的另一个缺点是当公用资源变成可用时可能选择挂起的请求用于服务。然而,由于管线时延,在挂起的请求能够完成公用资源访问操作之前另一个较新的请求可能消耗公用资源。该方法的又一个缺点是请求可能要求对两个公用资源A和B的访问,其中A可用但B不可用。请求被置于挂起态直到B变成可用为止。当B变成可用时,挂起的请求被调度以完成。然而,由于管线时延,在挂起的请求能够完成公用资源访问操作之前另一个较新的请求可能消耗A。当较新的访问请求在较老的已有的访问请求之前持续地被分配资源时,较老的访问请求可能不能取得进展并因此不能完成执行。
[0005]如前文示出的,本领域中所需要的是为访问公用资源的线程服务的更有效的方式。

【发明内容】

[0006]本发明的一个实施例阐述用于调度公用资源访问请求的计算机实现的方法。方法包括接收针对公用资源的第一请求、确定公用资源不可用于到请求的分配、以及作为响应而延迟为第一请求服务。方法进一步包括,在延迟服务以后接收针对公用资源的第二请求、以及在接收第二请求以后确定公用资源已变成可用于到请求的分配。方法进一步包括在使公用资源对第二请求可用以前,使公用资源对第一请求可用。
[0007]本发明的其他实施例包括但不限于,子系统,其包括配置为实现所公开的方法的一个或多个方面的流多处理器(SM)以及配置为实现所公开的方法的一个或多个方面的计
算设备。
[0008]所公开的技术的一个优点是较新的访问请求不会反复地阻止较老的公用资源访问请求取得进展。通过优先于对新访问请求来对已有的较老的访问请求分配公用资源而避免了优先级反转。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3A是根据本发明的一个实施例的、图2的前端的框图;
[0013]图3B是根据本发明的一个实施例的、图2的并行处理单元之一内的通用处理集群的框图;
[0014]图3C是根据本发明的一个实施例的、图3B的流多处理器的一部分的框图;
[0015]图4示出根据本发明的一个实施例的、配置为为挂起的公用资源访问操作服务的图3C的SM内的子系统;
[0016]图5示出根据本发明的一个实施例的、图4的TOQ内的TOQ条目老化单元;
[0017]图6A和6B阐述根据本发明的一个实施例的、用于将公用资源访问请求添加到全序队列的方法步骤的流程图;
[0018]图7是根据本发明的一个实施例的、用于更新公用资源的状态的方法步骤的流程图;
[0019]图8是根据本发明的一个实施例的、用于将公用资源分配到与公用资源访问请求相关联的TOQ条目的方法步骤的流程图;
[0020]图9是根据本发明的一个实施例的、用于选择全序队列(TOQ)中的公用资源访问请求以服务的方法步骤的流程图;
[0021 ] 图10是根据本发明的一个实施例的、用于老化TOQ条目缓冲区中的TOQ条目的方法步骤的流程图;以及
[0022]图11是根据本发明的一个实施例的、用于将与公用资源访问请求相关联的TOQ条目从睡眠态转变到活动态的方法步骤的流程图。
【具体实施方式】
[0023]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
[0024]图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU) 102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到I/O (输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU 102。并行处理子系统112经由总线或第二通信路径113 (例如外围部件互连(PCI )Express、加速图形端口或超传输链路)耦连到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传递到显示设备110 (例如常规的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114也连接到I/O桥107。交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(⑶)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-EXpreSS、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0025]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。
[0026]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、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。
[0027]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元 (PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≤I。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。[0028]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU 102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU 202。这些PTO可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU 202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU 202可输出数据到一个或多个显示设备110。 [0029]在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102写入用于每个PPU 202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU 102和PPU 202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU 202从一个或多个入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0030]现在返回参考图2和图1,每个PPU 202包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU 102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU 202的一些或所有元件可以和CPU 102集成在单个芯片上。
[0031]在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU 202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU 202的适当部件。例如,可将与处理任务相关的命令引导到主机接口 206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0032]有利地,每个PPU 202都实现高度并行处理架构。如详细示出的,PTO202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥I。每个GPC 208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0033]GPC 208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC 208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0034]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D > I。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的技术人员应该理解DRAM 220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM 220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0035]任何一个GPC 208都可以处理要被写到并行处理存储器204内的任何DRAM 220的数据。交叉开关单元210配置为路由每个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之间的业务流。
[0036]另外,GPC 208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU 102或另一个并行处理子系统112。
[0037]PPU 202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU 202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU 202连接到系统存储器。
[0038]如上所示,在并行处理子系统112中可以包括任何数目的PPU 202。例如,可在单个插卡上提供多个PPU 202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PI3U系统中的PPU 202可以彼此同样或不同。例如,不同的PPU 202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU 202的情况下,可并行操作那些PI3U从而以高于单个PPU 202所可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。多个并发任务调度
[0039]可以在GPC 208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC 208执行。
[0040]图3A为根据本发明的一个实施例的图2的任务/工作单元207的框图。任务/工作单元207包括任务管理单元300和工作分布单元340。任务管理单元300基于执行优先级级别来组织所要调度的任务。对于每个优先级级别,任务管理单元300将指向与任务相对应的TMD 322的指针的列表存储在调度器表321中,其中所述列表可以实现为链表。可以将TMD 322存储在PP存储器204或系统存储器104中。任务管理单元300接受任务并将任务存储在调度器表321中的速度与任务管理单元300调度任务用于执行的速度是解耦的。因此,任务管理单元300可以在调度任务之前收集数个任务。之后可以基于优先级信息或使用其他技术诸如轮叫调度来调度所收集的任务。
[0041]工作分布单元340包括具有槽的任务表345,每个槽可以被用于正在执行的任务的TMD 322所占用。当任务表345中有空闲槽时,任务管理单元300可以调度任务用于执行。当没有空闲槽时,未占用槽的较高优先级任务可以驱逐占用槽的较低优先级任务。当任务被驱逐时,该任务被停止,并且如果该任务的执行没有完成,则将指向该任务的指针添加到所要调度的任务指针的列表以使得任务的执行稍后恢复。当生成子处理任务时,在任务的执行期间,将指向该子任务的指针添加到所要调度的任务指针的列表。可以由在处理集群阵列230中执行的TMD 322生成子任务。
[0042]不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230接收。子任务不被插入入栈缓冲区或传送到前端。当生成子任务或将用于子任务的数据存储在存储器中时不通知CPU 102。通过入栈缓冲区提供的任务与子任务之间的另一个区别是通过入栈缓冲区提供的任务由应用程序来定义而子任务是在任务执行期间动态生成的。
任务处理概述
[0043]图3B为根据本发明的一个实施例的在图2的PPU 202之一内的GPC208的框图。每个GPC 208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC 208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。
[0044]经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM 310所输出的处理数据指定目的地来控制工作分布交叉开关330。[0045]在一个实施例中,每个GPC 208包括M个SM 310,其中M≥1,每个SM 310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元一在图3C中示出为Exec单元302和LSU303),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、0R、X0R)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
[0046]如本文之前所定义的,传送到特定GPC 208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM 310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM 310内的处理引擎数目多的线程,在这种情况下处理在连续的时钟周期内发生。因为每个SM 310可以并发支持多达G个线程组,结果是在任何给定时间在GPC208中可以执行多达G*M个线程组。
[0047]此外,多个相关线程组可以在SM 310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM 310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
[0048]每个SM 310包括一级(LI)高速缓存(图3C所示)或使用用于实施加载和存储操作的SM 310外部的相应LI高速缓存中的空间。每个SM 310都还有权访问在所有GPC 208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM 310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PTO 202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC 208内,其配置为接收并保持由SM 310所请求的经由存储器接口 214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM 310。在GPC208中具有多个SM 310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。
[0049]每个GPC 208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其他实施例中,MMU 328可以驻留在存储器接口 214内。MMU 328包括用于将虚拟地址映射到像素块(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU 328可以包括地址转换后备缓冲区(TLB)或可以驻留在多处理器SM 310或LI高速缓存或GPC 208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
[0050]在图形和计算应用中,GPC 208可配置为使得每个SM 310耦连到用于实施纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理LI高速缓存(未示出)或者在一些实施例中从SM 310内的LI高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC 208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM 310将所处理的任务输出到工作分布交叉开关330。preROP (预光栅操作)325配置为从SM 310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
[0051]应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM 310或纹理单元315、preROP 325可以包括在GPC 208内。进一步地,如图2所示,PPU 202可以包括任何数目的GPC 208,所述GPC 208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC 208接收特定处理任务。进一步地,每个GPC 208有利地使用分开且各异的处理单元、LI高速缓存来独立于其他GPC 208操作以为一个或多个应用程序执行任务。
[0052]本领域普通技术人员应该理解图1、2、3A和3B所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
[0053]在本发明的实施例中,使用计算系统的PPU 202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0054]每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
[0055]图3C为根据本发明的一个实施例的图3B的SM 310的框图。SM 310包括配置为经由L1.5高速缓存335从存储器接收指令和常数的指令LI高速缓存370。线程束调度器和指令单元312从指令LI高速缓存370接收指令和常数并根据该指令和常数控制本地寄存器堆304和SM 310功能单元。SM 310功能单元包括N个exec (执行或处理)单元302和P个加载-存储单元(LSU) 303。[0056]SM 310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU 303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM 310内的每exec单元302)—个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD 322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD 322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD 322的标识符。
[0057]如果TMD 322是网格TMD,则TMD 322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD 322中或TMD 322可以存储指向要由CTA所处理的数据的指针。TMD 322还存储由CTA所执行的程序的开始地址。
[0058]如果TMD 322是队列TMD,那么使用TMD 322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD 322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD 322分开存储,在该情况下TMD 322存储指向该队列的队列指针。有利地,当代表子任务的TMD 322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
[0059]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD 322相关联用于一个或多个任务的并发执行。此外,单个GPC 208可以并发执行多个任务。
[0060]参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU 303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM 310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM 310内的任何exec单元302)可以通过存储器接口 214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。
[0061]每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU 303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU 303的每个通道的一致值或常数值。
[0062]共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM 310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU 303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM 310中的每个LSU 303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
[0063]每个SM 310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU 303经由存储器和高速缓存互连380耦连到共享存储器306和LI高速缓存320。
维持公平性和顺序的全序队列
[0064]图4示出根据本发明的一个实施例的、配置为服务挂起的公用资源访问操作的、图3C的SM310内的子系统400。如所示,子系统400包括SM分区410、地址生成单元(AGU)420、地址多路复用器440、写数据多路复用器450、仲裁单元455、LI高速缓存存储器460、读数据多路分配器(demultiplexer) 465、以及全序队列(total order queue, TOQ) 430。
[0065]SM分区位于SM 310的线程束调度器和指令单元312内。SM分区调度并将公用资源访问请求分派到LSU 303。如所示,SM分区410包括调度器412、分派单元414、以及重演指令缓冲区(RIB)416。调度器412从指令LI高速缓存370接收新指令并且调度指令用于由SM 310执行。调度器412将所调度的指令提交到分派单元414。
[0066]分派单元414从调度器412接收调度指令,并将指令转发到SM 310内的适当的功能单元用于执行。在指令包括公用资源访问请求诸如在存储器中加载或存储数据的请求的情况下,分派单元将指令转发到LSU 303。在将这种指令分派到LSU 303之前,分派单元确定在RIB 416中是否存在可用条目以分配到指令。为在请求的执行期间可能需要至少一个重演操作的任何公用资源访问请求而创建RIB条目。如果存在可用RIB条目,那么分派单元在RIB 416中存储与指令有关的信息并且将指令分派到LSU 303。如果不存在可用RIB条目,那么分派单元414暂停被引导到LSU 303的挂起的指令的流直到RIB条目变成可用为止。在这种情况下,仍允许针对所分派的指令的重演操作执行完成。一旦指令已完成执行,则收回相应的RIB条目,并且所收回的RIB条目对分派单元414是可用的以分配到新指令。如下文进一步所述,分派单元414接收重演操作请求并请求从TOQ 430收回RIB条目。此外,分派单元414将写数据发送到写数据多路复用器450,并从读数据多路分配器465接收读数据。
[0067]RIB 416存储关于包括公用资源访问请求的指令的信息。这种请求可要求一个或多个重演操作以完成执行。公用资源访问请求可能在LSU 303的一个执行周期中完成。然而,在一些条件下,访问请求可能无法完成执行,并且被称作重演操作的一个或多个附加的执行周期被创建以用于访问请求完成。这些条件包括但不限于,跨越比由LSU 303所同时访问的高速缓存行更多的高速缓存行的访问请求、对比由结构所同时服务的结构内的位置更多的位置的访问、对由在先的请求所当前消耗的结构的访问、或在优先级上比另一个挂起的请求低的访问请求。与每个这种访问请求有关的信息存储在相关联的RIB条目中。RIB条目在后续重演操作期间被检索并递送到LSU 303以有助于重演操作的执行。RIB条目可包括但不限于,指令、操作所需要的常数值、以及操作所需要的寄存器的内容。应理解的是可用RIB条目的理想数目可基于若干因素,包括但不限于,要求重演操作的条件的发生频率、针对访问请求所创建的重演操作的平均数、以及分派单元414内的时延。RIB 416将命令和地址位置发送到AGU 420。
[0068]AGU 420位于LSU 303内。每个AGU 420与相应的SM分区410相关联。例如,AGU
420(O)与SM分区410 (O)相关联,并且AGU 420 (N)与SM分区410 (N)相关联。AGU 420沿信号路径470从RIB 416接收命令和地址。作为响应,AGU 420沿信号路径472将AGU请求状态发送到TOQ 430。反过来,TOQ 430读取AGU请求状态以确定是否针对当前访问请求需要附加的重演操作或是否可收回与当前访问请求相对应的RIB条目收回。另外,AGU 420沿信号路径474将地址信息发送到地址多路复用器440。
[0069]地址多路复用器440选择来自与当前访问请求相对应的AGU 420的地址并将所选择的地址发送到LI高速缓存320。每个AGU 420生成用于当前访问请求的地址,如上文所述。地址多路复用器440沿信号路径474从AGU 420中的每一个接收地址。地址多路复用器440还接收标识选择哪个AGU 420用于当前访问请求的控制信号(未示出)。如果控制信号标识AGU420 (0),那么地址多路复用器440将由AGU 420 (O)所生成的地址发送到LI高速缓存320。如果控制信号标识AGU 420 (N),那么地址多路复用器440将由AGU 420 (N)所生成的地址发送到LI高速缓存320。
[0070]当公用资源访问请求是将数据存储到公用资源的请求时,写数据多路复用器450从与当前访问请求相对应的分派单元414选择写数据并将所选择的写数据发送到LI高速缓存320。当当前访问请求是存储操作时,SM分区410内的每个分派单元生成用于当前访问请求的写数据。写数据多路复用器450沿信号路径476从分派单元414中的每一个接收写数据。写数据多路复用器450还接收标识选择哪个SM分区410用于当前访问请求的控制信号(未示出)。如果控制信号标识SM分区410 (0),那么写地址多路复用器450将由SM分区410 (O)所生成的写数据发送到LI高速缓存320。如果控制信号标识SM分区410(N),那么写数据多路复用器450将由SM分区410 (N)所生成的写数据发送到LI高速缓存320。
[0071]仲裁单元455从分区410和其他客户端接收公用资源访问请求并将所选择的访问请求发送到公用资源用于服务,该公用资源诸如LI高速缓存存储器460。该仲裁接收由地址多路复用器440所选择的地址以及来自其他请求对公用资源进行访问的客户端的地址。仲裁单元455将与所选择的访问请求相关联的地址路由到LI高速缓存存储器460。同样地,针对将数据存储到存储器中的访问请求,仲裁单元455将与所选择的访问请求相关联的写数据路由到LI高速缓存存储器460。另外,仲裁单元455沿信号路径478将仲裁状态信息发送到TOQ 430。
[0072]位于LI高速缓存320内的LI高速缓存存储器460,是对SM分区410和其他外部客户端可访问的示例性的公用资源。LI高速缓存存储器460包括对公用资源访问请求可访问以存储或加载数据的存储器位置。LI高速缓存存储器460从仲裁单元455接收地址和控制信号。LI高速缓存存储器460从仲裁单元455接收与存储访问请求相关联的写数据,并将与加载访问请求相关联的读数据发送到读数据多路分配器465。如下文进一步所述,LI高速缓存存储器460沿信号路径482将与LI高速缓存请求相关联的状态发送到TOQ 430并且沿路径484发送资源状态。LI高速缓存存储器460沿信号路径486从TOQ 430接收保留计数。
[0073]当公用资源访问请求是从公用资源加载数据的请求时,读数据多路复用器465将读数据从LI高速缓存存储器460发送到请求加载访问请求的客户端。请求单元可以是SM分区410或另一个LI高速缓存客户端。读数据多路复用器465接收标识选择哪个SM分区410用于当前加载访问请求的控制信号(未示出)。如果控制信号标识SM分区410 (0),那么读数据多路复用器465将由LI高速缓存存储器460所生成的读数据发送到SM分区410(O)。如果控制信号标识SM分区410 (N),那么读数据多路复用器465将由LI高速缓存存储器460所生成的读数据沿信号路径480发送到SM分区410 (N)。
[0074]如结合图9进一步所述,TOQ 430配置为以公平并且避免优先级反转的方式,基于未被阻止等待公用资源的最早的访问请求来选择重演操作以执行。如所示,TOQ 430包括TOQ条目缓冲区432,配置为存储与SM分区410内的每个RIB条目相对应的TOQ条目。如结合图6A-6B进一步所述,当接收新访问请求时TOQ 430在TOQ条目缓冲区432内创建TOQ条目,并且基于访问请求的完成而收回TOQ条目。TOQ条目缓冲区432的大小基于SM分区410的数目和每个RIB416中的RIB条目的数目。例如,在SM 310包括‘P,个SM分区410、并且每个SM分区410包括RIB 416、该RIB 416包括‘B,个RIB条目的情况下,TOQ条目缓冲区432可包括PXB个RIB条目。这样,每个TOQ条目与RIB 416中的相应条目成对(paired)。
[0075]TOQ条目缓冲区432内的每个TOQ条目包括多个字段,包括但不限于,相关联的访问请求的年龄、发起访问请求的SM分区410或其他客户端的身份、包括重演操作信息的RIB的身份、与访问请求相关联的公用资源和资源状态、与访问请求相关联的唤醒条件。可使用公知的技术诸如经由优先级方案、最近最少使用、或最近最少分配的方法来明确记录访问请求的年龄。如结合图10进一步所述,年龄可通过在诸如TOQ条目缓冲区432的存储队列内的公用资源访问请求的到达时间和位置来加以暗示,如结合图4-5所述。可替代地,年龄可通过与在诸如TOQ条目缓冲区432的存储队列内的公用资源访问请求相关联的重演操作的到达时间和位置来加以暗示。
[0076]可关于与TOQ条目相关联的访问请求来描述公用资源的状态。如结合图8进一步所述,可通过依照相应TOQ条目中所记录的情况来更新公用资源的状态而将公用资源分配到访问请求。例如,公用资源的状态可指示公用资源不被访问请求所需要。在另一个示例中,公用资源可能被访问请求所需要,但已经分配到访问请求。在另一个示例中,公用资源可能被访问请求所需要,但尚未分配到访问请求。在另一个示例中,公用资源可能被分成多个部分,诸如高速缓存行,其中当前使用集合代表一个或多个高速缓存行的组、或使用路代表给定集合内的特定高速缓存行。在又一个示例中,资源可被锁定,并且集合或路在使用中。如结合图7进一步所述,可依照公用资源的状态条件的改变来常规地更新TOQ条目的公用资源状态字段。[0077]在所需要的资源还未被分配、锁定、或在使用中的情况下,TOQ 430确定资源短缺是否是短期或暂时的条件还是长期条件。具有短期或暂时资源冲突的访问请求适格于立即执行或在有限延迟之后的执行。具有长期或不确定的资源短缺的访问请求可被置于睡眠态中。如结合图11进一步所述,TOQ 430可在发生某些唤醒条件时唤醒睡眠的访问请求。与睡眠态中的访问请求相对应的TOQ条目可指定这些唤醒条件中的一个或多个,诸如:资源对于分配是可用的、资源已解锁、或高速缓存类资源的所需要的集合或路已不在使用中。
[0078]正在睡眠的TOQ条目在等待一个或多个唤醒条件。一旦唤醒条件发生,则TOQ 430可选择单个睡眠的TOQ条目用于唤醒或可将唤醒操作广播到多个睡眠的条目。例如,在资源是配置为一次递送一个数据值的先入先出存储器(FIFO)的情况下,TOQ 430可唤醒正等待FIFO成为可用的单个TOQ条目。在另一个示例中,TOQ 430可将唤醒操作广播到等待相同高速缓存行以用数据填充的多个TOQ条目。在这种情况下,高速缓存行是可满足所有在等待高速缓存行成为可用的同时被置于睡眠的TOQ条目的资源。在一些情况下,可存在对其而言不需要唤醒条件的TOQ条目。这种TOQ条目适格于立即被选择用于重演操作,并且如果造成公用资源冲突的条件是暂时或短期的性质那么这种TOQ条目是适当的。
[0079]在一个实施例中,在每个执行周期期间,TOQ 430选择最早的适格访问请求用于一个或多个重演操作。适格访问请求是已被分配所有所需要的资源并已满足所有唤醒条件的访问请求。睡眠态中的访问请求不适格用于选择。TOQ 430基于为适格的TOQ条目所发现的总重演操作节拍(beat)、所请求的经预调度的重演操作的数目、以及所请求的按需(on-demand)重演操作的数目来针对该条目请求重演操作。节拍包括与特定公用资源访问请求相关联的一个或多个重演操作。
[0080]当公用资源访问请求被初始分派用于执行时,并且假定请求未被SM310或仲裁单元455先占,那么重演操作计数器(未示出)设置为零,并根据从AGU 420和LI高速缓存存储器460所接收的请求状态来初始化总节拍发现计数器(未示出)。如果访问请求包括经预调度的重演操作,那么TOQ 430累积与经预调度的重演操作相关联的节拍。如果访问请求由于经调度的重演操作而未完成,那么TOQ 430随后累积与按需重演操作相关联的节拍。
[0081]应理解的是,TOQ 430可能易受死锁或活锁条件影响。例如,如果两个访问请求中的每一个要求两个公用资源、每个访问请求被分配两个资源之一、并且每个访问请求被置于等待另一个资源变成可用的睡眠条件中,那么死锁发生。在这种情况下,两个访问请求均不能获得附加的资源,并且访问请求可能持久地留在睡眠态中。在另一个示例中,当所需要的资源变成可用时,睡眠的访问请求可能被置于唤醒态中,并且资源可被指派到第二访问请求。然而,第二访问请求可能正等待另一个资源,并且因此可能被置回睡眠态中。其他等候公用资源的访问请求可同样被置于唤醒态中、被分配与公用资源相关联的端口、以及被置回睡眠态中。该过程可继续,直到公用资源的所有端口由睡眠的请求所消耗、并且公用资源对任何活动的访问请求不可用为止。
[0082]当一个或多个访问请求需要相同公用资源、并且到公用资源的所有访问端口已分配到其他请求时,死锁条件可能特别明显。这种公用资源可称作稀缺资源。在一个实施例中,TOQ 430可具有当资源处于稀缺供应时管理资源的机制。当公用资源被视为稀缺资源时,对稀缺资源的优先级访问权限可给予现有的较老的TOQ条目和任何相关联的经预调度的重演操作,而非给予与最近所分派的访问请求相关联的较年轻的TOQ条目。在至少一个实施例中,如果至少一个访问请求当前在睡眠态中等待资源变成可用,那么公用资源可被认为是稀缺资源。可变成稀缺的资源的示例包括但不限于,先入先出(FIFO)存储器、高速缓存类存储器中的特定集合和路、或高速缓存类存储器的特定集合中的任何路。一旦公用资源被确定是稀缺资源,那么TOQ 430可能不发送广播的唤醒操作。当资源被认为是稀缺的时,TOQ 430可使用单个唤醒操作而非广播的唤醒操作来将资源指派到单独的访问请求。TOQ 430可使用TOQ条目的年龄来将稀缺资源分配到睡眠的TOQ条目,其中年龄可以是TOQ条目缓冲区432内的TOQ条目的位置。一旦所指派的访问请求完成执行,则稀缺资源可变成可用,并可被指派到另一个访问请求。一旦公用资源不再被认为是稀缺的,也就是说,没有睡眠的访问请求正在等待资源,则TOQ 430可恢复发送与资源相关联的广播的唤醒操作。
[0083]在某些条件下,通过允许从较年轻的TOQ条目“窃取”由较老的TOQ条目所需要的、并且当前分配到较年轻的TOQ条目的公用资源,可解决死锁条件。如果这两个TOQ条目均需要多个资源,那么这两个条目均不会被分配所需要的资源的全部。在一个示例中,随着各种条件贯穿访问请求的执行周期而演进,因此由访问请求所需要的公用资源的集合可随时间改变。较老的TOQ条目可能要求两个资源,标识为A和B,其中仅B分配到访问请求。较老的TOQ条目将被置于睡眠态中等待资源A。当较老的TOQ条目在睡眠态中的同时,较年轻的TOQ条目可要求公用资源B和C,但仅资源C被分配。较年轻的资源可被置于睡眠态中等待资源B。一旦醒来,较老的TOQ条目可发现TOQ条目现在要求当前分配到较年轻的TOQ条目的资源C。较老的TOQ条目和较年轻的TOQ条目二者均正在等候分配到其他TOQ条目的公用资源的分配。解决这类死锁条件的一个方法是允许较老的TOQ条目从较年轻的TOQ条目“窃取”所需要的公用资源。
[0084]在一个实施例中,TOQ 430可采用虚拟窃取,其中即使在不是所有所需要的资源已被分配的情况下也可选择较老的TOQ条目用于一个或多个重演操作。在重演操作的执行期间,相关联的访问请求可消耗为较年轻的条目所保留的资源。资源保留可能并未被绑定到较年轻的TOQ条目,所以较老的条目可能能够采集所有所需要的资源以取得进展。一旦较老的TOQ条目取得进展,则相关联的访问请求就可释放所需要的资源,从而允许公用资源分配到较年轻的TOQ条目。
[0085]在另一个实施例中,TOQ 430可采用物理窃取,其中特定资源可从特定TOQ条目中被窃取并分配到要求该资源的较老的TOQ条目。在这种情况下,由较年轻的TOQ条目所需要的资源的状态可从被分配状态修改到非被分配状态,并且针对较老的TOQ条目,资源的状态可转变到被分配态。一旦较老的TOQ条目取得充分进展,则相关联的请求就释放被分配的资源,从而允许较年轻的TOQ条目获得所需要的资源。
[0086]在各种实施例中,一旦发现资源冲突可立即触发资源窃取,或在发现冲突之后可将资源窃取延迟固定的或可变的时间段。资源窃取可被限制到最老的TOQ条目,其中最老的TOQ条目窃取所有所需要的、未被分配的资源。在这种情况下,可能潜在地消耗由最老的TOQ条目所需要的资源的所有其他访问请求被推迟,直到在最老的TOQ条目上取得某个进展为止。
[0087]公用资源的各种配置可预期在本发明的范围内。在一个实施例中,由TOQ 430所管理的一些访问请求可具有多个处理阶段,其中由每个阶段所可能需要的资源可变化。在一个示例中,访问请求包括可能属于不同地址空间的线程,其中可由更通用的存储器层级的高速缓存级别部分来满足一个地址空间,并且可由不包括在通用存储器层级中的独立局部存储器来满足另一个地址空间。在另一个实施例中,访问请求可在相邻的存储器位置中选择操作数的序列,其中可针对每个线程来访问操作数的不同序列。
[0088]图5示出根据本发明的一个实施例的、图4的TOQ 430内的TOQ条目老化单元500。如所示,TOQ条目老化单元500包括请求状态分布单元510、资源状态分布单元520、TOQ条目缓冲区432、所保留条目计数器550、以及优先级选择器560。
[0089]请求状态分布单元510将关于公用资源访问请求的状态分布到TOQ条目缓冲区432。请求状态分布单元510沿信号路径472从AGU 420接收地址生成单元请求状态、沿信号路径478从仲裁单元455接收仲裁状态、以及沿信号路径482从LI高速缓存存储器460接收LI高速缓存请求状态。请求状态分布单元510随后将来自这三个单元的请求状态信息发送到TOQ条目缓冲区432中的每个TOQ条目单元格(cel I) 540。状态信息反过来存储在每个TOQ条目单元格540内的适当的位置中。
[0090]资源状态分布单元520将关于公用资源的状态分布到TOQ条目缓冲区432。资源状态分布单元520沿信号路径484从LI高速缓存存储器460接收LI高速缓存资源状态。资源状态分布单元520随后将资源状态信息发送到TOQ条目缓冲区432中的每个TOQ条目单元格540。状态信息反过来存储在每个TOQ条目单元格540内的适当的位置中。
[0091]TOQ条目缓冲区432包括用于每个SM分区410内的RIB 416中的每个条目的TOQ条目单元格540。TOQ条目缓冲区432在图左侧创建与从SM分区410所接收的新访问请求相关联的TOQ条目。随着TOQ条目老化,TOQ条目缓冲区432将TOQ条目单元格540向右移位。如所示,TOQ条目缓冲区432包括TOQ条目单元格540和TOQ多路复用器530。
[0092]随着从SM分区410接收新访问请求,TOQ多路复用器530选择TOQ条目单元格540是再循环TOQ条目缓冲区432的当前态,还是将TOQ条目单元格540向右移位。为再循环TOQ条目单元格540,TOQ多路复用器530沿由580584588所例示的信号路径选择再循环路径。为移位TOQ条目单元格540,TOQ多路复用器530沿由582 586 590所例示的信号路径选择移位路径。
[0093]TOQ条目单元格540配置为存储与从SM分区所接收的公用资源访问请求有关的信息。用分别来自请求状态分布单元510和资源状态分布单元520的请求状态和资源状态的改变来更新TOQ条目单元格540。最初,TOQ条目单元格540和相关联的TOQ多路复用器530配置为再循环。TOQ条目单元格[O]的当前态沿信号路径580再循环、TOQ条目单元格[I]的当前态沿信号路径584再循环、以及TOQ条目单元格[2]的当前态沿信号路径588再循环。当从SM分区接收新访问请求时,TOQ条目单元格[O]配置为沿信号路径582接收并存储与新访问请求相关联的TOQ条目。如果TOQ条目单元格[O]的当前态指示无效TOQ条目,那么剩余TOQ条目单元格540再循环。然而,如果TOQ条目单元格[O]标记为有效TOQ条目,那么TOQ条目被移位到下一个TOQ条目单元格540。在这种情况下,TOQ条目单元格[I]沿信号路径586接收存储在TOQ条目单元格[O]中的TOQ条目。如果TOQ条目单元格
[I]的当前态指示无效TOQ条目,那么剩余TOQ条目单元格540再循环。然而,如果TOQ条目单元格[I]标记为有效TOQ条目,那么TOQ条目被移位到下一个TOQ条目单元格540。在这种情况下,TOQ条目单元格[2]沿信号路径590接收存储在TOQ条目单元格[I]中的TOQ条目。过程继续,直到找到无效(空)TOQ条目单元格540为止。[0094]所保留条目计数器550分析被标记为有效的TOQ条目单元格540并针对由至少一个有效TOQ条目所需要的每个公用资源来确定保留计数。针对给定资源的保留计数等于要求资源的被标记为有效的TOQ条目单元格540的数目。所保留条目计数器550将保留计数发送到相应公用资源中的每一个,诸如LI高速缓存存储器460。
[0095]优先级选择器560选择与给定SM分区410中的RIB 416相关联的TOQ条目用于服务。一般地,优先级选择器560选择既被标记为有效又已保留所有所需要的资源以完成执行的、最右边的TOQ条目单元格540中的TOQ条目。注意,所选择的TOQ条目可以不必然存储在最右边的被标记为有效的TOQ条目单元格540中。因此,空TOQ条目单元格540或洞(hole)可出现在一组有效TOQ条目单元格540的中间。随着从SM分区410接收新访问请求,这些洞可被填充。优先级选择器560对SM分区410发送RIB读请求并请求收回RIB。
[0096]注意,可采用替代技术来移动TOQ条目块而非如上所述使用移位寄存器方法。另外,与TOQ条目相关联的静态信息,诸如不与睡眠和唤醒条件直接有关的字段,可存储在TOQ条目单元格540内,或存储在诸如静态存储器的单独存储器结构内。
[0097]图6A和6B阐述根据本发明的一个实施例的、用于将公用资源访问请求添加到全序队列430的方法步骤的流程图。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
[0098]如所示,方法600在步骤602开始,其中TOQ 430接收与公用资源相关联的访问请求。在步骤604,T0Q 430确定访问请求是否是重演操作请求。如果访问请求不是重演操作请求,那么访问请求是新请求,并且方法600前进到步骤606,其中TOQ 430递增用于由访问请求所需要的每个公用资源的所保留的计数。在步骤608,T0Q 430确定由访问请求所需要的公用资源是否可用于分配到请求。如果公用资源可用于分配,那么方法600前进到步骤610,其中TOQ 430递减用于由访问请求所需要的每个公用资源的所保留的计数。
[0099]在步骤612,T0Q 430确定访问请求是否准备好完成。如果没有为了完成请求的剩余工作,并且请求已由LI高速缓存320所接受,那么访问请求准备好完成。如果访问请求准备好完成,那么方法600前进到步骤614,其中TOQ 430完成请求。访问与TOQ条目相对应的RIB条目以完成请求。RIB条目包括与用于完成一个或多个重演操作的访问请求相关联的执行信息。在步骤616,TOQ 430收回与访问请求相关联的TOQ和RIB条目,如果有的话。方法600随后终止。
[0100]现在返回步骤604,如果访问请求是重演操作请求,那么方法600前进到步骤622,其中TOQ 430确定与访问请求相关联的TOQ条目是否指示每个所需要的公用资源是可用的或者先前已被保留。如果每个所需要的公用资源是可用的或者已被保留,那么方法600返回步骤610,如上文所述。如果在步骤622,至少一个所需要的公用资源是不可用的或者尚未被保留,那么方法600前进到步骤624,其中TOQ 430确定是否可从另一个访问请求窃取不可用的或先前所保留的公用资源。如果可窃取公用资源,那么方法600返回步骤610,如上文所述。如果不可窃取公用资源,那么方法600前进到步骤626,其中TOQ 430保留由访问请求所需要的并且可用的公用资源。TOQ 430用该信息更新TOQ条目。在步骤628,TOQ430将TOQ条目置于睡眠。方法600随后终止。
[0101]现在返回步骤608,如果由访问要求所需要的一个或多个公用资源不可用于分配,那么方法600前进到步骤630,其中TOQ 430将TOQ条目分配到该访问请求。在这种情况下,访问请求的服务被延迟。在步骤632,T0Q430确定访问请求是否正错过任何长期资源。如果访问请求正错过任何长期资源,那么方法600返回步骤626,如上文所述。如果访问请求并未正错过任何长期资源,那么方法600前进到步骤634,其中TOQ 430将与访问请求相关联的TOQ条目加标签为可用于重演。方法600随后终止。
[0102]现在返回步骤612,如果访问请求不能完成,那么方法600前进到步骤618,其中TOQ 430完成访问请求的一个节拍。节拍包括与特定公用资源访问请求相关联的一个或多个重演操作。访问与TOQ条目相对应的RIB条目以完成请求。RIB条目包括与用于完成包括在节拍中的一个或多个重演操作的访问请求相关联的执行信息。在步骤620,T0Q 430保持与访问请求相关联的TOQ和RIB条目,如果有的话。方法600随后终止。
[0103]一旦针对相关联的公用资源访问请求创建TOQ条目,则TOQ 430可随着由TOQ条目所需要的公用资源的状态的改变来更新TOQ条目。
[0104]图7是根据本发明的一个实施例的、用于更新公用资源的状态的方法步骤的流程图。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
[0105]如所示,方法700在步骤702开始,其中TOQ 430接收针对由一个或多个TOQ条目所需要的公用资源的经更新的状态。在步骤704,TOQ 430确定状态更新是否指示公用资源可用。如果公用资源不可用,那么方法700终止。
[0106]然而,如果公用资源可用那么方法700前进到步骤706,其中TOQ 430计算TOQ索引用于最高编号的TOQ条目,其中较高编号的TOQ条目代表比较低编号的TOQ条目更老的访问请求。在步骤708,TOQ 430确定由索引所引用的TOQ条目是否是有效TOQ条目。如果相关联的访问请求已完成并且TOQ条目已被随后收回,那么TOQ条目无效。如果TOQ条目不是有效的,那么方法700前进到步骤710,其中TOQ 430递减索引。在步骤712,TOQ 430确定索引大于或等于零。如果索引不大于或等于零,那么整个TOQ已被扫描,并且方法700终止。
[0107]在步骤712,如果索引大于或等于零,那么方法700返回步骤708,如上文所述。在步骤708,如果TOQ条目有效,那么方法700前进到步骤714,其中TOQ 430确定由索引所引用的TOQ条目是否要求其状态已改变的公用资源。如果TOQ条目不需要资源,那么方法700返回步骤710,如上文所述。然而,如果TOQ条目确实需要资源,那么方法700前进到步骤716,其中TOQ 430将资源标记为分配到与索引相关联的TOQ条目。在步骤718,TOQ 430确定公用资源是否仍可用。如果公用资源仍可用,那么方法700返回步骤710,如上文所述。在这种情况下,在在先的分配之后公用资源仍可用,并且仍可分配到附加的TOQ条目。如果公用资源不再可用,那么方法700终止。
[0108]如上文结合图6A-6B所述,TOQ条目可被置于挂起有待一个或多个所需要的公用资源的可用性的睡眠中。一旦所需要的公用资源变成可用,则TOQ 430唤醒TOQ条目将TOQ条目置于活动态,以便相关联的访问请求可继续执行。
[0109]图8是根据本发明的一个实施例的、用于将公用资源分配到与公用资源访问请求相关联的TOQ条目的方法步骤的流程图。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。[0110]如所示,方法800在步骤802开始,其中TOQ 430确定与所指定的索引相关联的TOQ条目是否是有效TOQ条目。如果相关联的访问请求已完成并且TOQ条目已被随后收回,那么TOQ条目无效。如果TOQ条目不是有效的,那么方法800终止。
[0111]如果TOQ条目有效,那么方法800前进到步骤804,其中TOQ 430接收针对由TOQ条目所需要的公用资源的经更新的状态。在步骤806,T0Q430确定公用资源的状态是否等于NOT NEEDED (不被需要),其中NOT NEEDED指示公用资源不被TOQ条目所需要。在这种情况下,对TOQ条目不需要加以改变。方法800前进到步骤816,其中TOQ 430确定TOQ条目是否正在等待附加的资源。如果TOQ条目不是正在等待附加的资源,那么方法800终止。如果TOQ条目正在等待附加的资源,那么方法800返回步骤804,如上文所述。
[0112]现在返回步骤806,如果公用资源的状态不等于NOT NEEDED,那么方法800前进到步骤808,其中TOQ 430确定公用资源的状态是否等于NEEDED AND ALLOCATED (被需要和被分配)。NEEDED AND ALLOCATED状态指示公用资源被TOQ条目所需要,并已经分配到TOQ条目。在这种情况下,不需要对TOQ条目加以改变。方法800前进到步骤816,如上文所述。
[0113]现在返回步骤808,如果公用资源的状态不等于NEEDED AND ALLOCATED,那么方法800前进到步骤810,其中TOQ 430确定公用资源的状态是否等于SET/WAY IN USE ANDLOCKED (集合/路在使用中并且被锁定)。SET/WAY IN USE AND LOCKED状态指示TOQ条目因为公用资源被TOQ条目所需要、但公用资源的所需要的集合或路在使用中并且资源被锁定而被置于睡眠。在这种情况下,方法800前进到步骤818,其中TOQ 430确定资源是否现在被解锁。如果资源未被解锁,那么方法800前进到步骤816,如上文所述。如果资源被解锁,那么方法800前进到步骤820,其中TOQ 430确定公用资源的集合和路是否现在可用。如果集合和路不可用,那么方法800前进到步骤816,如上文所述。如果集合和路可用,那么方法800前进到步骤822,其中TOQ 430确定资源是否可用。如果资源不可用,那么方法800前进到步骤816,如上文所述。如果资源可用,那么方法800前进到步骤824,其中TOQ430将资源的状态设置为NEEDED AND ALLOCATED,这指示公用资源现在被分配到由索引所引用的TOQ条目。方法800随后前进到步骤816,如上文所述。
[0114]现在返回步骤810,如果公用资源的状态不等于SET/WAY IN USE AND LOCKED,那么方法800前进到步骤812,其中TOQ 430确定公用资源的状态是否等于SET/WAY IN USE(集合/路在使用中)。SET/WAY INUSE状态指示TOQ条目因为公用资源被TOQ条目所需要、但公用资源的所需要的集合或路在使用中而被置于睡眠。在这种情况下,方法800前进到步骤820,如上文所述,以确定资源以及集合和路是否现在可用。
[0115]现在返回步骤812,如果公用资源的状态不等于SET/WAY IN USE,那么方法800前进到步骤814,其中TOQ 430确定公用资源的状态是否等于NEEDED BUT NOT AVAILABLE(被需要但不可用)。NEEDED BUT NOT AVAILABLE状态指示TOQ条目因为公用资源被TOQ所需要、但资源不可用而被置于睡眠。在这种情况下,方法800前进到步骤822,如上文所述,以确定资源是否现在可用。
[0116]现在返回步骤814,如果公用资源的状态不等于NEEDED BUT NOT AVAILABLE,那么方法800前进到步骤816,如上文所述。
[0117]一旦TOQ是醒着的以及活动的,TOQ 430可选择TOQ用于一个或多个重演操作以便相关联的访问请求可恢复执行。[0118]图9是根据本发明的一个实施例的、用于选择全序队列(T0Q)430中的公用资源访问请求以服务的方法步骤的流程图。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
[0119]如所示,方法900在步骤902开始,其中TOQ 430初始化索引以指向SM 310内的第一分区。在步骤904,T0Q 430计算TOQ索引用于最高编号的TOQ条目。在步骤906,T0Q430确定由TOQ索引所引用的TOQ条目是否是有效TOQ条目以及由分区索引所引用的分区是否是有效分区。如果相关联的访问请求已完成并且TOQ条目已随后被收回,那么TOQ条目无效。如果分区已被标识以执行与TOQ条目相关联的访问请求,那么分区有效。如果TOQ条目或分区不是有效的,那么方法900前进到步骤908,其中TOQ 430递减索引。在步骤910,TOQ 430确定索引是否大于或等于零。如果索引大于或等于零,那么方法900返回步骤908,如上文所述。
[0120]如果索引不大于或等于零,那么整个TOQ已被扫描,并且方法900前进到步骤916,其中TOQ 430递增分区索引。在步骤918,TOQ 430确定分区索引是否小于分区数P。如果分区索引小于P,那么方法900返回步骤904,如上文所述。如果分区索引不小于P,那么SM分区的整个集合已被扫描,并且方法900前进到步骤920,其中TOQ 430将任何找到的重演操作请求发送到各自的SM分区。方法900随后终止。
[0121]现在返回步骤906,如果TOQ条目和分区均有效,那么方法900前进到步骤912,其中TOQ 430确定每个公用资源是不被TOQ条目所需要,还是公用资源被TOQ条目所需要并已分配到TOQ条目。如果不是所有所需要的资源已分配到TOQ条目,那么方法900返回步骤908,如上文所述。如果所有所需要的资源已分配到TOQ条目,那么方法900前进到步骤914,其中TOQ 430选择所标识的分区内的重演指令缓冲区以执行访问请求。方法900随后前进到步骤916,如上文所述。
[0122]图10是根据本发明的一个实施例的、用于老化TOQ条目缓冲区432中的TOQ条目的方法步骤的流程图。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
[0123]如所示,方法1000在步骤1002开始,其中TOQ 430接收新公用资源访问请求。在步骤1004,TOQ 430在TOQ条目缓冲区432中创建并存储与访问请求相对应的TOQ条目,其中TOQ缓冲区中的条目以时间顺序存储。可以通过任何技术上可行的方式来确定时间顺序,任何技术上可行的方式包括但不限于,经由优先级方案、最近最少使用、或最近最少分配方法、TOQ条目缓冲区432内的公用资源访问请求的到达时间和位置、或通过与TOQ条目缓冲区432内的公用资源访问请求相关联的重演操作的到达时间和位置。与新访问请求相对应的TOQ条目可在TOQ条目缓冲区432中占用与缓冲区中的最新位置相对应的位置。每个TOQ条目在TOQ条目缓冲区432中移位一个位置直到找到TOQ条目缓冲区432中的空位置为止。用已有的TOQ条目来填充空位置。空位置可以是TOQ条目缓冲区432中的最老的有效TOQ条目。可替代地,在较新的有效TOQ条目存在于空位置的一侧、并且较老的有效TOQ条目存在于空位置的另一侧的情况下,空位置可以是“气泡”。在这种情况下,对空位置的填充会填充在TOQ条目缓冲区432内的“气泡”中。
[0124]在步骤1006, TOQ 430确定由访问请求所需要的第一公用资源可用于分配。如果第一公用资源不是可用的,那么TOQ等待直到资源变成可用为止。在步骤1006,如果第一公用资源可用,那么方法1000前进到步骤1008,其中TOQ 430搜索TOQ条目缓冲区432以标识与访问请求相对应的、等待第一公用资源的TOQ条目的子集。在步骤1010,T0Q 430标识TOQ条目的子集内的TOQ条目,其中包括第一公用资源的所有所需要的公用资源可用。
[0125]在步骤1012,T0Q 430在TOQ条目的子集中读取TOQ条目缓冲区中的最老的条目,其中包括第一公用资源的所有所需要的公用资源可用。该TOQ条目可以是或可以不是TOQ条目缓冲区432中的最老的有效TOQ条目。在步骤1014,T0Q 430使与在步骤1012中所读取的TOQ条目相对应的RIB条目被读取到处理管线中,以执行访问请求的一个或多个周期。在步骤1016,TOQ 430确定是否要求附加的周期以便完成访问请求。如果未要求附加的周期,那么方法1000前进到步骤1018,其中TOQ 430收回与访问请求相对应的TOQ条目。TOQ430还可使相应的RIB条目被收回。如果正被收回的TOQ条目不是TOQ条目缓冲区432中的最后的有效请求,那么可在TOQ条目缓冲区432内创建“洞”或“气泡”,使得有效TOQ条目在气泡的两侧均存在。方法1000随后终止。
[0126]在步骤1016,如果要求附加的周期,那么方法1000前进到步骤1020,其中TOQ 430保持与访问请求相对应的TOQ条目。TOQ 430还可使相应的RIB条目被保持。方法1000随后终止。
[0127]图11是根据本发明的一个实施例的、用于将与公用资源访问请求相关联的TOQ条目从睡眠态转变到活动态的方法步骤的流程图。虽然结合图1-5的系统描述了方法步骤,但本领域的普通技术人员应理解的是,配置为以任何顺序实施方法步骤的任何系统均在本发明的范围内。
[0128]如所示,方法1100在步骤1102开始,其中TOQ 430确定公用资源现在可用于分配到访问请求。在步骤1104,TOQ 430确定TOQ条目缓冲区432内的TOQ条目是否在睡眠态中,其中当公用资源可用时TOQ条目的唤醒条件得到满足。如果没有TOQ条目正在等待公用资源,那么方法1100终止。
[0129]在步骤1104,如果一个或多个TOQ条目正在等待公用资源,那么方法前进到步骤1106,其中TOQ 430发出唤醒操作。唤醒操作可作为单个唤醒操作被发出到特定TOQ条目。可替代地,唤醒操作可广播到正在等待公用资源的多个TOQ条目。在步骤1108,T0Q 430确定在步骤1106中接收唤醒的TOQ条目是否正在等待保持不可用的其他公用资源。如果TOQ条目并未正在等待其他不可用资源,那么方法1100前进到步骤1110,其中TOQ 430允许执行访问请求的一个或多个周期。方法1100随后终止。
[0130]在步骤1108,如果TOQ条目正在等待其他不可用资源,那么方法1100前进到步骤1112,其中TOQ 430确定不可用资源是否在短期或瞬时基础上不可用。如果资源是短期不可用,那么方法1100前进到步骤1110,如上文。如果资源是长期不可用,那么方法1100前进到步骤1114,其中TOQ 430确定是否可从另一个TOQ条目窃取不可用资源。如果不可窃取不可用资源,那么方法前进到步骤1116,其中TOQ 430将TOQ条目置回到睡眠态中。方法1100随后终止。
[0131]在步骤1114,如果可以窃取不可用资源,那么方法1100前进到步骤1118,其中TOQ430从其他TOQ条目窃取不可用资源。TOQ 430可经由如上文结合图4所述的物理窃取或虚拟窃取来窃取资源。在一个示例中,仅在已过去预定时间量之后才可窃取不可用资源。在另一个示例中,仅最老的有效TOQ条目适格于从其他TOQ条目窃取资源。方法1100随后前进到步骤1110,如上文。
[0132]应理解的是,本文所描述的架构仅是例示性的,并且变形和修改是可能的。例如,虽然本文所描述的架构呈现在流多处理器310的加载存储单元303的上下文中,但可采用在与包括但不限于中央处理单元(CPU)、通用处理单元(GPU)相联合的、访问公用资源的任何处理单元中或采用在任何其他技术上可行的计算环境中。在又一个实施例中,每个RIB416不需要具有同样数目的条目,只要TOQ 430配置为跟踪每个RIB 416内的条目。在另一个示例中,在多个SM分区410和角逐公用执行单元的其他客户端的上下文内描述了技术。然而,在所公开的技术的上下文内支持其他配置,包括但不限于,访问多个执行单元的单个客户端或访问多个执行单元的多个客户端。可以以任何技术上可行的方式,包括但不限于,轮换时间片顺序、基于优先权的方法、或动态加载,来为各种客户端服务。在又一个示例中,在为多个SM分区410和针对公用执行单元的其他请求源服务的集中式控制单元的上下文中描述了所公开的TOQ 430。可替代地,可在每个SM分区410和客户端可管理单独的子TOQ的情况下采用分散式控制,其中每个请求的年龄与每个子TOQ有关。在这种情况下,可采用全局老化机制用于选择性的唤醒操作。
[0133]本文所描述的技术是关于公用资源访问操作来描述的,该公用资源访问操作诸如在线程跨发散的高速缓存行来访问存储器位置的情况下的跨多个线程的加载和存储访问请求。技术足够灵活以采用在存在公用资源访问请求的其他应用中。在一个示例中,本文所描述的技术不限于线程的执行,而是可针对可经由访问公用资源的多个功能处理单元进行的任何操作来加以采用。在另一个示例中,指令可跨公用资源而非高速缓存内的高速缓存行发散。这种资源可包括但不限于,高速缓存标签、高速缓存数据、寄存器库、以及所共享的存储器。执行公用资源访问请求的线程可访问公用资源的不同方面或部分,诸如高速缓存存储器内的不同集合或高速缓存集合内的不同路。在又一个示例中,在任何给定的操作期间,LSU 303可检索多个公用资源,诸如多个高速缓存行。在又一个示例中,给定的公用资源可具有多于一个的同时访问接口,其中当所有可用访问端口由其他请求者所消耗时拒绝访问。
[0134]本领域的普通技术人员应理解的是,本文所描述的公用资源配置仅是例示性的,变形和修改是可能的。例如,虽然本文将一些公用资源描述为如在集合关联高速缓存行中典型的具有集合和路,但其他公用资源配置可在所描述的技术的上下文中以任何组合的方式来加以采用,包括但不限于,直接映射高速缓存(典型地每集合具有一个路)、全关联高速缓存(典型地具有一个集合)、以及扇区高速缓存。在扇区高速缓存中,如由集合和路所代表的高速缓存行,可进一步再细分为扇区。在这种配置中,TOQ 430除通过集合和路跟踪之外还可通过扇区来跟踪公用资源的使用。在另一个示例中,可采用各种高速缓存行替换策略,包括但不限于,最近最少使用(LRU)以及最近最少分配(LRA)方法。
[0135]总而言之,所公开的技术提供经优化的方式以在进行与重演操作有关的公用资源访问请求的调度中维持公平性和顺序。具体地,流多处理器(SM) 310包括全序队列(TOQ)430,该全序队列430配置为针对在单个执行周期中未完成的访问请求而通过一个或多个重演操作来调度访问请求。如果所有公用资源已分配到访问请求或是另外可用的,那么允许访问请求执行一个或多个重演操作。如果访问请求正在等待至少一个长期资源,那么TOQ430将访问请求置于挂起有待资源的可用性的睡眠态中。当所需要的资源变成可用时,与访问请求相关联的TOQ条目置于唤醒态中。根据访问请求的年龄和公用资源的状态对访问请求给予优先级。当两个或更多个访问请求死锁等待相同资源时,TOQ可允许较老的访问请求从较年轻的资源请求窃取资源,使得每个访问请求能够完成执行。
[0136]有利地,较新的访问请求不会反复地阻止较老的公用资源访问请求取得进展。通过优先于对新访问请求来对已有的较老的访问请求分配公用资源而避免了优先级反转。因为在睡眠态中的访问请求不主动角逐公用资源,因此SM 310的资源被更有效率地利用。此外,通过允许较老的TOQ条目窃取分配到较年轻的条目的资源,使得与较老的条目相关联的访问请求能够完成执行,然后才是与较年轻的条目相关联的访问请求,从而避免死锁和活锁。进一步地,甚至在所需要的公用资源的集合在执行期间改变的情况下,在调度访问请求中的公平性和顺序也可得到维持。
[0137]虽然上述内容针对本发明的实施例,但可对本发明的其他和进一步的实施例进行设计而不脱离其基本范围,并且其范围可通过接下来的权利要求来确定。
【权利要求】
1.一种用于管理针对处理管线中的公用资源的请求的子系统,包括: 全序队列(TOQ),配置为实施以下步骤: 接收针对第一公用资源的第一请求; 确定所述第一公用资源不可用于到请求的分配; 作为响应,延迟为所述第一请求服务; 继延迟服务之后,接收针对所述第一公用资源的第二请求; 继接收所述第二请求之后,确定所述第一公用资源已变成可用于到请求的分配;以及在使所述第一公用资源对所述第二请求可用以前,使所述第一公用资源对所述第一请求可用。
2.根据权利要求1所述的子系统,其中所述TOQ进一步配置为实施以下步骤:针对所述第一请求在第一缓冲区中创建第一条目以跟踪所述第一请求的年龄,其中所述第一条目指示所述第一请求与至少所述第一公用资源相关联。
3.根据权利要求2所述的子系统,其中所述TOQ进一步配置为实施以下步骤:一旦接收所述第二请求,则针对与和所述第一公用资源相关联的请求相对应的任何条目来搜索所述第一缓冲区。
4.根据权利要求3所述的子系统,其中所述TOQ进一步配置为实施以下步骤:经由所述第一条目标识所述第一请求与所述第一公用资源相关联,并且作为响应,确定所述第一请求应在所述第二请求之前被服务。
5.根据权利要求2所述的子系统,其中所述TOQ进一步配置为实施以下步骤:针对所述第二请求在所述第一缓冲区中创建第二条目以跟踪所述第二请求的年龄,其中所述第二条目指示所述第二请求与至少所述第一公用资源相关联。
6.根据权利要求5所述的子系统,其中所述TOQ进一步配置为实施以下步骤:一旦确定所述第一公用资源可用,则针对与和所述第一公用资源相关联的请求相对应的任何条目搜索所述第一缓冲区。
7.根据权利要求6所述的子系统,其中所述TOQ进一步配置为实施以下步骤:经由所述第一条目和所述第二条目标识所述第一请求和所述第二请求与所述第一公用资源相关联并且所述第一请求老于所述第二请求,以及作为响应,确定所述第一请求应在所述第二请求之前被服务。
8.根据权利要求2所述的子系统,其中所述TOQ进一步配置为实施以下步骤:使第一条目创建在与所述第一缓冲区中的所述第一条目相对应的重演缓冲区中,其中所述重演缓冲区中的所述第一条目包括与用于与所述第一请求相关联的重演操作的所述第一请求相关联的执行信息。
9.根据权利要求2所述的子系统,其中所述第一条目进一步包括指示所述第一公用资源的状态的信息,并且所述第一公用资源的所述状态是,所述第一公用资源被所述第一请求所需要但未分配到所述第一请求,或者所述第一公用资源被锁定并且对所述第一请求不可用。
10.一种计算设备,包括: 全序队列(T0Q),配置为通过实施以下步骤来管理针对处理管线中的公用资源的请求:接收针对第一公用资源的第一请求;确定所述第一公用资源不可用于到请求的分配;作为响应,延迟为所述第一请求服务;继延迟服务之后,接收针对所述第一公用资源的第二请求;继接收所述第二请求之后,确定所述第一公用资源已变成可用于到请求的分配;以及在使所述第一公用资源对所述第二请求可用以前,使所述第一公用资源对所述第一请求可用。
【文档编号】G06F9/50GK103559088SQ201310188776
【公开日】2014年2月5日 申请日期:2013年5月21日 优先权日:2012年5月21日
【发明者】迈克尔·费特曼, 瑟利斯·加德雷, 约翰·H·埃德蒙森, 奥姆卡尔·帕兰杰佩, 阿杰纳·拉杰卓, 埃里克·莱尔·希尔, 拉杰史沃拉·塞尔瓦桑, 查尔斯·麦卡弗, 凯温·米切尔, 史蒂文·詹姆斯·海因里希 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1