用于多客户端的可配置高速缓存的制作方法

文档序号:6351211阅读:137来源:国知局
专利名称:用于多客户端的可配置高速缓存的制作方法
技术领域
本发明总体上涉及数据存储,且更具体地涉及一种存储资源,所述存储器资源可配置为提供高速缓存(cache)功能以访问第一部分数据,并且提供寄存器功能以访问另一部分数据。
背景技术
数据处理系统中对性能的要求不断提高。多个处理单元可以被配置为通过执行多个并行线程而并行操作。对于一些应用软件而言,多个并行线程独立地执行。对于另一些应用软件而言,多个并行线程共享一些数据。例如,第一线程可计算由一个或多个其他线程使用的输入。最后,线程可以被组织成群组,其中数据在每个群组内而非在群组之间共享。使用诸如由NVIDIA 提供的CUDA C(通用并行计算架构)和PTX (低级并行线程执行虚拟机和虚拟指令集架构)这类编程模块写入的多线程并行程序来访问两个或更多各异的存储器地址空间,这些存储器地址空间均具有不同的并行作用域(scope),例如,每线程的私有本地存储器、每群组的共享存储器和每应用的全局存储器。私有本地存储器被实现为专用本地存储,主要只可通过单线程访问,并且每群组共享存储器可以被实现为SRAM存储器,其可由群组中的所有线程访问。全局存储器包括可高速缓存的片外(off-chip)存储器。据此,本领域中需要这样一种技术,这种技术能够减小用于提供存储器空间并使每个空间均具有不同作用域的专用存储。

发明内容
本发明的一个实施例提出了一种用于提供LI高速缓存的技术,所述LI高速缓存为中央存储资源。LI高速缓存服务于具有多样化的延时和带宽要求的多个客户端,并且可以被重新配置以创建实现LI高速缓存的多个存储空间。在LI高速缓存内配置的“直接映射”存储区可以代替专用缓冲区(buffer)、FIFO和接口路径,允许LI高速缓存的客户端交换属性和基元数据。直接映射存储区可以被用作全局寄存器堆(register file)。在LI高速缓存内配置的“本地-全局高速缓存”存储区可以被用于支持对于多个空间的加载/存储存储器请求。这些空间包括全局、本地和调用-返回堆栈(CRS)存储器。一个优点在于LI高速缓存可以代替先前的架构中的专用缓冲区、高速缓存和FIFO。本发明的用于在一级(LI)高速缓存内分配单独的存储器空间的方法,其各种实施例包括在静态随机访问存储器(SRAM)存储资源中配置第一组条目,以用作本地-全局数据高速缓存;在SRAM存储资源中配置第二组条目,以用作直接映射寄存器;以及对由LI高速缓存从第一客户端和第二客户端接收的存储器访问请求进行仲裁,所述第一客户端被配置为产生向所述第二组条目存储数据的访问请求,所述第二客户端被配置为产生从所述第二组条目加载数据、向所述第一组条目存储数据以及从所述第一组条目加载数据的访问请求。本发明的各种实施例包括处理器,所述处理器通过下列配置以在一级(LI)高速缓存内分配单独的存储器空间在静态随机访问存储器(SRAM)存储资源中配置第一组条目,以用作本地-全局数据高速缓存;在SRAM存储资源中配置第二组条目,以用作直接映射寄存器;以及对由LI高速缓存从第一客户端和第二客户端接收的存储器访问请求进行仲裁,所述第一客户端被配置为产生向所述第二组条目存储数据的访问请 求,所述第二客户端被配置为产生从所述第二组条目加载数据、向所述第一组条目加载数据以及从所述第一组条目加载数据的访问请求。


为了详细地理解本发明的上述特征,对于以上简要说明的发明,可以参照实施例进行更为具体的描述,其中一些实施例示出于附图中。然而,应注意的是,附图中示出的只是本发明的代表性实施例,因此不应被认为是对本发明的范围的限制,本发明可以适用于其他同等有效的实施例。图I是示出了被配置为实施本发明的一个或多个方面的计算机系统的框图;图2是根据本发明一个实施例的、用于图I的计算机系统的并行处理子系统的框图;图3A是根据本发明一个实施例的、图2的一个PPU内的GPC的框图;图3B是根据本发明一个实施例的、图3A的LI高速缓存的一部分的框图;图4是根据本发明一个实施例的、用作数据高速缓存和直接映射存储器的SRAM的配置的概念图;图5是根据本发明一个实施例的、用于配置LI高速缓存的方法步骤的流程图;以及图6是根据本发明一个实施例的、用于访问LI高速缓存的方法步骤的流程图。
具体实施例方式在下面的描述中,阐释了大量具体细节以提供对本发明更为彻底的理解。然而,对于本领域技术人员来讲将显而易见的是,在缺少这些具体细节中的一个或多个的情况下也可以实施本发明。在其他例子中,为了避免与本发明发生混淆,对公知特征没有进行描述。系统概述图I是示出了被配置为实施本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU) 102和系统存储器104,两者经由可包括存储器桥105的互连路径通信。存储器桥105例如可以是北桥芯片,经由总线或其他通信路径106 (例如,超传输链接)连接到I/O (输入/输出)桥107。I/O桥107例如可以是南桥芯片,从一个或多个用户输入设备108 (例如,键盘、鼠标)接收用户输入,并将该输入经由路径106和存储器桥105转发(forward)至CPU 102。并行处理子系统112经由总线或其他通信路径113(例如,PCI Express、加速图形端口或超传输链接)耦合至存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传送到显示设备110 (例如,常规的基于CRT或IXD的监视器)的图形子系统。系统盘114还连接到I/O桥107。开关116为I/O桥107和诸如网络适配器118以及各种外插卡(add-in card) 120和121的其他组件之间提供了连接。其他组件(未明确示出)也可以连接到I/O桥107,包括USB或其他端口连接、⑶驱动器、DVD驱动器、胶片记录设备等。图I中将各种组件互连的通信路径可以使用任何合适的协议来实现,比如PCI (外围组件互连)、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包括一个或多个并行处理单元(PPU) 202,其每一个均耦合至本地并行处理(PP)存储器204。一般来讲,并行处理子系统包括U个PPU,其中U彡I。(本文中,相似对象的多个实体用标识该对象的参考数字以及根据需要结合标识该实体的带括号的数字加以表示)。PPU202和并行处理存储器204可用一个或多个诸如可编程处理器、专用集成电路(ASIC)或存储器器件这类集成电路器件来实现,或者以任何其他在技术上可行的方式来实现。再次参照图I,在一些实施例中,并行处理子系统112中的一些或所有PPU 202是具有渲染管线的图形处理器,可以被配置为执行与下述各项相关的各种任务由图形数据生成像素数据,所述图形数据是由CPU 102和/或系统存储器104经由存储器桥105和总线113而供给的;与本地并行处理存储器204(可以作为图形存储器加以使用,包括例如常规的帧缓冲区)交互,以存储和更新像素数据;将像素数据输送到显示设备110 ;等等。在一些实施例中,并行处理子系统112可包括作为图形处理器而操作的一个或多个PPU 202以及供通用计算使用的一个或多个其他PPU 202。这些PTO可相同或不同,并且每个PPU均可具有其自己的专用并行处理存储器装置或非专用并行处理存储器装置。一个或多个PPU202可向显示设备110输出数据,或者每个PPU 202均可向一个或多个显示设备110输出数据。操作时,CPU 102是计算机系统100的主处理器,控制并协调其他系统组件的操、作。具体来讲,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102将针对每个PPU 202的命令流写入到入栈缓冲区(pushbuffer)(图I和图2中均未明确示出),所述入栈缓冲区可位于系统存储器104、并行处理存储器204或者可由CPU 102和PPU 202访问的另外的存储位置中。PPU 202从入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。现在返回参照图2,每个PPU 202均包括I/O (输入/输出)单元205,该I/O单元205经由通信路径113与计算机系统100其余部分通信,其连接到存储器桥105 (或者,在一个替代实施例中,直接连接到CPU 102)。PPU 202与计算机系统100其余部分的连接也可以改变。在一些实施例中,并行处理子系统112被实现为外插卡,可以被插入计算机系统100的扩展槽中。在另一些实施例中,PI3U 202可以被集成在具有诸如存储器桥105或I/O桥107这类总线桥的单个芯片上。在又一些实施例中,PPU 202中的一些或全部元件可被集成在具有CPU 102的单个芯片上。 在一个实施例中,通信路径113是PCI-EXPRESS链接,其中给每个PPU 202分配有专用通道(lane),如本技术领域已知的。也可使用其他通信路径。I/O单元205生成数据包(或其他信号)用于在通信路径113上传送,并且也从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引向PPU 202的适当组件。例如,可将与处理任务相关的命令引向主机接口 206,而可将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引向存储器交叉开关(crossbar)单元210。主机接口 206对每个入栈缓冲区进行读取并将由该入栈缓冲区指定的工作输出到前端212。每个PPU 202有利地实现高度并行的处理架构。如图中详细所示,PPU202 (O)包括处理集群阵列230,该阵列包括C个通用处理集群(GPC) 208,其中C彡I。每个GPC208均能够并发执行大量(例如,数百个或数千个)线程,其中每个线程均为程序的实例(instance)。在各种应用中,可分配不同的GPC 208,用于处理不同类型的程序或用于执行不同类型的计算。例如,在图形应用中,可分配第一组GPC 208来执行曲面细分(tessellation)操作以及为曲面片(patch)生成基元(primitive)拓扑,并且可分配第二组GPC 208来执行曲面细分着色以估计基元拓扑的曲面片参数以及确定顶点位置和每顶点的其他属性。GPC 208的分配可依据每个类型的程序或计算产生的工作量而不同。GPC 208经由工作分布单元200接收将要执行的处理任务,工作分布单元200从前端单元212接收定义处理任务的命令。处理任务包括将要处理的数据索引(index)以及定义将如何处理数据(例如,将执行哪个程序)的命令和状态参数,该将要处理的数据索引例如表面(曲面片)数据、基元数据、顶点数据和/或像素数据。工作分布单元200可被配置为获取与这些任务相对应的索引,或者工作分布单元200可从前端212接收索引。前端212确保在开始由入栈缓冲区所指定的处理之前GPC 208被配置为有效状态。当PPU 202被用于图形处理时,例如,将每个曲面片的处理工作量分成大小近似相等的任务,以使曲面细分处理能够被分布到多个GPC 208。工作分布单元200可被配置为以能够将任务提供给多个GPC 208进行处理的频率产生任务。与之相反,在常规系统中,处理一般由单个处理引擎执行,而其他处理引擎仍处于空闲状态,在开始它们的处理任务之前等待前述单个处理引擎完成它的任务。在本发明的一些实施例中,GPC 208的各部分被配置为执行不同类型的处理。例如,第一部分可被配置为执行顶点着色和拓扑生成,第二部分可被配置为执行曲面细分和几何着色,并且第三部分可被配置为在屏幕空间中执行像素着色以生成渲染后的图像。由GPC 208产生的中间数据可被存储在缓冲区中,以允许中间数据在GPC208之间传送以用于进一步处理。存储器接口 214包括D个分区单元215,这些分区单元每一个均直接耦合至并行处理存储器204的一部分,其中DS I。如图所示,分区单元215的数量通常等于DRAM 220的数量。在另一些实施例中,分区单元215的数量可以不等于存储器装置的数量。本领域技术人员将认识到,DRAM220可用其他合适的存储设备代替,并且可以采用一般常规设计。因此省略详细描述。可跨DRAM 220来存储诸如帧缓冲区或纹理映射这样的渲染对象,允许分区单元215并行地写入每个渲染对象的一部分,以高效地使用并行处理存储器204的可用带宽。
GPC 208中的任何一个都可处理将被写入并行处理存储器204内任何DRAM 220的数据。交叉开关单元210被配置为将每个GPC 208的输出路由(ixnite)至任一分区单元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之间分割业务流。再者,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时,可以并行地操作这些PI3U从而以高于单个PPU202可能达到的吞吐量来处理数据。包含一个或多个PPU 202的系统可以以各种配置和形式因素来加以实现,包括桌上型电脑、膝上型电脑或者手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系 统等。处理集群阵列概述图3A是根据本发明一个实施例的、图2的一个PPU 202内的GPC 208的框图。每个GPC 208可被配置为并行地执行大量线程,其中术语“线程”是指对特定的一组输入数据执行的特定程序的实例。在一些实施例中,采用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立指令单元。在另一些实施例中,采用单指令多线程(SMT)技术,使用被配置为发送指令到每一个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。不同于其中所有处理引擎一般都执行相同指令的SMD执行机制,SMT执行通过给定线程程序允许不同的线程更容易跟随(follow)发散的执行路径。本领域技术人员将理解的是,SIMD处理机制代表SMT处理机制的功能子集。在一个实施例中,每个GPC 208均包括M个SPM 310,其中M彡I,每个SPM 310均被配置为处理一个或多个线程组。而且,每个SPM 310最好还包括同样的一组可被管线化的功能执行单元(例如,算术逻辑单元、加载-存储单元等),从而允许在前一个指令结束之前发送新的指令,如本领域所已公知的。可提供功能执行单元的任何组合。在一个实施例中,这些功能单元支持多种运算,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、X0R)、移位以及各种代数函数的计算(例如,平面插值、三角、指数和对数函数等);并且相同的功能单元硬件可均衡地用于(be leveraged to)执行不同运算。更具体来讲,每个SPM 310均包括基元引擎(primitive engine, PE) 316和并行流多处理器(streaming multiprocessor, SM) 312。在图形应用中,PE 316被配置为执行屏幕空间图形处理功能,可包括但不限于基元设置、光栅化和z裁剪(culling)。在一些实施例中,PE 316被配置为在将像素输出到LI高速缓存320之前,将这些像素搜集到多个相邻像素的像素块(tile)中,以便提高LI高速缓存320的访问效率。PE 316接收来自工作分布单元200的处理任务,并且当该处理任务不要求由PE 316执行的操作时,将该处理任务通过基元引擎传至管线管理器305。经由将处理任务分布到流多处理器(SPM) 310的管线管理器305来有利地控制GPC 208的操作。管线管理器305也可被配置为通过为由SPM 310输出的处理后的数据指定目的地来控制工作分布交叉开关330。传送到特定GPC 208的指令序列构成线程,如本文前面所定义的,并且在SPM 310内的SM 312上并发执行的一定数量的线程的集合在本文中被称为“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同的输入数据并发执行同一程序的一组线程,且该组中有一个线程被分配给SPM 310内的不同SM 312。线程组可包括比SPM 310内SM312的数量少的线程,在此情况下,在正在处理该线程组的周期内,一些SM312将处于空闲状态。线程组也可包括比SPM 310内SM 312的数量多的线程,在此情况下,处理将在连续的时钟周期上进行。由于每个SPM310可以支持多达G个线程组并发执行,所以在任一给定时间都可以允许多达GXM个线程组在GPC 208中执行。另外,在SPM 310内,多个相关的线程组可同时处于激活状态(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于mXk,其中k是线程组中并发执行的线程的数量,并且一般是SPM 310内SM312的数量的整数倍,m是SPM 310内同时处于激活状态的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。尽管在运行于SPM上的一 CTA内可存在处于不同执行阶段的多个线程组,但也可存在同时运行于同一 SPM 310上的处于不同执行阶段的不同CTA。m的值可少于(或不少于)SPM 310上总共支持的线程组的总数。这样,SPM 310内可同时处于激活状态的线程组的总数为mXkXc,其中c为SPM310上所支持的CTA的总数。
每个SPM 310均使用对应的用以执行加载和存储操作的LI高速缓存320内的空间。在一些实施例中,LI高速缓存320被包括在SPM 310内。每个SPM 310也有权访问分区单元215内的L2高速缓存,这些分区单元215在所有GPC 208之间被共享,并且可用于在线程之间传送数据。最后,SPM 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU202外部的任何存储器都可被用作全局存储器。每个GPC 208可包括存储器管理单元(MMU) 328,该单元被配置为将虚拟地址映射到物理地址。在另一些实施例中,MMU 328可处于存储器接口 214内。MMU 328包括一组页表条目(PTE)以及可选地包括高速缓存线索引(cache line index),该组PTE被用于将虚拟地址映射到像素块的物理地址。MMU 328可包括地址转译后备缓冲区(translationlookaside buffer, TLB)或高速缓存,其可处于多处理器SPM 310或LI高速缓存320或GPC208内。物理地址被处理为分散表面数据访问位置以允许在分区单元之间交错的高效请求。高速缓存线索引可用于确定对于高速缓存线的请求是否命中或未命中。在图形应用中,GPC 208可被配置为使得每个SPM 310耦合至纹理单元315,用于执行纹理映射操作,例如,确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据是从内部纹理LI高速缓存(未示出)读取的,或者在一些实施例中是从LI高速缓存320读取的,并且根据需要从L2高速缓存、并行处理存储器204或系统存储器104获取。纹理单元315可被配置为将纹理数据存储在内部高速缓存中。在一些实施例中,纹理单元315耦合至LI高速缓存320,并且纹理数据被存储在LI高速缓存320中。每个SPM 310将处理后的任务输出到工作分布交叉开关330,以便将处理后的任务提供到另一个GPC 208用于进一步处理,或者经由交叉开关单元210将处理后的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中。应予以理解的是,本文所描述的内核架构是例示性的,可以对其进行各种变形和修改。GPC 208内可包含有任何数量的处理引擎,例如,PE 316, SM 312, SPM 310或纹理单元315。此外,虽然仅示出了一个GPC 208 JSPPU 202可包含任何数量的GPC 208,这些GPC208最好在功能上彼此相似,以使执行行为不依赖于接收具体处理任务的GPC208。此外,每个GPC 208最好使用单独的且各异的处理引擎、LI高速缓存320、MMU 328等,相对于其他GPC 208独立地操作。本领域技术人员应理解的是,图1、2和3A中所描述的架构决非限制本发明的范围,并且在不脱离本发明的范围的情况下,本文所教导的技术可在任何适当配置的处理单元上实施,这些处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或专用处理单元等。在本发明的实施例中,所期望的是,用PPU 202或计算系统的其他处理器使用线程阵列来执行通用计算。给线程阵列中的每个线程分配唯一的线程标识符(“线程ID”),所述线程标识符在线程执行期间可由该线程访问。线程ID可以被定义为一维或多维数值,控制线程的处理行为的各个方面。例如,线程ID可用于确定线程输入数据集中将要处理的部分和/或确定线程输出数据集中将要生成或写入的部分。
每线程的指令序列可包含至少一个指令,所述至少一个指令定义线程阵列中代表性线程和一个或多个其他线程之间的协作行为。例如,每线程的指令序列可能包含下列指令指示在序列中的特定点处暂停执行代表性线程的操作直至一个或多个其他线程到达该特定点时为止的指令;指示代表性线程将数据存储在一个或多个其他线程有权访问的共享存储器中的指令;指示代表性线程自动读取和更新存储在共享存储器中的数据的指令,一个或多个其他线程基于它们的线程ID有权访问所述共享存储器;等等。CTA程序也可以包含计算将从中读取数据的共享存储器中的地址的指令,其中地址为线程ID的函数。通过定义合适的功能并提供同步技术,可以以可预测的方式通过CTA的一个线程将数据写入到共享存储器中的给定位置并且通过同一 CTA的不同线程从该位置读取数据。因此,线程之间任何期望模式的数据共享都可以得到支持,并且CTA中的任何线程都可以与同一 CTA中的任何其他线程共享数据。CTA的线程之间如果存在数据共享,则数据共享的程度由CTA程序决定;因而,应予以理解的是,在使用CTA的具体应用中,取决于CTA程序,CTA的线程实际上可能彼此共享或者不共享数据,并且术语“CTA”和“线程阵列”在本文中具有相同含义。可配置的LI高速缓存GPC 208提供具有不同级别的可访问性的片上(内部)数据存储。专门寄存器(图中未示出)可对于处理引擎可读但不可写,并被用于存储定义每个CTA线程的“位置”的参数。在一个实施例中,专门寄存器包括每CTA线程(或每SPM 310) 一个存储线程ID的寄存器;每个线程ID寄存器只可由各自的一个SPM 310访问。专门寄存器也可包括附加的寄存器,其可由所有CTA线程(或由所有处理引擎)读取,并存储CTA标识符、CTA维度、CTA所属栅格(grid)的维度以及CTA所属栅格的标识符。在初始化期间,响应从设备驱动器103经由前端212接收的命令对专门寄存器进行写入,并且在CTA执行期间不变。参数存储器(图中未示出)存储运行时间参数(常数),这些参数可由任一 CTA线程(或任一处理引擎)读取但不可由其写入。在一个实施例中,设备驱动器103在指引SPM310开始执行使用这些参数的CTA之前将这些参数提供给参数存储器。任一 CTA (或者SPM310内的任一 PE 316或SM 312)内的任一 CTA线程可以通过存储器接口 214访问全局存储器。该全局存储器的一部分可被存储在LI高速缓存320中。每个CTA线程可在被用作临时空间(scratch space)的“本地寄存器”中加载并存储数据;每个寄存器均被分配用于一个CTA线程(或一个处理引擎)的排他性使用,并且任何本地寄存器中的数据只可由其被分配给的CTA线程访问。常规来讲,本地寄存器被实现为单独的寄存器堆。LI高速缓存320被设计为加载并存储数据,以执行先前由单独的本地寄存器堆执行的功能。LI高速缓存320通过在物理上或逻辑上将LI高速缓存320划分为P个通道来本地寄存器的加载并存储操作,每个通道均具有某一数量的条目(其中每个条目可能存储例如32位字)。给P个SM 312中的每一个分配一个通道,并且不同通道中对应的条目可以填充有供执行同一程序的不同线程使用的数据,以利于SIMD执行。可以将这些通道的不同部分分配给G个并发线程组中的不同的线程组,以使LI高速缓存320中的给定条目只可由特定线程访问。在一个实施例中,LI高速缓存320内的某些条目被保留用于存储线程标识符,实现专门寄存器之一。对于一些操作(例如,向量运算、专门的比较和交换原子存储器操作(compare-and-swap atomic memort operation))而言,可给 P 个 SM312中的每一个分配多个通道,其中每次使用LI高速缓存320的SM少于P个,并且使关于所有P个SM 312的总体操作在多个周期上串行。
CTA线程(在单个CTA内)也可在“共享存储器”中加载并存储数据,所述“共享存储器”包括对于同一 CTA内任一 CTA线程(或对于SPM 310内任一处理引擎)可访问的位置。LI高速缓存320也被设计为在共享存储器中加载并存储数据,允许任一 PE 316或SM 312对该共享存储器中任一位置进行读写。在一些实施例中,共享的状态空间可能映射到片外存储器的每CTA区域上。参数存储器可以被实现为LI高速缓存320内的指定扇区(section),或者被实现为SM 312或PE 316只能以只读方式访问的单独的共享寄存器堆或片上高速缓存。在一个实施例中,也可使用实现参数存储器的区域来存储CTA ID和栅格ID,以及CTA和栅格维度,从而实现专门寄存器的一部分。最后,任何线程都可在全局存储器中加载并存储数据。图3B是根据本发明一个实施例的、图3A的LI高速缓存320的一部分的框图。LI高速缓存320是代替先前的架构中的专用缓冲区、高速缓存和FIFO的中央存储资源。这样,LI高速缓存320负责服务于具有多样化的延时(latency)和带宽要求的多个客户端,例如,PE 316和SM312。为了满足这些要求,LI高速缓存320支持多个存储空间之间的重配置,即,直接映射存储器区和本地-全局高速缓存区。直接映射存储器区代替常规架构中的专用缓冲区、FIFO和接口路径,以实现共享存储器功能。直接映射存储器区被用于在图形处理中的客户端单元(SM 312、PE 316)之间交换属性和基元数据,以实现本地寄存器功能,并且可以将直接映射存储器用作全局寄存器堆用于计算处理,以实现全局存储器功能。本地-全局高速缓存区支持到多个空间的加载/存储存储器的请求。这些空间包括全局、本地和调用-返回堆栈(call-return stack, CRS)存储器。对于直接映射存储器区以及本地-全局高速缓存区的请求处理可独立地进行。例如,直接映射存储器区请求仍可得到服务,而不会由于本地-全局高速缓存区未命中、转储清除(flush)、无效、高速缓存控制操作和存储器屏障(barrier)操作发生中断。如果本地-全局高速缓存区所需资源正被使用或以其他方式被阻止(例如,到MMU 328的外部接口、WDB 375、内部FIF0),那么,假设直接映射存储器区资源(数据交叉开关385、SRAM 380的数据读写端口)可用,则直接映射存储器区请求仍可得到服务。LI高速缓存320包括仲裁器350、标签级(tag stage) 355、未命中单元(missunit) 360、数据填充器(data fill) 370、地址交叉开关365、写数据缓冲区(WDB) 375、SRAM380和数据交叉开关385。LI高速缓存320从SM 312和PE 316接收加载和存储请求(关于直接映射存储以及本地-全局高速缓存存储)。即使直接映射存储器以及本地-全局高速缓存请求具有不同的特点,也可安排公共资源服务于它们。相对于请求仲裁以恒定的时隙(time slot)安排资源。在一个实施例中,与从SM 312接收的加载和存储请求相比,仲裁器350可从PE316接收较小宽度的加载和存储请求。仲裁器350搜集来自PE 316的若干请求,以便在于来自PE 316的请求和来自SM 312的任何请求之间进行仲裁之前生成较大宽度的请求。类似地,在另一个实施例中,仲裁器350被配置为补偿SM 312和PE 316之间的不同数据接口宽度。例如,仲裁器350搜集关于单个请求而从PE 316顺次发送的足够的数据,以便在于来自PE 316的请求和来自SM 312的任何请求之间进行仲裁之前生成较大宽度的请求。仲裁器350还包括冲突解析器(resolver)(图中未示出),其识别存储体(bank)冲突(对同一存储器的存储体内不同位置的多个访问)和地址冲突(对同一地址的多个访问)。关于如何解决冲突或者碰撞的规则依据请求类型而改变。冲突解析器负责解决SRAM 380的存储体和寻址冲突。冲突通常被定义为正在试图用不同的SRAM地址访问同一 SRAM存储体的两个地址(存储体冲突)、或者正在试图将数据写入同一 SRAM存储体和地址的写入请求(对同一存储体和同一地址的读取请求不属于冲突)。相冲突的请求将部分地得到服务,并且请求的相冲突部分将被推迟,并在该冲突不再存在之后得到处理。推迟掩码(defer mask)将与请求一起被转发,指明部分推迟。检验写入冲突是否有字节使能信号(enable)重叠。如果没有字节使能信号重叠,则不存在冲突且合并写入。对于一些操作而言,当冲突中一个线程“赢得”位置时,相冲突的写入得到解决。实施例可在一个通路(pass)中这么做或者采用推迟方案在多个通路中串行完成。 除避免冲突之外,仲裁器350还基于SRAM 380、地址交叉开关365和数据交叉开关385所施加的限制来安排这些请求。SRAM 380每时钟周期可执行一个读取访问和一个写入访问。为了最佳吞吐量,仲裁器350将读取访问请求和写入访问请求配对。数据交叉开关385只可用于针对单个时钟周期中的那些访问之一,重排从SRAM 380读取的数据,或者重排正在存储到SRAM 380或WDB 375中的数据。类似地,地址交叉开关365只可用于针对单个时钟周期中的那些访问之一者来重排地址。当SM 312提出访问本地-全局高速缓存区的请求时,仲裁器350遵循一些通用规贝U,包括不对读取请求进行仲裁直至LI高速缓存320能够接收并缓冲该数据为止、以及输出带有该请求的激活掩码以便在发生高速缓存未命中时避免不必要的获取。激活掩码指明该数据中由SM 312请求的部分。有效的掩码可由被用于消除无效的写入并为无效的读取返回零值的SM 312来提供。当SM 312或PE 316提出访问直接映射存储器区的请求时,仲裁器350遵循一些通用规则,包括不对存储请求进行仲裁直至出现待存储的请求和数据为止、以及不对(加载)读取请求进行仲裁直至LI高速缓存320能够接收并缓冲该数据为止。仲裁器350可被配置为支持地址卷绕(warpping),用于访问直接映射存储。这有利地防止了在收到超出边界的地址时产生错误。假设直接映射存储分配从地址O开始,则用于直接映射存储请求的地址自动以直接映射存储器大小为模进行卷绕(warp)。仲裁器350输出访问本地-全局高速缓存存储的请求到标签级355。标签级355基于SRAM 380中现有的数据确定是否可以对访问本地-全局高速缓存存储的请求进行处理。标签级355还确定存储请求是否包含存储在高速缓存线中的所有数据,或是否需要从存储器读取一些数据以便执行该存储请求。当标签级355确定需要从存储器读取数据来完成该请求时,会发生高速缓存未命中并且标签级355将未命中请求输出到未命中单元360。未命中单元360输出未命中请求到MMU 328加以实现。未命中单元360包含未决(pending)请求表(图中未示出),该未决请求表被用于跟踪未决请求,并且当经由MMU 328收到实现这些请求所需要的数据时,使这些请求从表中退出(retire)。数据填充器370从MMU 328接收未命中数据并将访问SRAM 380的仲裁请求输出到仲裁器350。当仲裁器350授权该请求访问SRAM 380时,数据填充器370将未命中数据存储到SRAM 380中。存储操作不要求由地址交叉开关365或数据交叉开关385进行处理。当从MMU 328接收到数据时,数据填充器370也以信令(signal)通知未命中单元360,以便使由未命中单元360跟踪的未命中请求退出。未命中单元360然后可向请求过该数据从而导致该未命中的SM 312发送信令,通知该请求可再次被提交给仲裁器350。在一些实施例中,就对SRAM 380进行写入而言,写入未命中数据是具有最高优先级的源,以便最小化对交叉开关单元210的阻塞。尽管SRAM 380可以支持128B写入,但每次传送可能仅有32B从MMU328返回。为了提高写入未命中数据的带宽效率,可以在数据填充器370中包含128B的合并缓冲区(coalescing buffer),以将未命中数据收集到较大的写入访问中。与针对全局存储器中的条目的存储请求一起接收的数据可不被高速缓存,因而由仲裁器350输出到WDB 375以绕开SRAM 380。替代地,针对全局存储器存储请求所接收的数据可被存储在SRAM 380的条目中。可保持将该数据存储在SRAM 380的条目中,直至该数据被输出到全局存储器为止,然后可使存储该数据的条目无效。针对全局寄存器的读取请求被高速缓存在与SRAM 380 一起分配的本地-全局高速缓存存储中。当仲裁器350安排了存储请求时,与该存储请求一起被接收的数据经由数据交叉开关385输出。类似地,由于全局存储器条目不被高速缓存,所以针对全局存储器加载请求的被请求数据可被配置为绕开SRAM 380。替代地,针对全局存储器加载请求的被请求数据可在由数据填充器370接收之后被存储在SRAM 380的条目中。可保持将该数据存储在SRAM 380的条目中,直至该数据被输出到发出请求的客户端为止,然后可使存储该数据的条目无效。SRAM 380最好被用于在客户端从LI高速缓存320接收从全局存储器读取的数据之前缓冲该数据。读取和写入请求都使用地址交叉开关365。地址交叉开关365将地址和字节使能信号路由至SRAM 380的正确存储体。被地址交叉开关365所接收的来自仲裁器350的每个通道都具有相关联的存储体。这些存储体的位成为用于将地址(延时槽(dslot))引导至SRAM 380的适当存储体的地址选择。在一个实施例中,32个输出通道中的每个均包含32选I多路复用器以执行路由选择操作。地址交叉开关365部分地对与该请求一起被提供的地址进行路由,以在将该地址输出到SRAM 380之前重排该地址。数据交叉开关385可以是单个32X32信道数据交叉开关,每信道为32位,用于路由出入SRAM 380的数据,即其被读取和写入访问所共享。安排数据交叉开关385,用于直接映射存储器访问以及本地-全局高速缓存访问。数据交叉开关385可被分割成四个32X32位宽的数据交叉开关。每个数据通道均可为8位宽并具有32个源。写入数据来自客户端(SM、PE),以及路由来自PRT的信息用于回填(backfill)、未命中授权或路由来自客户端(SM、PE)的信息以为所有通道提供正确的数据路由。可在地址交叉开关365中路由字节使能信号,以便全部存储。仅对激活的且有效的请求进行存储,并且可在到达数据交叉开关385之前将激活的且有效的掩码减少至一个掩码。数据交叉开关385部分地路由与写入请求一起被提供的数据,以在将该数据输出到SRAM 380之前重排该数据。数据交叉开关385还部分地路由通过读取请求而由SRAM 380输出的数据,以在将该数据输出到发出请求的PE 316或SM 312之前重排该数据。读取数据选择和写入数据选择在SRAM 380中形成。读取数据选择相当于从客户端请求通过每个通道到达的初始存储体选择。SRAM 380仅接收针对每个32位通道的存储体选择,并且通过检验这些字节使能信号以及为每个通道指定的存储体而形成写入、数据选择。多个写入在假设其字节使能信号为非重叠的前提下可从不同的输入通道折叠(collapse)到SRAM 380的一个存储体上。写入数据选择将作为为目的地字节提供的输入通道。由于PE 316和SM 312之间的数据宽度差异,所以LI高速缓存320内的数据交叉开关385将一个传送中的数据返回到SM 312,并将一系列传送中的数据返回到PE 316。可优化SRAM 380和数据交叉开关385的使用,使得其每一个均仅使用一次并且当返回到PE 316的数据从临时存储(图中未示出)依次继发时不阻止后续的活动。SRAM 380 为具有高度堆积性(highly banked)的存储器存储(memory storage),具有32个可独立访问的存储器存储体。直接映射存储器请求会分解到每存储 体的独立地址,并且本地-全局高速缓存请求会分解到SRAM380所有存储体上的同一地址。SRAM 380从地址交叉开关365或标签级355接收一般被高速缓存的访问。这些请求可以是读取/写入。其他端口允许经由MMU 328从存储器到达的填充并转储清除到存储器,以访问SRAM380。在一些实施例中,SRAM 380包括对错误代码校正(ECC)处理的支持。LI高速缓存320可支持单个位的校正和双位错误检测。从SRAM 380读取的所有数据可在被返回到客户端或被转储清除到MMU 328之前被校正。ECC清除器(scrubber)同样也可包含在SRAM380中。ECC清除器将由寄存器触发,并且将初始化所有SRAM数据和ECC位。所有有效数据都会在启动清除器之前被转储清除和无效。图4是根据本发明一个实施例的SRAM 380的概念图,其被配置为同时用作本地-全局数据高速缓存以及直接映射存储器。从存储器的公共存储体分配用于直接映射存储器以及本地-全局数据高速缓存的存储空间,其中在所述存储器的公共存储体处直接映射存储器与本地-全局数据高速缓存之间的分配是可配置的。例如,总存储器大小为64千字节(KB)的SRAM380实现16KB直接映射存储器420以及48KB本地-全局数据高速缓存410。相同的SRAM 380可代之以被配置为实现32KB直接映射存储器415,其尺寸与32KB本地-全局数据高速缓存405相等。此外,相同的SRAM 380可代之以被配置为实现48KB直接映射存储器以及16KB本地-全局数据高速缓存。这些分配中可将其中一个清零从而将总容量赋予另外一个,并且可支持更多的任意边界,例如,34KB直接映射存储器以及30KB本地-全局数据高速缓存。直接映射存储器可被组织为48KB直接映射存储器在存储器的32个存储体的每一个中各自有384个4字节条目。直接映射存储器415可被组织为16KB直接映射存储器在存储器的32个存储体的每一个中各自有128个4字节条目。本地-全局高速缓存可被组织为结合组(set-associative)高速缓存,具有32组X4通道(way)/组标签存储器,供128个128字节数据条目各自使用。本地-全局数据高速缓存410可被组织为结合组高速缓存,具有64组X 6通道/组标签存储器,供384个128字节数据条目各自使用。图5是根据本发明一个实施例的、用于配置LI高速缓存320的方法步骤的流程图。该方法可用于改变本地-全局数据高速缓存与直接映射存储器之间的存储器分配。在步骤500,LI高速缓存320接收关于SRAM 380的配置,该配置指定本地-全局数据高速缓存与直接映射存储器之间的存储器分配。在步骤505,LI高速缓存320确定是否有任何对本地-全局数据高速缓存或直接映射存储器的访问是未决的。如果在步骤505,LI高速缓存320确定有至少一个访问是未决的,则在步骤510,LI高速缓存320在前进至步骤515之前等待,直至所有未决请求完成为止。
在步骤515,LI高速缓存320确定在SRAM 380中被配置为本地-全局数据高速缓存的部分中是否存在任何脏的(dirty)高速缓存线。如果LI高速缓存320确定在SRAM380中被配置为本地-全局数据高速缓存的部分中存在至少一个脏的高速缓存线,则在步骤520,LI高速缓存320将所有脏的高速缓存线转储清除到存储器,以在前进至步骤525之前清除本地-全局数据高速缓存中的所有条目。在步骤525,LI高速缓存320使本地-全局数据高速缓存中的所有高速缓存线条目无效并且使直接映射存储器中的所有条目无效。在步骤530,LI高速缓存320执行配置,以在本地-全局数据高速缓存和直接映射存储器之间分配SRAM 380中的存储空间。在一些实施例中,不对脏的条目进行转储清除,因此可省略步骤515和520。在一个实施例中,使用优化后的方法在等待所有未决访 问完成之前没有未决访问时,转储清除LI高速缓存320中的脏的条目。此外,只可以转储清除/无效通过该配置移除的条目。图6是根据本发明一个实施例的、用于访问LI高速缓存320的方法步骤的流程图。在步骤600,由仲裁器350接收访问请求。在步骤603,仲裁器确定该请求是否来自数据填充器370,如果该请求来自数据填充器370,则安排该请求,并在步骤635由数据填充器370对SRAM 380进行写入。否则,如果该请求来自PE 316或SM 312,则在步骤605,仲裁器350解决任何寻址冲突并安排该请求用于处理。在步骤607,仲裁器350确定该请求是否是针对SRAM 380中被配置为用作直接映射存储器的部分。如果该请求不是针对直接映射存储器,则该请求即是针对本地-全局高速缓存,并且在步骤612,标签级355确定处理该请求所需要的数据是否是可用的。当该请求为存储请求并且对高速缓存线进行写入所需要的全部数据将要被写入时,则数据是可用的。当该请求为加载(读取)请求时,如果存在高速缓存命中,则数据是可用的,即,数据在SRAM 380内所存储的高速缓存线中。当在步骤612数据不可用时,未命中单元360输出读取请求到MMU 328以获取数据。该数据将从MMU 328被返回到数据填充器370。当在步骤612数据可用时,则标签级355直接前进至步骤625。回到步骤607,当该请求是针对直接映射存储器时,则在步骤610仲裁器350确定该请求是否为不被高速缓存的存储(写入)操作,如果该请求是不被高速缓存的存储(写入)操作,则将数据输出到WDB 375并安排该请求用于处理。不被高速缓存的存储请求将经由数据交叉开关385输出到MMU 328。如果在步骤610仲裁器350确定该请求不是不被高速缓存的存储(写入)操作,则在步骤620,使用地址交叉开关365处理该地址。在步骤625,SRAM 380确定该请求是否是存储请求,如果该请求是存储请求,则可在步骤630由数据交叉开关385处理该请求。在步骤635,SRAM380将该数据(可选地由数据交叉开关385处理)存储在SRAM 380中被分配给本地-全局高速缓存或直接映射存储器的部分中。如果在步骤625,SRAM 380确定该请求不是存储请求,则该请求即为加载(读取)请求,并且在步骤640,SRAM 380从由该请求指定的位置读取数据。在步骤645,可由数据交叉开关385处理该数据。在步骤660,将该数据输出到发出请求的PE 316或SM 312。LI高速缓存320被配置为同时用作本地-全局高速缓存和直接映射存储器。可对SRAM 380中被分配给本地-全局高速缓存和直接映射存储器的容量进行配置。LI高速缓存可有利地代替先前的架构中的专用缓冲区、高速缓存和FIFO。本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示出的计算机可读存储介质包括但不限于(i)不可写入的存储介质(例如,计算机内的只读存储器设备,例如可由CD-ROM驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写入的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机访问半导体存储 器),在其上存储可更改的信息。以上已参照具体实施例对本发明进行了描述。然而,本领域技术人员将理解的是,在不脱离如随附权利要求书中所阐释的本发明的较宽精神和范围的情况下,可对此做出各种修改和变化。因此,前面的描述以及附图应被视为是例示性而非限制性的。
权利要求
1.一种在一级(LI)高速缓存内分配单独的存储器空间的方法,所述方法包括 在静态随机访问存储器(SRAM)存储资源中配置第一组条目,以用作本地-全局数据高速缓存; 在所述SRAM存储资源中配置第二组条目,以用作直接映射寄存器;以及 对由所述LI高速缓存从第一客户端和第二客户端接收的存储器访问请求进行仲裁,所述第一客户端被配置为产生向所述第二组条目存储数据的访问请求,所述第二客户端被配置为产生从所述第二组条目加载数据、向所述第一组条目存储数据以及从所述第一组条目加载数据的访问请求。
2.根据权利要求I所述的方法,其中,对所述第一组条目的加载请求被指定为不被高速缓存,并且由所述加载请求所请求的数据从另一存储资源读取,且不被存储到所述SRAM存储资源中。
3.根据权利要求I所述的方法,其中,对所述第一组条目的加载请求被指定为不被高速缓存,并且由所述加载请求所请求的数据被存储在所述SRAM存储资源的第一条目中、从所述第一条目输出,然后所述第一条目被无效。
4.根据权利要求I所述的方法,其中,对所述第一组条目的存储请求被指定为不被高速缓存,并且与所述加载请求包含在一起的写入数据绕开所述SRAM存储。
5.根据权利要求I所述的方法,其中,对所述第一组条目的存储请求被指定为不被高速缓存,并且与所述加载请求包含在一起的写入数据被存储在所述SRAM存储资源中的第一条目中、从所述第一条目输出,然后所述第一条目被无效。
6.根据权利要求I所述的方法,其中,部分地路由由所述第一客户端提供的第一地址和由所述第二客户端提供的第二地址,以对所提供的所述第一地址和所述第二地址进行重排以访问SRAM存储资源。
7.根据权利要求I所述的方法,其中,部分地路由从所述SRAM存储资源读取的数据,以重排该数据从而在单个时钟周期中输出到所述第一客户端或所述第二客户端。
8.根据权利要求I所述的方法,进一步包括这样的步骤在重配置所述SRAM存储资源之前,使所述SRAM存储资源内的所述第一组条目中的所有条目无效,以将所述第二组条目中的至少一部分条目改为用作本地-全局数据高速缓存。
9.根据权利要求I所述的方法,进一步包括这样的步骤转储清除所述SRAM存储资源中的所述第二组条目,以将所述第二组条目存储在另一存储资源中。
10.一种用于使用统一存储器空间地址访问单独的并行存储器空间的系统,所述系统包括 处理器,所述处理器被配置为 在静态随机访问存储器(SRAM)存储资源中配置第一组条目,以用作本地-全局数据高速缓存; 在所述SRAM存储资源中配置第二组条目,以用作直接映射寄存器;以及 对由LI高速缓存从第一客户端和第二客户端接收的存储器访问请求进行仲裁,所述第一客户端被配置为产生向所述第二组条目存储数据的访问请求,所述第二客户端被配置为产生从所述第二组条目加载数据、向所述第一组条目存储数据以及从所述第一组条目加载数据的访问请求。
11.根据权利要求10所述的系统,进一步包括存储器存储指令,当由所述处理器执行时,所述存储器存储指令将所述处理器配置为 在所述SRAM存储资源中配置所述第一组条目; 在所述SRAM存储资源中配置所述第二组条目;以及 对由所述LI高速缓存从第一客户端和第二客户端接收的存储器访问请求进行仲裁,以产生所述访问请求。
12.根据权利要求10所述的系统,其中,对所述第一组条目的加载请求被指定为不被高速缓存,并且由所述加载请求所请求的数据从另一存储资源读取,且不被存储到所述SRAM存储资源中。
13.根据权利要求10所述的系统,其中,对所述第一组条目的存储请求被指定为不被高速缓存,并且与所述加载请求包含在一起的写入数据绕开所述SRAM存储。
14.根据权利要求10所述的系统,其中,所述SRAM存储器存储被配置为在每个时钟周期内执行仅仅一个读取操作和仅仅一个写入操作。
15.根据权利要求10所述的系统,其中,部分地路由由所述第一客户端提供的第一地址和由所述第二客户端提供的第二地址,以对所提供的所述第一地址和所述第二地址进行重排以访问SRAM存储资源。
全文摘要
本发明的一个实施例提出了一种用于提供L1高速缓存的技术,所述L1高速缓存为中央存储资源。L1高速缓存服务于具有多样化的时延和带宽要求的多个客户端。L1高速缓存可以被重新配置以创建多个存储器空间从而使L1高速缓存可代替先前的架构中的专用缓冲区、高速缓存和FIFO。在L1高速缓存内配置的“直接映射”存储区可以代替专用缓冲区、FIFO和接口路径,允许L1高速缓存的客户端交换属性和基元数据。直接映射存储区可以被用作全局寄存器堆。在L1高速缓存内配置的“本地-全局高速缓存”存储区可以被用于支持对多个空间的加载/存储存储器请求。这些空间包括全局、本地和调用-返回堆栈(CRS)存储器。
文档编号G06F13/00GK102640127SQ201080053459
公开日2012年8月15日 申请日期2010年9月24日 优先权日2009年9月25日
发明者亚历山大·L·明金, 史蒂文·詹姆斯·海因里希, 安佳娜·拉金德拉恩, 布雷特·W·库恩, 拉杰什瓦拉恩·赛尔瓦内桑, 斯图尔特·G·卡尔顿, 查理斯·麦卡弗 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1