多级指令高速缓存预取的制作方法

文档序号:6383417阅读:403来源:国知局
专利名称:多级指令高速缓存预取的制作方法
多级指令高速缓存预取技术领域
本发明总地涉及计算机架构,并且,更具体地,涉及用于多线程处理器的多级指令高速缓存预取。
背景技术
在诸如多线程处理器的高速计算系统中的惯例是利用多级高速缓存系统来在获取(fetch)指令期间减少延迟。第一级高速缓存级别称为一级(LI)高速缓存并且一般是与处理器紧密相关的小型高速存储器。LI高速缓存通常具有各种高速缓存级别的最低存储器访问延迟并且含有处理器频繁访问或有可能最近要访问的指令。当在由处理器访问指令之时或之前将指令存储在LI高速缓存中时,性能得到提高。二级(L2)高速缓存一般是比LI高速缓存更大且更慢、但比系统存储器快的存储器。一些高速缓存系统可采用在LI和L2高速缓存之间的、延迟和大小处于LI和L2高速缓存之间某处的中间级(L1.5)高速缓存。
常规地,当处理器访问新指令时,处理系统内的获取单元首先在LI高速缓存中搜寻指令。如果LI高速缓存命中(即指令实际上存在于LI高速缓存中),那么转移(transfer)指令并执行存储器访问操作。如果指令不在LI高速缓存中,那么LI高速缓存未命中(miss),并且获取单元不得不尝试在L1.5高速缓存中寻找指令。如果在L1.5高速缓存中未命中,那么获取单元随后在L2高速缓存中搜寻指令,并且如果L2高速缓存未命中,那么最后搜索系统存储器。
当以可预见的方式进行指令访问时,可通过在处理器尝试从LI高速缓存访问相应的指令之前从L1.5高速缓存预取高速缓存线并转移这些高速缓存线至LI高速缓存来改善LI高速缓存命中率。处理器可预见地在连续的存储器地址位置访问指令,除非出现至非序列性(non-sequential)存储器位置的支路。因此,如果处理器正在访问在特定LI高速缓存线的位置,那么获取单元一般从L1.5高速缓存预取高速缓存线,其含有紧跟随当前LI高速缓存线的存储器位置。该下一个的高速缓存线可称为预取目标,并且位于在紧跟随与当前LI高速缓存线相对应的L1.5高速缓存地址的L1.5高速缓存内。如果预取操作成功,那么到处理器到达紧跟随当前LI高速缓存线的存储器地址位置时,下一个LI高速缓存线已从L1.5高速缓存被预取并存储在更快的LI高速缓存内。用这种方式,成功的预取增加了在LI高速缓存内的命中率。序列性的存储器访问一般致使高速缓存命中。可在高速缓存层级内的任一级采用类似的技术。例如,L1.5高速缓存可从L2高速缓存预取线,并且L2高速缓存可从系统存储器预取线。
在一种预取方法中,处理器可一次从LI高速缓存访问两条指令,其中每个LI高速缓存线均包括八条指令。这种技术称作“扇形”访问,其中每对指令代表LI高速缓存线内的“扇区(sector)”,且每个LI高速缓存线具有四个扇区。获取单元在任意给定时间监视处理器访问哪个扇区并使用该信息来预取下一个LI高速缓存线。此外,如果预取操作成功,那么到处理器消耗当前LI高速缓存线中最后的扇区时,下一个LI高速缓存已从L1.5高速缓存被预取并存储在LI高速缓存内。
该常规方法预取指令的一个缺点是,更快的处理器可一次转移整个LI高速缓存线(在该示例中含有八条指令)。在这种情况下,为了从L1.5高速缓存预取附加的高速缓存线,获取单元不能逐扇区地监视处理器访问。该方法的另一个缺点是,更快的处理器可以以如此高的速率消耗指令,以致于获取单元不能足够快地预取LI高速缓存线,致使高速缓存未命中增加。为了克服该第二种问题,获取单元可从L1.5高速缓存向前预取两个LI高速缓存线,力图在处理器访问LI高速缓存线之前填充那些线。然而,如果有指向非序列性位置的支路,则处理器通常以引发两个或更多个高速缓存未命中而结束,对于每条所执行的支路,不是只一个高速缓存未命中,而是支路目标的前两个高速缓存线的每一个都有一个高速缓存未命中。因此,高速缓存未命中增加,从而降低了总体性能。
如前述示出的,本领域中需要更优化的方式来在具有多级指令高速缓存层级的系统中预取指令。发明内容
本发明的一个实施例阐释了用于预取高速缓存线的计算机实现的方法。获取单元确定在第一高速缓存内的存储器位置。所述获取单元生成伪随机数。所述获取单元随后选择在所述第一高速缓存内的与所述存储器位置和所述伪随机数相关联的第一高速缓存线。所述获取单元在第二高速缓存内的第一高速缓存线内定位第一扇区,其中所述第一扇区与在所述第一高速缓存内的所述第一高速缓存线相对应。所述获取单元随后转移所述第一扇区到在所述第一高速缓存内的所述第一高速缓存线。
本公开技术的一个优点是以这样的方式从L1.5高速缓存转移LI高速缓存线:指令LI高速缓存含有跟随处理器的当前执行点的多个LI高速缓存线。结果是指令LI高速缓存命中率得到改善,且获取指令延迟减小,甚至在处理器以高速率消耗在指令LI高速缓存中的指令的情况下。


为了详细地理解本发明的上述特征,对于以上简要说明的发明,可以参照实施例进行更为具体的描述,其中一些实施例示出于附图中。然而,应注意的是,附图中示出的只是本发明的代表性实施例,因此不应被认为是对本发明的范围的限制,本发明可以适用于其他同等有效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图2是根据本发明一个实施例的、用于图1的计算机系统的并行处理子系统的框图3A是根据本发明一个实施例的图2前端的框图3B是根据本发明一个实施例的、图2的一个并行处理单元内的通用处理集群的框图3C是根据本发明一个实施例的、图3B的流多处理器的一部分的框图4是根据本发明一个实施例的多级指令高速缓存的框图5示出了根据本发明一个实施例的L1.5高速缓存的一部分;以及
图6是根据本发明一个实施例的、用于从多级指令高速缓存预取指令的方法步骤 的流程图。
具体实施方式
在下面的描述中,将阐述大量的详细内容以提供对本发明更深入的理解。然而,本技术领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
系统概述
图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 (例如,常规的基于阴极射线管或液晶显示器的监视器)的图形子系统。系统盘114还连接到I/O桥107。开关116为I/O桥107和诸如网络适配器118以及各种外插卡(add-1n card) 120和121的其他组件之间提供了连接。其他组件(未明确示出)也可以连接到I/O桥107,包括通用串行总线(USB)或其他端口连接、压缩光盘(⑶)驱动器、数字视频光盘(DVD)驱动器、胶片记录设备等。图1中所示的各种通信路径,包括特别命名的通信路径106和113,可以使用任何合适的协议来实现,诸如PCI 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以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU 202是具有渲染管线的图形处理器,可以配置为执行与下述各项相关的各种任务:由图形数据生成像素数据,所述图形数据是由CPU 102和/或系统存储器104经由存储器桥105和第二通信路径113而供给的;与本地并行处理存储器204 (可以作为图形存储器加以使用,包括例如常规的帧缓冲区)交互,以存储和更新像素数据;将像素数据传递到显示设备110 ;等等。在一些实施例中,并行处理子系统112可包括作为图形处理器而操作的一个或多个PPU 202以及供通用计算使用的一个或多个其他PPU 202。这些PPU可相同或不同,并且每个PTO均可具有专用的并行处理存储器器件或非专用并行处理存储器器件。在并行处理系统112中的一个或多个PPU 202可向显示设备110输出数据,或者在并行处理系统112中的每个PPU 202均可向一个或多个显示设备110输出数据。
操作中,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由应用程序为每个入栈缓冲区指定,以控制不同入栈缓冲区的调度。
现在返回参照图2以及图1,每个PPU 202均包括I/O (输入/输出)单元205,该I/o单元205经由通信路径113与计算机系统100的其余部分通信,其连接到存储器桥105(或者,在一个替代实施例中,直接连接到CPU 102)。PPU 202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112被实现为可以被插入到计算机系统100的扩展槽中的外插卡。在另一些实施例中,PPU 202可以被集成在具有诸如存储器桥105或I/O桥107这类总线桥的单个芯片上。在又一些实施例中,PPU 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指定优先级。还可从处理集群阵列230接收处理任务。可选地,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。例如,多个PPU202可以被设置在单个外插卡上,或者多个外插卡可以连接到通信路径113,或者PPU 202中的一个或多个可以被集成到桥式芯片中。多PPU系统中的PPU 202可彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理内核、不同容量的本地并行处理存储器等。当存在有多个PPU 202时,可以并行地操作这些PPU从而以高于单个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可在调度任务之前收集若干任务。被收集的任务可随后基于优先级信息或使用其他技术诸如循环(round-robin)调度来进行调度。工作分布单元340包括具有槽的任务表345,所述槽可各自被TMD 322占用,用于正在执行的任务。当任务表345中有自由槽时,任务管理单元300可调度任务用于执行。当没有自由槽时,未占用槽的高优先级任务可驱逐占用槽的低优先级任务。当任务被驱逐时,该任务停止,并且如果该任务的执行未完成,那么指向该任务的指针被添加到将要调度的任务指针列表,以使任务的执行将在稍后的时间恢复。当子处理任务被生成时,在任务执行期间,指向子任务的指针被添加到将要调度的任务指针列表。子任务可由在处理集群阵列230中执行的TMD 322生成。不同于由任务/工作单元207从前端212接收的任务,子任务从处理集群阵列230所接收。子任务不插入入栈缓冲区或传输至前端。当生成子任务或针对子任务的数据存储在存储器中时,不通知CPU 102。通过入栈缓冲区所提供的任务和子任务之间的另一个不同是,通过入栈缓冲区所提供的任务是由应用程序所定义的,而子任务是在任务执行期间动态生成的。任务处理概述图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还最好包括同样的一组可被管线化的功能执行单元(例如,执行单元和加载-存储单元等,如图3C中的Exec单元302和LSU 303所示),从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持多种运算,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、X0R)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(beleveraged to)实施不同操作。传输到特定GPC 208的指令序列构成线程,如本文前面所定义的,并且跨SM 310内并行处理引擎(未示出)的一定数量并发执行的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被分配给SM 310内不同的处理引擎。线程组可包括比SM 310内处理引擎的数量少的线 程,在此情况下,在正在处理该线程组的周期内,一些处理引擎将处于空闲状态。线程组也可包括比SM 310内处理引擎的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SM 310均可以支持多达G个线程组并发执行,所以在任一给定时间都可以允许多达GXM个线程组在GPC 208中执行。另外,在SM 310内,多个相关的线程组可同时处于激活状态(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于mXk,其中k是线程组中并发执行的线程的数量,并且一般是SM 310内并行处理引擎的数量的整数倍,m是SM 310内同时处于激活状态的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。每个SM 310均包括一级(LI)高速缓存(图3C中示出),或使用在SM 310之外的相应LI高速缓存中用以执行加载和存储操作的空间。每个SM 310也均有权访问在所有GPC208之间共享的二级(L2)高速缓存,并且可用于在线程之间转移数据。最后,SM 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU 202外部的任何存储器都可被用作全局存储器。此外,一点五级(L1.5)高速缓存335可被包括在GPC 208之内,配置为经由存储器接口 214来接收和保持从存储器中所获取的、SM 310所请求的数据,包括指令、一致性(uniform)数据以及常数数据,以及向SM 310提供所请求的数据。在GPC 208中具有多个SM 310的实施例有利地共享被高速缓存于L1.5高速缓存335中的公共指令和数据。每个GPC 208均可包括存储器管理单元(MMU) 328,该单元配置为将虚拟地址映射到物理地址。在其他实施例中,MMU 328可驻留在存储器接口 214内。MMU 328包括一组页表条目(PTE)以及可选地包括高速缓存线索引,该组PTE用于将虚拟地址映射到像素块(tile)的物理地址。MMU 328可包括地址转译后备缓冲区(translation lookasidebuffer, TLB)或高速缓存,其可驻留在多处理器SM 310或LI高速缓存或GPC 208内。物理地址被处理为分布表面数据访问位置以允许在分区单元215之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。在图形和计算应用中,GPC 208可配置为使得每个SM 310均耦合至纹理单元315,用于执行纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理LI高速缓存(未示出)读取的,或者在一些实施例中是从SM 310内的LI高速缓存读取的,并且根据需要从在所有GPC208、并行处理存储器204或系统存储器104之间共享的L2高速缓存所获取。每个SM 310均将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一 GPC 208用于进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。preROP(pre-raster operations,预光栅操作)325配置为从SM 310接收数据,将数据引向分区单元215内的ROP单元,并实施对色彩混合的优化、组织像素色彩数据以及执行地址转译。应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包含有任何数量的处理单元,例如,SM 310或纹理单元315、preROP325。此外,如图2中所示,PPU 202可包含任何数量的GPC 208,这些GPC 208最好在功能上彼此相似,以使执行行为不依赖于接收具体处理任务的GPC 208。此外,每个GPC 208最好使用单独的且各异的处理单元、LI高速缓存等,相对于其他GPC 208独立地操作,以针对一个或多个应用程序执行任务。本领域普通技术人员应理解的是,图1、2、3A和3B中所描述的架构决非限制本发明的范围,并且在不脱离本发明的范围的情况下,本文所教导的技术可在任何适当配置的处理单元上实现,这些处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元等。在本发明的实施例中,所期望的是,用PPU 202或计算系统的其他处理器使用线程阵列来执行通用计算。给线程阵列中的每个线程分配唯一的线程标识符(“线程ID”),所述线程标识符在线程执行期间可由该线程访问。线程ID可以被定义为一维或多维数值,控制线程的处理行为的各个方面。例如,线程ID可用于确定线程将要处理输入数据集中哪个部分和/或确定线程将要生成或写入输出数据集中的哪个部分。每线程的指令序列均可包含至少一个指令,所述至少一个指令定义线程阵列中代表性线程和一个或多个其他线程之间的协作行为。例如,每线程的指令序列可能包含下列指令:指示在序列中的特定点处暂停执行代表性线程的操作直至一个或多个其他线程到达该特定点时为止的指令;指示代表性线程将数据存储在一个或多个其他线程有权访问的共享存储器中的指令;指示代表性线程原子地读取和更新存储在共享存储器中的数据的指令,一个或多个其他线程基于它们的线程ID有权访问所述共享存储器;等等。CTA程序也可以包含计算将从中读取数据的共享存储器中的地址的指令,其中地址为线程ID的函数。通过定义合适的功能并提供同步技术,可以以可预测的方式通过CTA的一个线程将数据写入到共享存储器中的给定位置,并且通过同一 CTA的不同线程从该位置读取出来。因此,线程之间任何期望模式的数据共享都可以得到支持,并且CTA中的任何线程都可以与同一 CTA中的任何其他线程共享数据。CTA的线程之间如果存在数据共享,则数据共享的程度由CTA程序决定;因而,应予以理解的是,在使用CTA的具体应用中,取决于CTA程序,CTA的线程实际上可能彼此共享或者不共享数据,并且术语“CTA”和“线程阵列”在本文中具有相同含义。图3C为根据本发明的一个实施例的、图3B的SM 310的框图。该SM310包括指令LI高速缓存370,其配置为经由L1.5高速缓存335从存储器接收指令和常数。Warp调度器和指令单元312从指令LI高速缓存370接收指令和常数,并且根据该指令和常数来控制本地寄存器堆304和SM 310功能单元。SM 310功能单元包括N个exec (执行或处理)单元302以及P个加载-存储单元(LSU) 303。SM 310提供具有不同可访问级别的片上(内部)数据存储。专用寄存器(未示出)对于LSU 303可读但不可写,并用于存储定义每个CTA线程的“位置”的参数。在一个实施例中,专用寄存器包括每线程(或SM 310内每exec单元302)—个的存储线程ID的寄存器;每个线程ID寄存器均仅可由各自的一个exec单元302所访问。专用寄存器还可以包括附加寄存器,其对于执行TMD 322所代表的同一处理任务的所有线程(或由所有LSU 303)可读,所述附加寄存器存储CTA标识符、CTA维度、CTA所属的栅格(grid)的维度(或队列位置,如果TMD 322对队列任务而不是栅格任务进行编码的话)以及将CTA分配给其的TMD 322的标识符。如果TMD 322是栅格TMD,那么TMD 322的执行致使将要启动和执行的固定数目的CTA来处理被存储在队列525中的固定容量的数据。CTA的数目被指定为栅格宽度、高度和深度的乘积。固定容量的数据可存储在TMD 322中或者TMD 322可存储将通过CTA处理的指向数据的指针。TMD 322也存储由CTA执行的程序的起始地址。如果TMD 322是队列TMD,那么TMD 322的队列特征被使用,意味着将要处理的数据的容量不必是固定的。队列条目存储数据,用于由分配给TMD 322的CTA处理。队列条目还可代表在线程执行期间由另一个TMD 322生成的子任务,从而提供嵌套的并行性。一般地,线程或包括线程的CTA的执行被暂停,直到子任务的执行完成。队列可存储在TMD 322中或脱离TMD 322单独存储,在这种情况下TMD 322存储指向队列的队列指针。有利地,当代表子任务的TMD 322正在执行时,由子任务生成的数据可写入队列。队列可被实现为循环队列以便于数据的总容量不被队列的大小所限制。属于栅格的CTA具有指示在栅格内的各自CTA的位置的隐性栅格宽度、高度和深度参数。专用寄存器在初始化期间响应经由前端212从设备驱动程序103接收的命令被写入,并且在处理任务的执行期间不改变。前端212调度每个处理任务用于执行。每个CTA都与用于一个或多个任务的并发执行的特定TMD 322相关联。另外,单个GPC 208可并发执行多个任务。参数存储器(未示出)存储运行时间参数(常数),这些参数可由在同一 CTA内的任意线程(或任意LSU 303)读取但不可由其写入。在一个实施例中,设备驱动程序103在指引SM 310开始执行使用这些参数的任务之前将这些参数提供给参数存储器。任意CTA(或者SM 310内的任意exec单元302)内的任意线程均可以通过存储器接口 214访问全局存储器。该全局存储器的一部分可被存储在LI高速缓存320中。
每个线程均可使用本地寄存器堆304作为临时空间(scratch space);每个寄存器均被分配用于一个线程的排他性使用,并且任何本地寄存器堆304中的数据均只可由其被分配给的线程所访问。本地寄存器堆304可实现为在物理上或逻辑上划分为P个通道(lane)的寄存器堆,每个通道均具有某一数量的条目(其中每个条目可能存储例如32位字)。给N个exec单元302和P个加载-存储单元LSU 303中的每一个分配一个通道,并且不同通道中对应的条目可以填充有供执行同一程序的不同线程使用的数据,以利于SMD执行。可以将这些通道的不同部分分配给G个并发线程组中的不同的线程组,以使本地寄存器堆304中的给定条目只可由特定线程访问。在一个实施例中,本地寄存器堆304内的某些条目被保留用于存储线程标识符,实现专用寄存器之一。另外,一致性LI高速缓存375为N个exec单元302和P个加载-存储单元LSU 303的每个通道存储一致性或常数值。在单个CTA内的线程可访问共享存储器306 ;换句话说,共享存储器306中的任意位置均可由同一 CTA内的任意线程(或由SM 310内任意处理引擎)所访问。共享存储器306也可被实现为具有互连的共享片上高速缓存存储器或共享寄存器堆,允许任意处理引擎对该共享存储器中任意位置进行读写。在其他一些实施例中,共享的状态空间可能映射到片外存储器的每CTA区域上,并被高速缓存在LI高速缓存320中。参数存储器可以被实现为在同一共享寄存器堆内或者在实现了共享存储器306的共享高速缓存存储器内的指定扇区(section),或者被实现为LSU 303只能以只读方式访问的单独的共享寄存器堆或片上高速缓存存储器。在一个实施例中,也可使用实现参数存储器的区域来存储CTA ID和任务ID,以及CTA和栅格维度或队列位置,从而实现专用寄存器的一部分。在SM 310中的每个LSU 303都耦合到统一地址映射单元352,其将为在统一存储器空间中指定的加载和存储指令所提供的地址转换为在每个各异的存储器空间中的地址。因此,指令可用来通过在统一存储器空间中指定地址来访问任意本地、共享或全局存储器空间。可以使用每个SM 310中的LI高速缓存320来高速缓存私有的每线程的本地数据以及每应用程序的全局数据。在一些实施例中,每CTA的共享数据可以在LI高速缓存320中被高速缓存。LSU 303经由存储器和高速缓存的互连380耦合到共享存储器306以及LI高速缓存320。多级指令高速缓存中的指令预取图4是根据本发明的一个实施例的、多级指令高速缓存的框图。如图所示,多级指令高速缓存包括指令LI高速缓存370、SM 310、L1.5高速缓存335、GPC 208、获取单元410、MMU 328、L2高速缓存420以及系统存储器104。指令LI高速缓存370配置为接收由SM 310内的处理器所访问的指令。众所周知,当处理器能够从指令LI高速缓存370获取指令时,性能增强。获取单元410将高速缓存线从更高的高速缓存级别或从系统存储器104转移到指令LI高速缓存370和L1.5高速缓存335中。如果由处理器所访问的下一个指令未驻留在指令LI高速缓存370中,那么该情况构成高速缓存未命中,并且获取单元410从更高的高速缓存级别或从系统存储器104来获取指令。一旦找到包含指令的高速缓存线,则获取单元410转移该高速缓存线到指令LI高速缓存370,并且处理器执行所检索的指令。然而,如果由处理器所访问的下一个指令驻留在指令LI高速缓存370中,那么该情况构成高速缓存命中,并且处理器从指令LI高速缓存370检索所访问的指令。在这种情况下,指令并非从更高的高速缓存级别获取,而是获取单元410可以启动“预取”操作来将预取的高速缓存线转移到指令LI高速缓存370中。这种预取操作是可期望的,因为获取单元410转移高速缓存线到指令LI高速缓存370,其具有在处理器实际访问那些高速缓存线的时间前被访问的高概率。结果,减少了高速缓存未命中,并且处理器性能相应地得到改善。GPC 208内的L1.5高速缓存335配置为接收和保持经由MMU 328获取的指令、一致性数据和常数数据。当获取单元410执行获取操作或预取操作时,获取单元410首先尝试从L1.5高速缓存335线内的扇区中检索期望的LI高速缓存线。扇区是对应于指令LI高速缓存370线的L1.5高速缓存335线的细分部分。在L1.5高速缓存335命中的情况下,获取单元410从L1.5高速缓存335向指令LI高速缓存370转移期望的高速缓存线。在L1.5高速缓存335未命中的情况下,获取单元410向MMU 328启动请求来从L2高速缓存420或(在L2高速缓存未命中的情况下)从系统存储器104检索高速缓存线。此外,获取单元410最好从L1.5高速缓存335预取高速缓存线,以便增加在处理器从系统存储器104请求指令之前,由处理器所访问的指令驻留在指令LI高速缓存370中的概率。例如,如果处理器正在执行指令LI高速缓存370中的当前高速缓存线内的指令,那么获取单元410预取紧跟随当前高速缓存线的高速缓存线。在某些条件下,获取单元410预取跟随当前高速缓存线的多个高速缓存线。将要预取的高速缓存线的数量,此外还是处理器的速度、在SM310中执行的线程组的数量、在每个指令LI高速缓存370线和L1.5高速缓存335线中的指令的数量和对于L1.5高速缓存335命中和L1.5高速缓存335未命中的延迟的函数。获取单元410在任意给定的预取操作中转移多个高速缓存线中的一个。在给定的预取操作中的将被转移的高速缓存线称为“预取目标”。获取单元410根据某一概率函数从多个高速缓存线中随机选择预取目标。经过若干预取操作的时间,获取单元410能够转移多个高速缓存线到指令LI高速缓存370。此外,在L1.5高速缓存335命中延迟和L1.5高速缓存335未命中延迟之间有显著差异的情况下,获取单元410还可针对下一个L1.5高速缓存335线触发提前预取操作。图5示出了根据本发明的一个实施例的,L1.5高速缓存335的一部分。如图所示,L1.5高速缓存335包括L1.5高速缓存线O 510、L1.5线O扇区512、L1.5高速缓存线I 520 和 L1.5 线 I 扇区 522。L1.5高速缓存线O 510代表L1.5高速缓存335内的典型的高速缓存线。当针对指令LI高速缓存370所尝试的获取操作或预取操作导致高速缓存未命中时,SM 310内的获取单元410进行确定,在这种情况下,获取单元410在L1.5高速缓存中寻找被访问的指令。如果指令位于与L1.5高速缓存线O 510内的位置相对应的地址处,那么获取单元410确定转移L1.5高速缓存线O 510的哪个部分到指令LI高速缓存370。L1.5线O扇区512是L1.5高速缓存线O 510的细分部分(扇区),其中每个细分部分(扇区)一般都是指令LI高速缓存370线的大小。当获取单元410针对驻留在L1.5高速缓存线O 510内的高速缓存线而启动获取操作或预取操作时,该获取单元410确定所访问的指令驻留在哪个L1.5线O扇区512中。随后该获取单元410将L1.5线O扇区512转移到指令LI高速缓存370。扇区按照地址连续地增加的顺序排列,其中L1.5线O扇区I 512
(I)跟随L1.5线O扇区O 512 (0),依次L1.5线O扇区2 512 (2)跟随L1.5线O扇区I512 (1),诸如此类。
L1.5高速缓存线I 520代表L1.5高速缓存335内的与紧跟随L1.5高速缓存线O510的存储器位置相对应的另一个典型的高速缓存线。L1.5高速缓存线I 520同样被细分为扇区,使得L1.5线I的扇区O 522 (O)紧跟随L1.5线O的扇区3 512 (3)、L1.5线I的扇区I 522 (I)紧跟随L1.5线I的扇区O 522 (0),诸如此类。在预取操作期间,获取单元410确定发送L1.5高速缓存335内的哪个扇区到指令LI高速缓存370。该扇区在本文被称为“预取目标”。获取单元410选择预取目标作为两个值的函数。第一值是随机数或表面随机数,诸如由伪随机数生成器(未示出)所生成的。随机数用来选择在当前预取操作中转移多个指令LI高速缓存370线(如由L1.5高速缓存335内的相应扇区所代表的)中的哪一个。随机数被设计为根据某一概率函数来选择多个指令LI高速缓存线中的一个。第二值是当前指令LI高速缓存370线的L1.5高速缓存335内的扇区位置。当当前指令LI高速缓存370线来自于相应的L1.5高速缓存335线的扇区O时,获取单元410最好针对随机数的至少一些值来选择在下一个L1.5高速缓存335线中的预取目标。在一个示例中,每个指令LI高速缓存370线均可包括64个字节,包含每个指令8字节的8个指令。每个L1.5高速缓存335线可包括256字节,包含每个指令8字节的32个指令。在这种情况下,L1.5高速缓存335线是指令LI高速缓存370线的4倍大。每个L1.5高速缓存335线分为四个扇区,其中每个扇区是一个指令LI高速缓存370线的大小。进一步地,在该示例中,在指令LI高速缓存370维护当前处理器的指令地址向前两个高速缓存线时,处理器可达到期望的性能水平。获取单元410根据某一概率函数而随机地转移高速缓存线,所述高速缓存线是向前一个或两个指令LI高速缓存370线(即向前一个或两个L1.5高速缓存335扇区)。可实现下面表I中阐释的偏移,来确定相对于当前指令的存储器位置的预取目标: 表I
权利要求
1.一种用于预取高速缓存线的计算机实现的方法,所述方法包括: 确定在第一高速缓存内的存储器位置; 生成伪随机数; 选择在所述第一高速缓存内的与所述存储器位置和所述伪随机数相关联的第一高速缓存线; 在第二高速缓存内的第一高速缓存线内定位第一扇区,其中所述第一扇区与在所述第一高速缓存内的所述第一高速缓存线相对应;以及 转移所述第一扇区到在所述第一高速缓存内的所述第一高速缓存线。
2.一种用于预取高速缓存线的子系统,包括: 获取单元,其配置为: 确定在第一高速缓存内的存储器位置; 生成伪随机数; 选择在所述第一高速缓存内的与所述存储器位置和所述伪随机数相关联的第一高速缓存线; 在第二高速缓存内的第一高速缓存线内定位第一扇区,其中所述第一扇区与在所述第一高速缓存内的所述第一高速缓存线相对应;以及 转移所述第一扇区到在所述第一高速缓存内的所述第一高速缓存线。
3.根据权利要求2所述的子系统,其中所述第一高速缓存包括指令高速缓存。
4.根据权利要求2所述的子系统,其中在所述第一高速缓存内的所述第一高速缓存线中的所述存储器位置与在所述第二高速缓存内的第二扇区相关联,并且其中在所述伪随机数是第一值的情况下,所述第一扇区和所述第二扇区之间的距离为一个扇区;在所述伪随机数是第二值并且所述第二扇区在所述第二高速缓存内的第一位置中的情况下,为两个扇区;以及在所述伪随机数是所述第二值并且所述第二扇区在所述第二高速缓存内的第二位置中的情况下,为六个扇区。
5.根据权利要求4所述的子系统,其中所述第二扇区在与在所述第二高速缓存内的所述第一高速缓存线不同的所述第二高速缓存内的第二高速缓存线内。
6.根据权利要求2所述的子系统,其中在所述第二高速缓存内的所述第一高速缓存线内的每个扇区在大小 上均与在所述第一高速缓存内的所述第一高速缓存线相等。
7.根据权利要求6所述的子系统,其中在所述第二高速缓存内的每个高速缓存线均包括四个扇区。
8.根据权利要求2所述的子系统,其中所述获取单元进一步配置为: 确定所述第一扇区不在所述第一高速缓存内的所述第一高速缓存线和所述第二高速缓存内的所述第一高速缓存线内; 在第三高速缓存内的第一高速缓存线内定位所述第一扇区;以及使所述第一扇区从在所述第三高速缓存内的所述第一高速缓存线转移到在所述第一高速缓存内的所述第一高速缓存线。
9.根据权利要求2所述的子系统,其中所述第一高速缓存和所述第二高速缓存共享共同的获取单元。
10.一种计算设备,包括:子系统,其包括获取单元,配置为: 确定在第一高速缓存内的存储器位置; 生成伪随机数; 选择在所述第一高速缓存内的与所述存储器位置和所述伪随机数相关联的第一高速缓存线; 在第二高速缓存内的第一高速缓存线内定位第一扇区,其中所述第一扇区与在所述第一高速缓存内的所述第一高速缓存线相对应;以及 转移所述第一扇区到在所述第一高速缓存内的所述 第一高速缓存线。
全文摘要
本发明的一个实施例阐释了在多级高速缓存中预取指令的改进方式。获取单元基于伪随机数生成器和与当前指令L1高速缓存线相对应的扇区的函数,来启动预取操作以转移多个高速缓存线的集合中的一个。获取单元根据某一概率函数从多个高速缓存线的集合中选择预取目标。如果当前指令L1高速缓存370位于相应L1.5高速缓存线的第一扇区内,那么所选择的预取目标位于下一个L1.5高速缓存线内的扇区。结果是,改善了指令L1高速缓存命中率并且指令获取延迟减小,甚至在处理器以高速率消耗指令L1高速缓存中的指令的情况下。
文档编号G06F12/08GK103218309SQ201210520348
公开日2013年7月24日 申请日期2012年12月6日 优先权日2011年12月6日
发明者王若凡, 杰克·希莱尔·肖凯特 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1