一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

无序存储器请求跟踪结构和技术的制作方法

2022-02-22 02:06:20 来源:中国专利 TAG:


1.本文中的技术涉及流式(streaming)高速缓存存储器,并且更具体地涉及一种流式高速缓存存储器,其包括具有多个跟踪队列的存储器请求跟踪结构,该跟踪队列允许对存储器请求进行有序或无序跟踪。


背景技术:

2.图形处理单元(gpu)的工作负荷通常具有非常大的工作集-通常约为数百兆字节或更多,以生成单个图像帧。提供足够的片上高速缓存存储器容量来存储如此大的工作集是不切实际的。此外,高性能大规模并行gpu在等待丢失数据可用时不能停滞

他们需要能够向前推动并处理可用数据(即,高速缓存命中(hit)),即使其他数据(高速缓存未命中(miss))尚不可用,并且仍由存储器系统检索。
3.采用混杂的命中和未命继续进行的高速缓存体系结构称为流式高速缓存体系结构。参见例如patterson等人,计算机组织和设计:硬件/软件接口(computer organization and design:the hardware/software interface)附录c(nickolls等人,《图形和计算gpu》(graphics and computing gpus))(elsevier 2012)。过去,这种流式传输高速缓存已用于多种gpu架构中,包括nvidia的volta和turing架构。参见例如qiu等人的usp 10459861。标题为“用于各种存储器流量的统一高速缓存(unified cache for diverse memory traffic)”,通过引用并入本文。
4.在这样的架构中,流式传输多处理器(sm)级别1(l1)数据高速缓存包括流式高速缓存,该流式高速缓存用作从sm到存储器系统的带宽过滤器。qiu等人公开的统一高速缓存子系统包括数据存储器,配置为共享存储器和本地高速缓存存储器两者。为了处理不以共享存储器为目标的存储器事务,统一高速缓存子系统包括标签处理管线,其配置为识别高速缓存命中和高速缓存未命中。当标签处理管线为给定的存储器事务识别出高速缓存未命中时,该事务被推入先进先出(fifo)跟踪队列,直到从l2高速缓存或外部存储器返回请求数据为止。
5.在这种设计中,发生的第一次未命中可以在第二次未命中之前解决,发生的第二次未命中可以在第三次未命中之前解决,依此类推-即使在某些情况下存储器系统(例如,l2高速缓存)可能会在解决较早的未命中之前(例如通过主存储器)解决较晚的未命中。这意味着解决特定高速缓存未命中的延迟成为解决任何高速缓存未命中的最坏情况的延迟。
6.尽管传统的流式高速缓存设计通常只允许少量的未完成存储器请求,但更高级的高性能gpu(例如nvidia volta和nvidia turing)中的l1高速缓存设计为可容忍延迟并且可以具有许多同时地(concurrently)在途(in flight)的存储器请求(例如,同时最多可投放1024个独立的未决请求(outstanding request))。允许大量同时的未决存储器请求有助于避免sm停滞(stall),sm大规模地并行且同时地执行许多线程(例如,在一个实施例中,sm执行32到64个之间的独立的线程束,每个线程束包括32个同时线程),所有这些线程共享(并经常竞争)通用的l1高速缓存。由于与l1高速缓存从l2高速缓存或主存储器获取数据的
相关联的延迟相对较高,因此使用跟踪fifo来隐藏延迟,并且sm及其过程设计为可以预期由于此类高速缓存未命中而引起的延迟,并且可以进行有效的工作,同时等待将从存储器系统中检索的未命中数据。同时,存储器请求跟踪结构用于跟踪所有在途的请求,并在操作所需的所有数据返回到高速缓存时安排返回到sm并且请求进程可以继续执行。
7.如上所述的现有技术的gpu倾向于使用单个fifo作为存储器请求跟踪结构,其中每个循环中只有最旧(oldest)的未决存储器请求才有资格处理。单个fifo的优点是简单、节省空间和功耗,并减少了将请求与返回相匹配的统计。此外,在过滤纹理时,设计人员通常选择每次都以相同的顺序将多个样本解析为一个纹理(代表单个线程用于单个纹理查询),以避免将多个样本过滤(合并)为单一结果颜色时由于舍入误差而导致的差异。例如,通常有序处理单个纹理指令中的波前,以便一致地进行过滤。单个fifo通常足以应付此类工作负载。但是,在某些情况下,单个fifo可以创建行的头部(head-of-line)的阻塞,以延迟不在fifo头部的准备就绪请求,从而阻止系统利用设计中的并行性。一旦单个fifo已满,l1高速缓存停止向存储系统发送请求,最终导致sm停滞。
8.更详细地,将在l1的标签级(t)和l1的数据级(d)之间的概念延迟fifo称为“t2d fifo”(标签到数据fifo)。在本文中,“t2d”将指代这样的标签到数据fifo。这个概念性的t2d fifo具有有限的长度,对于某些先前的gpu设计,该长度为512个条目,但可以为任何所需的长度。在一个实施例中,该fifo非常宽,这意味着增大它可能需要大量芯片面积。t2d fifo旨在覆盖平均的l1未命中延迟,以防止sm停滞。
9.通常,所有条目都从l1tag推送到t2d fifo的尾部。在每个周期中,支持流式高速缓存的硬件检查fifo的头部,以查看头部条目的数据在l1数据中是否可用。如果数据准备就绪,则fifo从fifo中弹出头部条目,并将其发送到l1data以执行数据读取。
10.该fifo的严格有序性质产生两个问题:
11.线的头部阻塞:在每个周期中,从fifo中弹出的唯一可用的条目是头部条目。如果fifo中部有条目的数据准备就绪,它们将等待直到所有先前条目弹出为止-然后只有到达fifo头部后才有资格被移除。这会造成线的头部阻塞,并增加了sm容忍的延迟。这意味着观察到的平均延迟接近最坏情况下的l1未命中延迟,并且设计不会看到l2高速缓存中命中的操作更低的延迟。如果要连续流式传输新请求,则从理论上讲可以隐藏这种延迟,但这在实际操作中并不总是发生。
12.当fifo已满时,l1tag停滞:只要在t2d中有比fifo的长度更多的条目(例如512个条目)待处理,则l1tag停滞。这会阻止l1tag中所有流量的前进,包括通常能够绕过t2d的命中。这也阻止了存储器系统为任何新的存储器请求提供服务。
13.因此,尽管用于流式高速缓存的基于存储器请求跟踪结构的单个fifo具有简单性的优点,并且在容忍延迟的gpu设计中通常足以满足许多应用程序(尤其是需要保持序列化的流量)的需求,在单个fifo的约束影响效率和性能的情况下,可能需要增加附加的复杂度以更快地进行。
附图说明
14.请结合附图参考示例性非限制性实施例的以下详细描述,其中:
15.图1示意性地示出了用于流式高速缓存的存储器请求跟踪结构的现有设计与一个
示例实施例之间的对比。
16.图2是示出用于流式高速缓存的存储器请求跟踪结构的一个实施例的逻辑架构的示意图。
17.图3示出了图2实施例的用于流式高速缓存的存储器请求跟踪结构的示例物理视图。
18.图4示出了示例非限制性跟踪队列映射模式。
19.图5示出了一个实施例中的示例跟踪结构条目填充。
20.图6-22是以引用方式并入的qiu等人的标题为“用于各种存储器流量的统一高速缓存(unified cache for diverse memory traffic)”的美国专利usp10459861的描述。
具体实施例
21.本文的示例非限制性技术创建多个跟踪队列,并且如果准备就绪,则允许每个跟踪队列的头部在每个周期被移除。gpu检查所有跟踪队列的头部并从准备就绪的跟踪队列中释放一个条目,而不是简单地检查每个周期的t2d头部。因此,一个实施例用无序跟踪结构代替或补充先前的单个fifo有序跟踪结构,该无序跟踪结构以最小的硬件成本以及不需要软件改变来提高性能。
22.在一个实施例中,这种无序跟踪允许无序地处理某些类型的请求(例如,通用计算负载/存储和射线跟踪加速数据结构请求),同时具有足够的灵活性以处理其他请求(例如,纹理数据),从而提供了支持有序和无序存储器请求流量流的能力。同时,示例实施例仍然允许针对诸如纹理工作负载之类的任何工作负载的跨线程束的无序存储器请求流量流。利用系统可容忍度程度的无序存储器访问以及相关联的执行可以引起显著的性能和效率提高。例如,无序返回处理可以提高线程束中某些工作负载类型的处理效率,而这些工作负荷类型不需要维护有序处理或有序返回,而可以支持在同一线程束内的无序返回。
23.图1示出了提供单个fifo的现有设计(在左侧标记为“today”)和提供n个跟踪队列(其中n》1)的新设计(在右侧标记为“proposal”)之间的对比。如左侧所示,不是通过单个fifo以跟踪所有未决的存储器请求(或针对特定类型的工作负载的所有未决的请求),一个实施例提供了多个(n)跟踪队列,其中n是动态大小的。一个示例非限制性实施例具有n个(例如48个)跟踪队列,其对应于sm可以同时地执行的线程束的数量n个(例如48个)。但是,跟踪队列的数量n可以是大于1的任何整数,并且不必与线程束的数量匹配。此外,数量n可以从一种设计更改为另一种设计,具体取决于多种因素,例如一次可以处理的并行线程束的数量,系统处理的存储器请求流量的混合,sm存储器接口的类型和数量,芯片面积的数量将是专门用于这部分的设计以在面积和性能以及其他因素之间进行权衡。以及可以根据需要在编程的基础上将分派(allocate)给特定工作负载的n个跟踪队列的数量k动态地分派,以提供有序执行或任何所需程度的无序处理。例如,某些工作负载可能需要严格地有序执行,而其他工作负载可以按任何顺序执行,而其他工作负载可能仍需要相对于特定工作组(例如,线程束)有序执行,但相对于其他工作组(线程束)的可以无序执行。一个实施例足够灵活以动态地容纳和启用任何或所有这些执行模型。
24.在一个实施例中,n个跟踪队列每个包括将指针存储到较大结构的fifo。这种安排允许在n个跟踪队列之间进行动态分区。一个实施例使用动态控制的策略,该策略将未决请
求分配给特定的跟踪队列。在一个实施例中,最简单的策略将来自同一线程束的所有工作分配给同一跟踪队列。这提供了线程束内的有序存储器返回,而跨线程束的无序存储器返回。由于线程束内的返回仍然是有序的,因此无需进行任何软件更改即可获得性能优势。另外,由于在一个实施例中,线程束中的请求有序排放(drain),所以不需要额外的累加器精度或存储来确保经过滤的纹理操作和其他请求的算术一致性。此外,对跟踪队列的请求分配可以是动态的,并且基于许多因素。一些此类分配可能使得请求在n个跟踪队列中几乎均匀地分配(distribution),而其他分配可能使得在跟踪队列中的工作分配不均,从而提供了灵活性。
25.特别地,在本文的实施例中,分配给特定跟踪队列的任何工作将由该跟踪队列有序处理。可以利用此功能为工作负载提供有序服务,例如某些期望有序返回的纹理映射过程,从而从这种有序服务中受益。另一方面,某些其他类型的工作负载(例如,光线跟踪边界体积层次结构压缩的小树存储器请求)可能不需要有序服务,并且可能会受益于无序服务。在这种情况下,无序访问可以分布在n个跟踪队列中,以减少任何单个长延迟访问可以阻止大量其他访问并因此使光线跟踪器前进的机会。参见,例如,usp10580,196。
26.在一个实施例中,在每个周期期间,检查n个(例如48个)跟踪队列中的每一个的前面条目,以查看高速缓存中填充数据是否准备就绪。在一个实施例中,针对n个跟踪队列中的每一个并行执行该检查。一旦确定各种跟踪队列的头中的任何一个准备就绪,就可以将这些条目从跟踪队列中移除并发送给sm,从而对那些相应的跟踪队列取消阻塞。
27.在一个实施例中,利用跟踪结构来完成每个周期检查所有n(例如48个)队列的能力,该跟踪结构存储每个队列正在等待的扇区。在一个实施例中,当“gnic填充”(见下文)将数据返回到l1高速缓存时,在每个周期更新该跟踪结构。在某些周期中,多个跟踪队列将具有准备就绪的条目。在一个实施例中,使用循环仲裁器(round robin arbiter)来选择准备就绪的跟踪队列。一旦选择准备就绪的条目后,将从跟踪结构中移除该条目,在高速缓存中处理请求,然后将数据发送回sm。
28.该设计的示例非限制性新颖方面包括:
29.动态大小的跟踪队列:不是每个跟踪队列都有固定的容量,而是一个示例设计使用了三个不同的存储表,这些存储表使用一系列的链接列表指针进行遍历,从而允许跨跟踪队列的动态容量。如果只有一个队列处于活跃状态,则它可以在跟踪结构中分配所有存储。如果所有n个(例如48个)队列都处于活跃状态,则它们每个都可以分配跟踪结构的某些部分。这种方案允许最大数量的存储器请求始终处于在途状态,而不管有多少个跟踪队列处于活跃状态。
30.用于不同流量量类别的动态地配置的队列映射策略:一个实施例具有控制队列映射策略的动态运行时间决策策略。这允许针对不同类型的存储器访问请求(例如本地/全局(“l/g”)存储器事务流量与纹理/表面(“tex/surf”)流量与树遍历单元(ttu)流量或其他)做出不同的映射决定。在这种情况下,本地/全局、纹理/表面和ttu流量是具有不同跟踪和排序要求的不同存储器流量类。例如,本地/全局流量与本地或全局存储器中的负载有关;纹理/表面流量与访问存储在(例如,纹理或共享的)(通常由着色器使用)用于渲染纹理和/或表面的存储器中的数据有关;以及ttu流量涉及由基于硬件的“树遍历单元”(ttu)发起的存储器访问,以遍历加速数据结构(ads),例如用于射线跟踪的有界体积层次结构(bvh)。对
于这些不同的策略,不同的工作负载将看到不同的性能,并且动态控制允许运行时间优化。在一个实施例中,将来自单个线程束的ttu请求映射到所有跟踪队列上,从而最大化了不必有序服务的ttu流量的无序返回的数量。在一个实施例中,本地/全局请求从单个线程束映射到同一跟踪队列。其他实施例可以跨多个跟踪队列映射来自单个线程束的本地/全局请求。
31.支持跨全局事件进行排序:在一个实施例中,l1高速缓存还处理诸如纹理首标(header)/采样状态更新数据包和数据时隙引用计数器清除令牌事件之类的事件。具体地,如usp 10459861中结合图11a-11d和引用计数器清除令牌事件中所述,在一个实施例中,如果引用计数器604相对最大值数据存储器430饱和,则创建数据槽600的副本以处理将来的存储器事务和/或引用计数器604锁定到最大值,并且不增加或减少。当将标签存储器414中与数据槽600相关的标签随后逐出时,将具有指向数据槽600的指针的令牌推到逐出fifo 424上并将其调度用于逐出。在出队后,逐出fifo 424检测到数据槽600已饱和,然后使用指向数据槽的指针将令牌排队到t2d fifo420。在令牌到达t2d fifo 420的头部时,数据槽600中的引用计数器604重置为0。
32.这些事件在所有进行中的请求中创建了全局排序要求(不仅是单个线程束中的请求)。一个实施例在跟踪队列中增加了排序要求,以对性能的影响最小的情况下在功能上处理这些全局排序要求。
33.支持跟踪结构中的有序与无序分派:在一个实施例中,有序分派(allocate)和解除分派(deallocate)保持跟踪信息的存储结构,而对来自这些结构的请求进行无序处理。可以模拟和量化分派和解除分派这些结构无序的影响,这是其他实施例的特征。
34.支持基于不同流量类别的不同粒度的工作项:不同流量类别可能需要不同粒度的项原子地(atomically)从跟踪结构中释放。对于可能需要在tex df管线中进行过滤的纹理操作,一个实施例一起释放整个结构的来自跟踪结构的所有请求。从t2d释放条目以指令粒度发送到l1data允许下游阶段(例如dstage/fstage)继续在工作的指令粒度单元上。对于诸如本地/全局或ttu指令的其他操作,一个实施例可以一次仅释放单个波前(通过将诸如64个线程的多个执行线程数据一起组合而创建的可调度单元)。在一个实施例中,利用一种特殊的机制来处理产生大量波前的指令。
35.在一个实施例中,n个跟踪队列中的每一个都包含指向t2d中的条目的指针,其中以与先前的有序设计相同的方式来存储t2d数据包的数据。在一个实施例中,跟踪队列是指针的链接列表,从而每个跟踪队列可以具有在1和n(例如512)个条目之间的动态容量。
36.一个实施例利用跨线程束无序的同时以程序顺序保持线程束内的所有操作。这种简化避免了诸如指令执行顺序分配之类的软件更改,并且仍然获得了大量可能的性能优势。其他架构和实施例可以考虑线程束的无序执行。
37.一个实施例执行有序的t2d分派/解除分派,这意味着可以从t2d中的任意位置移除条目,但是它们的存储不能收回直到它们到达t2d的头部。进行这种简化是为了以降低性能的代价来减少设计工作。在其他实施例中,其他折衷是可能的。
38.特征微结构设计细节
39.在一个示例非限制性实施例的上下文中,图2示出了t2d数据包从标签检查(tag check)2002直到传递给l1data(2004a,2004b,2004c)的生命。图2的结构可以用于图9的“t2d fifo 420”块。图9的统一高速缓存316沿着不同的数据路径处理不同类型的存储器事务。统一高速缓存316以低延迟处理沿数据路径440的共享存储器事务。统一高速缓存316经由标签管线410处理非共享存储器事务。当发生高速缓存命中时,标签管线410沿着低延迟数据路径442引导非共享存储器事务,并且当发生高速缓存未命中时通过t2d fifo 420和数据路径444路由存储器事务。统一高速缓存316还处理从纹理管线428接收的面向纹理的存储器事务。在高速缓存命中或高速缓存未命中的情况下,标签管线410通过t2d fifo 420和数据路径446引导面向纹理的存储器事务。
40.在一个实施例中,本地/全局&ttu高速缓存未命中流量和所有纹理(“tex”)(高速缓存命中和高速缓存未命中)流量通过t2d 420,其中本地/全局&ttu流量与纹理流量在漏极逻辑块1018(a)、1018(b)和相关的单独的流式多处理器(“sm”)接口处分散。同时,本地/全局&ttu高速缓存命中绕过t2d fifo,而是通过快速路径传递到sm l1data命中接口。
41.改进的图4的t2d fifo 420的主要阶段包括:
42.·
tag check 2002是“t2d”中引用的标签。该标签检查2002类似于常规数据高速缓存中存在的标签检查-响应于存储器访问,标签检查基于存储的标签确定所请求的数据是否存在于高速缓存中。如果存在数据,则标签检查2002确定命中。如果不存在数据,则标签检查2002声明未命中,并发起对l2高速缓存和存储器子系统的其余部分的存储器访问。
43.·
关于围绕本地/全局和ttu命中/存储的t2d的“快速路径”的更多详细信息,请参见qiu等人的usp10459861,可减少不需要序列化的命中的延迟。
44.·
队列映射2006:标签检查2002将未命中流量发送到队列映射2006。队列映射2006确定传入的未命中请求应映射到哪个跟踪队列2008。动态控制的策略用于确定此映射(可以根据流量类型使用不同的策略选项)。最简单的策略是“从线程束0的所有未命中都进入跟踪队列0,从线程束1的所有未命中都进入跟踪队列1,依此类推。”45.在一个实施例中,发送到跟踪队列的所有数据包从它们被插入到跟踪队列中直到它们被推送到提交fifo 442(见图9)的顺序保持不变。无序发生在不同的跟踪队列之间。在一个实施例中,对于所有的本地/全局和单个线程束的纹理数据包将总是映射到相同的跟踪队列。在一个实施例中,将ttu数据包以循环方式跨多个跟踪队列进行映射。
46.·
跟踪队列(“tq”)2008(0),2008(1),

2008(n=47):跟踪队列2008包含动态数量的数据包,这些数据包已完成标签检查并等待插入检查器选择器2009。在一个实施例中,每个跟踪队列2008构成一个fifo,该fifo保持队列映射2006为其分配的未命中流量的先进先出顺序。
47.·
检查器选择器2009:在一个实施例中,检查器选择器2009为每个周期选择一个具有有效条目和空检查时隙2010的跟踪队列2008。然后,将与单个波前相对应的一个t2d条目从跟踪队列2008移动到检查阶段2010。它将用该条目仍在等待的dslot和扇区填充检查阶段2010。其他实施例可以在一个周期内移动多个条目。
48.check(2010(0),2010(1),

2010(n=47):可操作地连接到跟踪队列的头部2008(0)-2008(n)。检查块2010存储来自存储系统的等待的有关响应跟踪队列2008的状态信息。在一个实施例中,“gnic填充信息”信息来自存储系统的gnic接口,并返回到高速缓存中,该gnic接口提供存储系统对访问请求的响应。图2示出了图9的420的更详细视图,以及gnic填充接口本身(从存储器返回)可以在图9中显示为返回t2d fifo 420而不是m-stage426。来
自gnic接口的这些响应称为“gnic”填充信息”,在一个实施例中,每个时钟提供一个扇区。每次gnic填充发生时,每个跟踪队列2008的头部的检查2010将更新,以反映填充的dslot/扇区现在在高速缓存中有效,并且条目不应再等待它。请注意来自存储系统的相同gnic填充响应可能潜在地满足多个跟踪队列2008的头部,因为在一个实施例中,gnic填充可以表示包括数据块的多个数据值现在在高速缓存中可用,并且也可能有多个跟踪队列也可能正在等待相同的数据值。一旦检查阶段2010中的条目不再等待任何扇区,则表明已经准备好将其从检查中删除。
49.·
弹出选择器:每个周期,弹出选择器从准备就绪的条目池中选择一个检查条目2010(k),以从检查阶段2010中删除并插入到已检查的队列2012中。此“弹出”会导致从检查阶段2010获得值。在一个实施例中,每个周期将n个条目从检查阶段2010移动到检查队列2012,其中n是任何正整数,使得弹出选择器选择在当前周期中要移动到被检查队列2012中的哪个或多个条目。其他实施例可以允许多个或所有可用条目每个周期从检查阶段2010移动到检查队列2012。弹出选择器可以使用轮询或任何其他更复杂的选择器算法来选择选择。注意:在一个实施例中,来自跟踪队列2008(1)的条目被插入到检查队列2012(1),来自跟踪队列2008(2)的条目被插入到检查队列2012(2),依此类推。
50.·
检查队列2012:检查队列2012是t2d数据包的链接列表,其中,数据包引用的所有数据都存在于高速缓存中。在一个实施例中,条目保留在检查的队列中,直到该指令或t2d提交组的所有条目都插入到检查的队列2012中,并且满足检查的队列和状态数据包队列之间的互锁。
51.·
提交选择器2014:提交选择器2014选择一个队列。在每个周期中,提交选择器2014选择一个具有准备就绪指令或t2d提交组的已检查队列,并将这些条目从已检查队列2012移动到提交fifo。在一个实施例中,存在用于本地/全局和ttu流量的提交选择器2014(a)和用于纹理流量的提交选择器2014(b)。在一个实施例中,提交选择器2014确保快速路径与慢速路径之间的互锁得到遵守。提交选择器2014可以使用轮询或任何其他更复杂的选择器算法。一旦选择了队列,该队列上的头部条目的解除分派所使用的资源的解除分配就独立于选择程序本身。
52.·
提交fifo 2016:提交fifo是数据包的最终顺序,然后通过排出逻辑2018将其排出到l1data和sm存储器接口。在一个实施例中,每个周期将k个检查队列2012的值移至排出逻辑2018其中k是任何正整数,但其他排列也是可能的。
53.·
排放逻辑2018在提交的值之间循环,并将关联的l1数据发送回适当的sm接口(在此实施例中,本地/全局和ttu流量之间共享一个排放逻辑2018(a),以将此类流量发送回sm的本地/全局&ttu接口,以及第二个消耗逻辑2018(b)用于将纹理流量发送回sm的纹理流量接口)。
54.图2是逻辑视图。跟踪队列2008和已检查队列2012不必是具有固定大小的物理fifo。而是,它们可以包括指向t2d的指针的动态大小的链接列表。
55.图3示出了示例性非限制性物理视图,该示例性非限制性物理视图包括要添加到设计中的新指针,以及控制逻辑的哪些部分在哪些跟踪指针集上进行操作。图3中所示的结构表示用于跟踪的不同物理存储结构。因此,存在每个跟踪队列表的阶段;每个波前表的状态;和全局状态信息。
56.在一个实施例中,每个跟踪队列表的状态可以通过跟踪队列号存储当前跟踪队列插入指针;接下来放入指针;检查准备就绪标志;检查队列插入指针;下一个要提交的fifo指针;以及检查队列中指令包结尾的数量。
57.在一个实施例中,每个波前表的状态可以存储波前编号;有效位;跟踪队列中下一个波前的标识;以及指向先前的t2d fifo的t2d指针。在一个实施例中,该表通常是有序写入的,并且直到表中的最后一个波前完成处理未命中之前都不能回收该表。在其他实施例中,这样的表可以被随机访问或以其他方式不有序访问,并且相关联的潜在复杂性增加。
58.在一个实施例中,该全局状态表用于跟踪流过高速缓存的全局排序事件(在所有跟踪队列中是全局的)的状态信息。全局状态表可以包括两个子表。所述第一表可以包括与跟踪队列插入指针相关联的状态数据包跟踪队列指针以及要放入提交fifo中的下一个;以及提供t2d头部和t2d尾部的t2d指针表。
59.映射到跟踪队列
60.模式#1(图4中的顶部图)将所有数据包映射到跟踪队列0,根本不提供无序的未命中跟踪,从而模拟现有设计。出于各种原因(例如在潜在错误的情况下),可以使用此方法。
61.模式#2(图4中向下的下一个图)为到流量队列0的本地/全局和纹理流量提供有序的服务,并为ttu数据包提供无序的未命中跟踪。再一次,由于各种原因(例如在潜在的错误的情况下),可以使用此模式。
62.模式#3(图4中的第三个图)在本地/全局与纹理流量和ttu流量之间存在意外干扰的情况下,可以用作后备。模式3提供了基于线程束号码的映射到单独的跟踪队列,并且ttu数据包在剩余队列中轮流映射。
63.模式#4(图4底部图)期望将是最灵活的,并提供最高的性能。它为每个线程束提供了自己的本地/全局和纹理数据包跟踪队列,并在所有跟踪队列之间映射ttu流量循环(由于ttu流量没有有序要求,因此无需进行有序服务)。
64.上述四种模式是非限制性示例;许多其他映射也是可能的。
65.检查器选择器2009
66.检查器选择器2009和检查器管线被设计为处理在跟踪队列(tq)2008中排队的波前(不包括状态包队列2020和逐出长队列),并将这些波前传递到检查阶段2010。在一实施例中,检查器管线(在选择之后)本身是两个管线阶段深。由于该管线的深度,在一个实施例中,检查器选择器2009无法知道何时选择(pick)给定的波前,是否可以安全地在下一个周期再次从相同的tq 2008进行选择,因为第一波前可能由于未命中而停滞在检查阶段2010中。在一个实施例中,该限制导致设计具有两个不同且相互竞争的任务:1)最大化性能2)最小化浪费的精力。以这种方式,在一个实施例中的检查器选择器2009设计已经实现为将其设计为尝试和平衡这些任务的算法的集合。在一个实施例中,检查器选择器2009管线可以基于多个不同的独立标准的组合来进行选择器选择。
67.在选择之后,所选择的波前进入检查器管线。在该管线的第一个周期(rtl中的cp2)中,使用存储在每个波前表的图3状态中的波前的wave_id读取wave和chklink ram。在一个实施例中,wave ram读取传送确定波前命中或未命中所必需的信息(其dslots和half_sector_mask),并且chklink ram提供更新tq检查头部指针所必需的信息。在检查器管线的第二个周期(rtl中的cp3)中,标记库由dslot索引,并产生命中/未命中信息,该信息与从
wave ram中读取的half_sector_masks相结合。然后,该命中/未命中信息传递到检查阶段2010。此外,tq检查指针从cp3更新,以供时期(age)仲裁者使用。
68.检查阶段2010
69.为了提供检查所有跟踪队列的头部条目的能力,我们引入了图5所示的新的跟踪结构。在一个实施例中,每个标签库有一个跟踪结构,并且有多个(例如,四个)标签库。跟踪结构在每个跟踪队列2008中存储dslot id和头条目仍然需要的扇区。在一个实施例中,为了填充检查阶段2010,了解t2d条目需要的所有dslot以及其他dslot中需要哪些扇区是有帮助的。总体策略是:1)每个请求在通过检查器选择器时都会被检查一次。当时,它记录了所需的dslot id的&扇区中哪些已经存在,哪些仍然未命中。从那里,它位于图5中的跟踪结构中,直到所有剩余的dslot id和扇区都准备就绪为止。对于给定的请求,可以用两种方法将其标记为准备就绪:或者它在通过“检查”时(由检查器选择器选择时)准备就绪,或者它处于图5跟踪结构中,直到看到dslot/扇区(sector)由gnic填充。跟踪结构仅基于gnic填充跟踪更新,因此,在一个实施例中,硬件确保在插入时更新有效位以反映当前的高速缓存状态。这可能涉及添加旁路,以覆盖从高速缓存中读取扇区有效状态到填充跟踪结构并开始接收gnic填充更新之间的1或2个周期。这样可确保在查询高速缓存状态到填充条目之间的时间内,不会丢失gnic填充。
70.在每个gnic填充上,一个实施例中的硬件在与dslot id的标签库相对应的跟踪结构中进行匹配,然后更新用于匹配dslot id的有效位。当4个不同条目(针对不同的标记库)中的每一个的所有4个扇区有效位均有效时,则硬件声明跟踪队列2008已准备就绪,可以将条目移出存储器,并用在该跟踪队列中的下一个条目填充存储器。在图5中对此进行了详细说明,该图显示了不同tq 2008的“准备就绪”和“未准备就绪”状态。
71.提交选择器2014/遵守指令边界
72.对于局部/全局和纹理/表面操作,单个指令可以生成多个t2d条目。在一个实施例中,来自单个指令的所有这些条目将一起留在管线中。具体地说,在一个实施例中,tex dstage/fstage希望在切换到其他四边形之前对整个四边形的所有条目起作用。
73.在一个实施例中,条目保留在检查队列2012中,直到该指令的最后一个条目到达。一旦指令的所有条目都在检查队列2012中,则硬件将它们全部移到提交fifo 2016中。对于本地/全局&ttu请求,存在单独的提交fifo 2016(a),并且存在另一个单独的提交fifo 2016(b)用于纹理请求。在一个实施例中,提交fifo 2016具有小的固定容量,并且用于在l1tag和l1data之间缓冲请求。
74.l1data从提交fifo弹出条目并执行数据读取。然后,将t2d中的条目标记为无效。
75.一旦无效条目变得最旧(通过到达t2d fifo的头部),便会回收它们的存储,并可以为新条目重新分配它们。这称为有序分派/解除分派。
76.状态数据包
77.在一个实施例中,状态数据包沿着纹理管线向下发送,并且包含关于纹理头部/采样器的信息。在一个实施例中,这种状态中的一些在dstage/fstage中使用。在先前的顺序t2d设计中,状态数据包作为数据包通过t2d发送,以确保相对于需要该状态的纹理指令进行排序。在提供乱序处理的一个实施例中,乱序(ooo)的数量受到限制,使得状态包相对于引用它们的纹理请求保持在程序顺序中。
78.为了确保适当的排序,一个实施例添加了专用于保持状态数据包的附加跟踪队列2020(“状态数据包队列”)。然后,当硬件确定条目是否适合从已检查队列2012移到提交队列2016时,它将状态数据包的期限与已检查队列中条目的期限进行比较。在一实施例中,仅纹理/表面必须遵守相对于状态数据包的排序;本地/全局和ttu可能会忽略此状态数据包使用期限测试。在一个实施例中的示例非限制性特征是:
79.·
本地/全局和ttu数据包不将使用期限与状态数据包队列进行比较
80.·
如果状态数据包队列中的条目早于所有其他条目,则仅有资格移入提交队列2016
81.·
如果纹理/表面操作早于状态包队列的头部(或者状态包队列为空),则可以移动到提交fifo中
82.l1tag 2002也可能在属于同一指令的波前之间接收状态数据包。为了处理这种情况,在一个实施例中,硬件依赖于具有以下扩展的t2d提交组概念:
83.·
当状态数据包到达l1tag时,如果l1tag当前处于处理指令的中间,它将在“每个波前的状态”波前存储表中填充的最后一个波前上,设置t2d提交组标志的末端。
84.通过设置t2d提交组标志的末端,系统保证在处理状态包之前,将状态包之前的所有波前从t2d中删除。
85.处理产生大量波前的指令
86.一些纹理指令可以为单个纹理指令生成数千个t2d条目。因此,如果系统等到最后一个条目到达,则可能出现死锁(deadlock)情况。为了处理这些事件,一个实施例引入了一个额外的比特来表示一个数据包是t2d提交组中的最后一个数据包。当l1tag 2002将请求发送到跟踪队列2008时,它计算当前指令已发送了多少个数据包。在一个实施例中,可编程的动态运行时间决策值控制t2d提交组中的波前的最大数量。在一个实施例中,该动态运行时间决策值的默认值可以是32。每次生成特定数量(例如32个)以上的t2d数据包时,最后一个(例如第32个)数据包被标记为“t2d提交组的末端”。一旦设置了t2d提交组结束标志的队列开始耗尽,其他队列就无法耗尽,直到为所选队列看到指令结束标志为止。在一个实施例中,当确定条目是否可以从检查的队列2012移动到提交fifo 2016时,使用末端-t2d提交组标志。
87.在一个实施例中,如果满足以下条件,则有资格从检查队列2012中移动条目以提交fifo 2016:
88.·
一条指令的所有条目都在检查队列2012中,这意味着已设置指令末端标志的数据包已到达检查队列。
89.·
满足状态数据包期限检查。
90.··
t2d提交组中的所有条目都在检查队列2012中,这意味着已设置t2d提交组标志末端的数据包已到达检查队列。在一个实施例中,仅当该t2d提交组的第一个分组是所有48个跟踪队列中最旧的分组时,才将这些分组从检查队列2012移动到提交队列是有效的。在一个实施例中,这是通过将数据包的t2d布置与t2d尾指针进行比较来完成的。(此方法之所以有效,是因为有序执行了t2d的分派/解除分派)。
91.快速路径和慢速路径之间的互锁
92.一个实施例保证了在将项目插入快速路径(参见图2)之后插入到t2d(慢速路径)
中的项目将始终在来自快速路径的项目之后到达l1data,即,慢速路径始终慢于快速路径。该保证在一个实施例中是起作用的,以保证返回正确的值。例如,在一个实施例中,如果系统执行表面存储(sust),然后执行表面加载(suld)到相同的地址,则suld需要返回由sust写入的数据。由于sust采用快速路径而suld采用慢速路径,因此,如果慢速路径比快速路径快,则suld可以读取陈旧数据,而不是来自sust的数据。
93.先前通过慢速路径与快速路径之间的互锁来做出保证。当在快速路径上推送条目时,它将获取t2d尾指针和cbuf时期的快照。然后遵循以下规则:
94.·
始终能够处理快速路径中的条目
95.·
仅当其t2d指针与快速路径中头部条目存储的捕捉的t2d指针不同时,才能从慢速路径弹出条目。
96.如果遵守以上两个规则,则快速路径将始终比有序t2d的慢速路径快。
97.假设有序分派/解除分派,可以用无序t2d扩展上述方案。在快速路径上推送条目时,它会记录t2d尾指针(这是用于有序分派/解除分派的尾指针)。然后,在一个实施例中可以遵循以下规则:
98.·
始终能够处理快速路径中的条目
99.·
仅当其t2d指针早于快速路径中起始条目存储的捕捉的t2d指针时,才能处理慢速路径中的条目。
100.在一些实施例中,以上规则足以保证快速路径总是比具有无序的t2d的慢速路径快。
101.一个实施例提供了以下两种可能的选项来实现上述比较测试:
102.·
选项1:如果指令或t2d提交组在快速路径中通过了t2d指针和捕捉的指针之间的比较,则提交选择器2014仅适合选择检查队列2012。将使每个检查的队列使用一个比较器,但性能最高。
103.·
选项2:提交选择器2014选择满足以下三个条件的已检查队列2012,该条件规定了何时可以将条目从已检查队列移动到提交队列2016,然后将t2d指针与从快速路径捕获的t2d指针进行比较。这将仅需要一个比较器。如果比较失败,则不会有任何条目移动到该循环的提交队列,而在下一个周期,提交选择器将选择另一个已检查的队列。在一个实施例中,直到与快速路径捕捉的t2d指针的比较变得有效之前,提交选择器2014才停顿是不够的。
104.引用计数器清除令牌
105.在一个实施例中,每个dslot包含引用计数器,该引用计数器对在t2d中对该dslot的运行中引用的数量进行计数。将波前推入t2d时,此引用计数器会增加。在一实施例中,快速路径中的引用不操纵这些计数器。在l1data中读取dslot时,引用计数器递减。在一个实施例中,只有具有等于0的计数器的dslot才有资格被重新分配给另一标签。引用计数器的宽度确定单个dslot可能存在的运行中请求的数量。当发生超过此数量的在途参考时,引用计数器将饱和并保持最大值。在一个实施例中,饱和参考计数不能减小。当具有饱和引用计数器的dslot的标签从l1tag无效时,特殊的参考计数(refcount)刷新令牌(“rcft”)将被推入t2d。当此令牌到达t2d的头部时,可以确保不再有对该数据线的在途引用,并且可以将dslot重新分配给其他标签。
106.由于rcft依赖于t2d是有序的的事实,因此rcft可能会导致t2d出现问题。用于状态数据包的方案可以扩展为处理rcft。在一个实施例中,与状态数据包相比,使用了类似的用于rfct的机制,该状态数据包具有特定的与rfct的排序要求的轻微不同的排序要求。使用此方案,排序请求对遵守rfct排序要求的性能影响可以忽略不计。
107.在一个实施例中,本文的技术在被认为很重要的一组工作负载中提高了gpu级性能。可实现的性能提高取决于工作负载的性质-一些单独的“存储桶”(处理组,例如图形处理)看到了更高的性能改进。执行系统也变得更加高效,因为已经满足存储器请求的线程或线程束可以访问流式高速缓存并继续执行,而不必等待队列头部的另一个线程或线程束。
108.以上引用的所有专利和出版物均通过引用并入本文。
109.尽管已经结合当前被认为是最实际和优选的实施例描述了本发明,但是应当理解,本发明不限于所公开的实施例,相反,其意图是涵盖所附权利要求的精神和范围内所包括的各种修改和等效布置。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献