CN1806231A - 提供软件实现的高速缓冲存储器的方法与装置 - Google Patents
提供软件实现的高速缓冲存储器的方法与装置 Download PDFInfo
- Publication number
- CN1806231A CN1806231A CNA2005800005057A CN200580000505A CN1806231A CN 1806231 A CN1806231 A CN 1806231A CN A2005800005057 A CNA2005800005057 A CN A2005800005057A CN 200580000505 A CN200580000505 A CN 200580000505A CN 1806231 A CN1806231 A CN 1806231A
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- processor
- cache memory
- local storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/601—Reconfiguration of cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Stored Programmes (AREA)
- Multi Processors (AREA)
- Memory System (AREA)
Abstract
一种方法与装置,提供与主存储器的操作连接的处理器,用于存储数据,该处理器可操作来请求至少某些所述数据以便使用。局部存储器与处理器操作连接,从而所述数据可以存储在其中以由所述处理器使用。所述局部存储器不是硬件高速缓冲存储器,其中,所述处理器可操作来执行应用程序接口代码,该应用程序接口代码对局部存储器进行配置,以在其中包括至少一个软件调用的高速缓冲存储器区。
Description
技术领域
本发明涉及在对外部***存储器拥有存取权的处理器的局部存储器中提供软件实现的高速缓冲存储器的方法与装置。
背景技术
实时的、多媒体应用正变得越来越为重要。这些应用要求极快的处理速度。例如,每秒数千兆比特的数据。尽管某些处理***使用单一的处理器实现了快速的处理速度,但其它一些处理***是利用多处理器体系结构来实现的。在多处理器***中,多个子处理器可以并行地操作(或者至少协调一致地)以达到所希望的处理结果。
最后几年中,一直存在着对更快计算机处理数据能力难以满足的需求,因为前沿计算机应用正变得越来越为复杂,并且对处理***有着更大的需求。图形应用包括在那些对处理***有着最强需求的前沿计算机应用中,因为它们在相当短的时间周期内需要大量的数据存取、数据计算以及数据操纵以便达到所希望的结果。传统的处理器具有几微秒左右量级的非常快的周期时间(即,微处理器能够操纵数据的时间单位),尽管存取存储在主存储器中的数据所需的时间可能明显高于微处理器的周期时间。例如,为了从使用动态随机存取存储器(DRAM)实现的主存储器中获得一个字节的数据所需的存取时间,在大约100微秒的量极上。
为了缓解因对DRAM存储器相当长时间存取所造成的瓶颈问题,本技术领域中的熟练技术人员已在利用高速缓冲存储器。高速缓冲存储器明显快于DRAM存储器,并且增强了主存储器所提供的数据存储功能。例如,可以把一个L2高速缓冲存储器外部地与处理器相耦接,或者把一个L1高速缓冲存储器与处理器内部地相耦接,这两种存储器明显快于利用DRAM技术所实现的主存储器(即***)存储器。例如,可以利用静态随机存取存储器(SRAM)技术实现L2高速缓冲存储器,SRAM技术比DRAM技术快出大约2~3倍。通常L1高速缓冲存储器比L2高速缓冲存储器还要快些。
由于高速缓冲存储器的价格相当高,所以它们通常远远小于主存储器。因此,人们已在使用传统的算法确定应把何种数据存储在高速缓冲存储器中。例如,这些传统的算法基于“参照的局部性”的理论概念,这一理论概念利用了这样一个事实:在任一具体时刻,仅使用一个大型可执行程序以及相关的数据的一个相当小的部分。因此,根据参照的局部性概念,在任一具体时间,仅把整个可执行程序的某些很小的部分存储在高速缓冲存储器中。
用于控制高速缓冲存储器中数据的存储的、利用参照的局部性或其它概念的已知算法的特性太多以至不能都在本说明书中充分加以介绍。然而,足以说明的是,并非每一算法都能适合于所有应用,因为不同应用的数据处理目标可能会有显著的差别。另外,在存在弱数据存储局部性和/或极少顺序存储器存取(例如,需要在某种程度上随机定位的程序和数据的某些部分)的情况下,使用高速缓冲存储器体系结构是十分不利的。
实现高速缓冲存储器的传统的方案要求定位在芯片上的(L1高速缓存器)或与芯片分离的(L2高速缓存器)的硬件高速缓冲存储器,这样的硬件高速缓冲存储器都是很昂贵的,并且都占用了宝贵的空间。因此,在未做认真考虑的情况下,不应该做出使用高速缓冲存储器设置的决定。由于在许多情况不保证高速缓冲存储器设置将能够获得良好的性能,所以某些处理***不使用它们。令人感到遗憾的是,在存在某种程度参照局部性的情况下,不使用硬件实现的高速缓冲存储器的决定,具有限制处理能力的不利的影响。
因此,在这一技术领域中,需要实现高速缓冲存储器的新的方法与装置,即这些方法与装置至少可以利用硬件实现的高速缓冲存储器的某些优点,而且在花费和空间使用方面不会导致不利的开销。
明发明内容
在具有一个其中执行处理任务的局部存储器和一个***存储器,但不具有传统硬件高速缓存器能力的处理器中,可能会产生不希望的存储器存取延迟。针对这一延迟问题的创造性的方案是,在处理器的局部存储器中提供一种软件实现的高速缓存器能力。根据本发明的一个或多个方面,可以通过对一个或多个应用编程接口(API)代码进行编程,在局部存储器中调用一个或多个不同的软件实现的高速缓冲存储器。另外,还可以通过API代码,配置不同高速缓冲存储器部分的数目、每个存储器的高速缓冲存储器线的数目、每条指令的标签比较的次数、线块(line block)的大小、以及代换策略的某些方面。这提供了明显优于其中将这些参数固定化的硬件实施方式的优点。
根据本发明的至少一个方面,这些方法与装置向处理器提供了与主存储器的操作连接,以存储数据,诸如由此***纵或以其他方式被使用的程序代码和相关的数据。如此处所使用的,把术语“数据”宽泛地定义为包括应用程序代码、***级程序代码、将***纵或以其他方式被使用的数据、操作码数据、数据流等。处理器可操作来请求至少某些所使用与/或所执行的数据。局部存储器与处理器操作连接,从而数据可被存储在其中以由处理器使用。显然,局部存储器不是硬件高速缓冲存储器。处理器可操作来执行应用程序接口代码,该应用程序接口代码对局部存储器进行配置,以在其中包括至少一个软件调用的高速缓冲存储器区。优选的是,处理器可操作来调用多个不同的软件高速缓冲存储器区。
另外,优选的是,处理器可操作来使用所述应用程序接口代码指定下列参数至少之一:包含在至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、高速缓冲存储器线的大小、从中读取数据/向其写入数据的主存储器的指定区域、在每个这样的读/写周期中可以从主存储器读取或写入主存储器的数据的数据大小、以及高速缓冲存储器线代换策略。
处理器可操作来(i)根据高速缓冲存储器命中率和高速缓冲存储器存取频率至少之一,计算高速缓冲存储器负担;以及(ii)响应于所述计算结果,重新配置软件调用的高速缓冲存储器区的参数。
此处,当结合附图对本发明进行描述时,对于这一技术领域中的熟练技术人员来说,本发明的其它方面、特性、优点等,将会变得十分明显。
附图说明
为了说明本发明的各个方面,图中描述了当前被视为较佳的形式,但应该认识到,本发明并不局限于这些所示的确切设置与结构。
图1说明了根据本发明的一个或多个方面的一个处理***;
图2说明了图1的处理***的一个局部存储器,包括根据本发明的一个或多个方面的一个或多个软件实现的高速缓冲存储器;
图3是一个流程图,说明了图1的处理***根据本发明的一个或多个方面可以执行的处理步骤;
图4是一个流程图,说明了图1的处理***根据本发明的一个或多个方面可以执行的另一些处理步骤;
图5说明了具有两或两个以上的子处理器的一个多处理***的结构,其中的一个或多个子处理器可以包括一个如图2中所示的一个局部存储器,这一局部存储器具有根据本发明的一个或多个进一步方面的一个或多个软件实现的高速缓冲存储器;
图6是一个结构图,说明了一个可操作来实现根据本发明的一个或多个进一步方面的多处理***的优选的处理器元素(PE);
图7说明了一个根据本发明的一个或多个进一步方面的图6的***的示范性子处理单元(SPU)的结构;
图8是一个结构图,说明了一个根据本发明的一个或多个进一步方面的图6的***的处理单元(PU)的结构。
具体实施方式
参照附图,其中相同的数字指示相同的元件,图1中描述了一个适合于使用根据本发明的一个或多个方面的处理***100。为了简洁起见,将参照图1的结构图,并且在此处将其描述为装置100,但应认识到,可很容易地把这一描述应用于某一具有相等效力的方法的各个方面。优选的是,装置100包括一个处理器102、一个局部存储器104、一个***存储器106(例如,一个DRAM)、以及一条总线108。
处理器102可以使用能够从***存储器106请求数据并且操纵这些数据从而达到所希望的结果的任何已知的技术来实现。例如,可以使用任何能够执行软件与/或固件的已知微处理器,包括标准的微处理器、分布式微处理器等,来实现处理器102。例如,处理器102可以是图形处理器,其能够请求和操纵数据,例如像素数据,包括灰度信息、颜色信息、质地信息、多边形信息、视频桢信息等。
显然,把局部存储器104定位在了与处理器102相同的芯片中。然而,为了实现硬件高速缓冲存储器功能,优选的是,局部存储器104不是其中无芯片或片下硬件高速缓存器电路、高速缓存器寄存器、高速缓冲存储器控制器等的传统的硬件高速缓冲存储器。由于片上空间通常是有限的,所以局部存储器104的大小远小于***存储器106。优选的是,处理器102针对程序的执行和数据的操纵,通过总线108提供把数据(可以包括程序数据)从***存储器106拷贝到局部存储器104的请求。可以使用任何已知的技术,例如直接存储器存取(DMA)技术,实现有利于数据存取的机制。
应该加以注意的是,在某些情况下,为了完成某一具体的处理功能,局部存储器104的有限的大小,可能要求对***存储器106的众多次数的数据存取。例如,在射线追踪(基于像素的图像提交)中所使用的、人们熟悉的KD-树搜寻技术,可能会要求对***存储器中的远高于1MB的数据的存取。由于局部存储器可能远小于1MB(例如256KB),而且由于可以被拷贝到局部存储器104的数据的增量,可能会更小(128B),所以可能需要对***存储器106的大量的数据存取(伴随有存取延迟),才能完成射线追踪功能。
然而,根据本发明的一个或多个实施例,可以通过局部存储器104中一个软件实现的高速缓存器,减少对***存储器106的数据存取的次数。图2说明了处理***100的局部存储器104的一个概念图。局部存储器104可以包括一个或多个软件调用的高速缓冲存储器区120A、120B、120C、…120N。可以通过由处理器102执行应用程序接口(API)代码,实现每一个软件调用的高速缓冲存储器区120。此外,为了实现硬件高速缓冲存储器功能,局部存储器104不是其中无芯片或片下硬件高速缓存器电路、高速缓存器寄存器、高速缓冲存储器控制器等的传统的硬件高速缓冲存储器。但不使用这样的硬件实现软件调用的高速缓冲存储器区120,而是使用软件代码实现这些区域。例如,参照图3,处理器102可以利用API代码指出软件高速缓存器120A的多个参数。在动作300处,处理器102可以指出高速缓存器条目大小,高速缓存器条目大小指出了将包括在软件调用的高速缓冲存储器区120A中的高速缓冲存储器线122的数目。如图2中所示,可以指出任何数目的行,例如4行。处理器102还可以使用API代码指出一个行的大小,其中行大小规定了软件调用的高速缓冲存储器区120A~N中每一高速缓冲存储器线122的范围。把程序中程序员可操作来指出高速缓存器条目大小和行大小的适当的API的代码表示如下:
Char cache_buf[entry][line_size]。
优选的是,处理器102还可操作来指出主存储器106的***地址,以在***存储器106中定义一个可根据其规定***存储器106的具体区域的点(通常为一个开始点)(动作302)。相对软件调用的高速缓冲存储器区102A从这些区域读取数据或者向这些区域写入数据。优选的是,处理器102也可操作来指出数据元素传输大小(或者元素大小)(动作302),数据元素传输大小是从***存储器106读取或者向***存储器106写入的数据的大小,即在每个这样的读/写周期中进行这一读/写的数据的大小。例如,所指出的主存储器106中的***地址可以为1000,数据元素传输大小可以为100。于是,可以把***存储器106分割成一些特定的区域:区域0、区域1、区域2等,其中,区域0从地址1000延伸至地址1099、区域1从地址1100延伸至地址1199、区域2从地址1200延伸至地址1299等。因此,可以把***存储器106中的真实地址表示如下:真实地址=***地址(即基地址)+(数据元素传输大小)×元素ID。元素ID是一个与***存储器106的这些区域中的某一特定区域相关的编号,例如,ID=0与区域0相关、ID=1与区域1相关等。可以把程序员能够用于指出***地址和数据元素大小的一个适当的API代码表示如下:
Void init_cache(单元地址,单元大小)
应该加以注意的是,优选的是,处理器102还可操作来指出一数目据(即高速缓冲存储器线)代换策略(动作304),例如,最近最少使用的(LRU)技术或用于取代高速缓冲存储器中的数据的任何人们所熟悉的其它算法。在一个可选服实施例中。“提示”可以表示哪一些高速缓冲存储器线应当在其它高速缓冲存储器线之前加以取代,例如,可以把一个优先值赋予软件高速缓存器120A的每一个高速缓冲存储器线122A~N,这一优先值表示在高速缓存器中这些行是应该在其它之前还是之后加以取代。
一旦通过API代码确定了高速缓存器条目大小、行大小、***地址以及数据元素大小参数,处理器102可以初始化和配置局部存储器104中的调用软件的高速缓存器区102A(动作306)。接下来,可以利用指出一个元素ID,并表示是读取数据还是写入数据的适当的API代码,从软件高速缓存器区120中读取数据,或者把数据写入软件高速缓存器区120。在这一方面,把程序员可以利用的适当的API代码表示如下:
void*get_cache(int id,int control)。
在一个或多个软件调用的高速缓冲存储器区的初始化和配置之后,处理器102可以执行适当的编程代码,以实现某一高速缓冲存储器功能。例如,如图4中所示,在动作308处,程序代码可以通过指出一个具体的元素ID,表示从***存储器106进行读取。在动作310处,判断所希望的数据是否包含在软件高速缓存器120的某一高速缓冲存储器线122处中。可以通过把高速缓存器标签赋予每一高速缓冲存储器线122,并且进行检查以观察某一高速缓存器标签是否与存储在任何高速缓冲存储器线中的数据相匹配,来实现这一点。如果答案是肯定的,则处理流前进到动作312,在动作312处,修改该具体高速缓冲存储器线122的状态,例如,指出该高速缓冲存储器线已被命中、改变LRU值、改变提示(或优先级)值等。此后,处理流前进到动作322,在动作322处,返回被命中的高速缓冲存储器线的局部存储器中的地址,以致可以获得所希望的数据,并且对其进行处理。
再次转向动作310,如果不存在高速缓存器标签的匹配,并且判断是否定的,则出现高速缓存器未命中的情况,处理流前进到动作314。在动作314处,根据代换策略,选择将加以取代的高速缓冲存储器线。例如,如果使用了最近最少使用的技术,则选择最近最少被命中的高速缓冲存储器线。在动作316处,判断是否清除了所选择的高速缓冲存储器线,意味着尚未修改高速缓冲存储器线的数据。如果清除了高速缓冲存储器线的数据,则处理流前进到动作318,在动作318处,从相应于所指出元素ID的***存储器106读取新的数据,并且将其存储在所选择的高速缓冲存储器线122中。此后,处理流前进到动作322,在动作322处,返回所选择的高速缓冲存储器线的局部存储器的地址,以致可以获得和操纵所希望的数据。
再次转向动作316,如果没有清除所选择的高速缓冲存储器线的数据,则处理流前进到动作320,在动作320处,把高速缓冲存储器线的数据写回到***存储器106,然后读取元素ID所指出的新的数据,并且将其写至所指出的高速缓冲存储器线。接下来,处理流前进到动作322,在动作322处,返回所选择的高速缓冲存储器线的局部存储器的地址,以致可以获得和操纵所希望的数据。
作为可以如何使用调用软件的高速缓冲存储器的又一个例子,例如,在一个来自DRAM 106或者来自一个网络连接(未在图中加以显示)的数据中,处理器102可以接收一个对独立于位置的代码的参照。作为响应,处理器判断独立于位置的代码是否位于局部存储器104的高速缓冲存储器区120中,如果位于局部存储器104的高速缓冲存储器区120中,则从高速缓冲存储器区120中接收这一独立于位置的代码。然后,例如,可以在一个可执行的程序中使用所检索的独立于位置的代码。
应该加以注意的是,其中可以根据以上的描述使用用于实现软件调用的高速缓冲存储器区的API代码的情况是非常多的,难以全部对它们加以描述。然而,例如,在KD树处理的搜寻过程中寻找叶的结点时,软件调用的高速缓冲存储器区可能是有用的。以下的操作代码说明了程序员如何可以利用软件调用的高速缓冲存储器区概念的过程:
init_cache(KDTREE_ADDRESS,sizeof(KDTree));
node=(DKTree*)get_cache(id,READ);
while(node->nextid!=-1){
id=node->nextid;
node=get_cache(id,READ);
}
根据本发明的一个或多个进一步的方面,优选的是,处理器102可操作来计算与一个或多个软件调用的高速缓冲存储器区120相关的高速缓冲存储器命中率和高速缓冲存储器存取频率至少之一。高速缓冲存储器命中率P是0和1之间的一个值,表示当请求所希望的数据时存在于一个给定的软件调用的高速缓冲存储器区120中的这样的数据的百分比。高速缓冲存储器存取频率N是一个指示每秒存取该给定软件调用的高速缓冲存储器区120的次数。可以根据下列方程计算高速缓冲存储器负担:
高速缓冲存储器负担=N×P×Chit+N×(1-P)×Cmiss,
其中Chit代表命中的高速缓冲存储器负担,Cmiss代表未命中的高速缓冲存储器负担。可以把高速缓冲存储器负担与不与高速缓存器相关的负担加以比较,以判断软件调用的高速缓冲存储器区120是否提供了好处。如果不提供好处,或者好处不充分,则优选的是处理器102可操作来对软件调用的高速缓冲存储器区120的某些参数进行重新配置,以增进这些好处。而且,可加以修改参数还包括高速缓冲存储器线数、***存储器特定区域的定义(元素ID)、数据元素传输大小、高速缓冲存储器线代换策略等。
例如,以下提供了用于实现以上所描述的软件高速缓冲存储器的一个或多个特性的适当程序:/*设置*/#define CACHE_BUF_NUM 4/*cache-way number(高速缓存器路数)*/#define CACHE_BUF_SIZE 15*1024/*cache-bank size(高速缓存器集大小)*//*软件高速缓存器的结构区:用作4路SIMD寄存器*/static vector signed(静态矢量标示的)int cache_simd_buf_tag;/*标签ID保存区*/static vector signed(静态矢量标示的)int cache_simd_buf_status;/*状态保存区*/
/*1:脏,0:其它*/static vector signed(静态矢量标示的)int cache_simd_buf_tagnum;/*高速缓冲存储器线数*/static vector signed(静态矢量标示的)int cache_simd_buf_elementsize;/*高速缓冲存储器线大小*/static vector unsigned(静态矢量未标示的)int cache_simd_buf_addr;/*局部存储器的地址*/static vector unsigned(静态矢量未标示的)int cache_simd_buf_systemaddr;/*主存储器的地址*//*用于计算的数据:用作标量寄存器*/static unsigned(静态未标示的)int cache_buf_systemaddr;/主存储器的地址*/static unsigned(静态未标示的)int cache_buf_elementsize;/*高速缓冲存储器线大小*/static signed(静态未标示的)int cache_buf_tagnum;/*高速缓冲存储器线数*//*高速缓存器缓冲区*/static(静态的)char cache_buf[CACHE_BUF_NUM][CACHE_BUF_SIZE];/*高速缓存器初始化*/void init_cahche(unsigned int system_address,unsigned int element_size)/*system_adderss:主存储器上的高速缓存器开始地址element size:高速缓冲存储器线大小*/{
/*输入值错误处理*/
if(element_size>CACHE_BUF_SIZE||element_size<1){
error handling}
/*高速缓存器设置*/
cache_buf_systemaddr=system_address;/*主存储器上的高速缓存器开始地址*/
cache_simd_buf_systemaddr=simd_splats(system_address);/*设置为SIMD寄存器的4个槽*/
cache_buf_elementsize=element_size;/*高速缓冲存储器线大小*/
cache_simd_buf_elementsize=simd_splats(element_size);/*设置为SIMD寄存器的4个槽*/
cache_buf_tagnum=CACHE_BUF_SIZE/element_size;/*高速缓冲存储器线数*/
cache_simd_buf_tag=simd_splats(-1);/*标签ID:初始值*/
cache_simd_buf_status=simd_splats(0);/*状态:初始值*/
cache_simd_buf_addr=simd_set(cache_buf[0],cache_buf[1],cache_buf[2],cache_buf[3];/*把地址值设置为4个槽*/}/*高速缓存器存取*/void*get_cache_buf(int id,int control)/*id:元素ID
control:0读、1写*/}
检查`id′和cache_simd_buf_tag′之间哪一个槽是相同的。
/*高速缓存器命中处理*/
针对返回值,把局部地址设置为`simd_ret_addr′
if(在第一个槽的情况下){
cache_simd_buf_status=simd_insert(control,cache_simd_buf_status,0);/*把控制***状态寄存器的第一个槽中*/
return((void*)simd_extract(simd_ret_addr,0);/*返回局部地址寄存器的第一个槽的值*/}
else if(在第二个槽的情况下){
转换`cache_simd_buf_tag′的第二个槽和第一个槽(LRU算法)
转换`cache_simd_buf_status′的第二个槽和第一个槽(LRU算法)
转换`cache_simd_buf_addr′的第二个槽和第一个槽(LRU算法)
cache_simd_buf_status=simd_insert(control,cache_simd_buf_status,0);/*把控制***状态寄存器的第一个槽中*/
return((void*)simd_extract(simd_ret_addr,1);/*返回局部地址寄存器的第二个槽的值*/}
else if(在第三个槽的情况下){
在`cache_simd_buf_tag′的第三个槽和第一个槽之间轮换(LRU算法)
在`cache_simd_buf_status′的第三个槽和第一个槽之间轮换(LRU算法)
在`cache_simd_buf_addr′的第三个槽和第一个槽之间轮换(LRU算法)
cache_simd_buf_status=simd insert(control,cache_simd_buf_status,0);/*把控制***状态寄存器的第一个槽中*/
return((void*)simd_extract(simd_ret_addr,2)/*返回局部地址寄存器的第三个槽的值*/}
else if(在第四个槽的情况下){
在`cache_simd_buf_tag′的第四个槽和第一个槽之间轮换(LRU算法)
在`cache_simd_buf_status′的第四个槽和第一个槽之间轮换(LRU算法)
在`cache_simd_buf_addr′的第四个槽和第一个槽之间轮换(LRU算法)
cache_simd_buf_status=simd_insert(control,cache_simd_buf_status,0);/*把控制***状态寄存器的第一个槽中*/
return((void*)simd_extract(simd_ret_addr,3);/*返回局部地址寄存器的第四个槽的值*/}
/*高速缓存器未命中处理:取代第四个槽*/
cache_buf_addr=simd_extract(cache_simd_buf_addr,3);/*从第四个槽得到高速缓存器局部地址*/
if(在写高速缓存器状态的情况下){
/*写回处理*/
cache_buf_tag=simd_extract(cache_simd_buf_tag,3);/*从第四个槽得到标签ID*/
system_address=cache_buf_systemaddr+cache_buf_tag*cache_buf_elementsize;/*计算主存储器的目标地址*/
对从`cache_buf_addr′指出的局部存储数据到`system_address′所指出的主存储器数据进行DMA(直接存储器存取)
改变`cache_simd_buf_status′的第四个槽的状态}
/*高速缓存器重填*/
new_tag=(id/cache_buf_tagnum)*cache_buf_tagnum;
system_address=cache_buf_systemaddr+new_tag*cache_buf_elementsize;
对从`cache_buf_addr′指出的局部存储区到`system_address′所指出的主存储器区进行DMA(直接存储器存取)
cache_simd_buf_tag=simd_insert(new_tag,cache_sime_buf_tag,3);/*向第四个槽设置新标签*/
cache_sime_buf_status=simd_insert(control,cache_sime_buf_status,3/*向第四个槽设置新状态*/
return_address=cache_buf_addr+(id-new_tag)*cache_buf_elementsize;
return((void*return_address);}
参照图5,可以把以上针对图1~4所讨论的概念应用于多处理***100A,多处理***100A包括多个与局部存储器104A~D相关联的处理器102A~D,以及一个通过一条总线108互连的主存储器106。尽管举例说明了4个处理器102,但在不背离本发明的构思与范围的情况下,可以使用任何数目的处理器102。可以通过任何已知的技术实现处理器102,每一个处理器可以具有类似的结构,也可以具有不同的构造。
现在,将对多处理器***的一个优先计算机体系结构进行描述。这一优先计算机体系结构适合于实现此处所讨论的一个或多个特性。根据一个或多个实施例,可以把多处理器***按一种单一芯片方案加以实现,即这种单一芯片方案可操作来独立地与/或分布式地处理涉及多种媒体的应用,例如游戏***、家庭终端、PC***、服务器***以及工作站。在某些应用中,例如,在游戏***和家庭终端中,实时计算可能是必须的。例如,在一个实时、分布式游戏应用中,一个或多个网络图像解压缩、3D计算机图形、音频生成、网络通信、物理传真、以及人工智能过程,必须足够快速地得以执行,才能够向用户提供实时感受的幻觉。因此,多处理器***中的每一个处理器必须能够在一个短的、可以预测的时间内完成各项任务。
为此,并根据这一计算机体系结构,从一个公共计算模块(即单元)开始构造一个多处理计算机***的所有处理器。这一公共计算模块具有一个相容的结构,优选的是使用相同的指令集合结构。可以由一个或多个客户机、服务器、PC、移动计算机、游戏机、PDA、机顶盒、电器设施、数字电视以及使用计算机处理器的其它设备形成多处理计算机***。
如果希望的话,也可以令这些计算机***作为网络的成员,相容的模块化结构可以实现对多处理计算机***的应用与数据的有效、高速的处理,如果使用网络的话,还可以在网络上实现应用与数据的快速传输。这一结构还简化了不同规格、不同处理能力的网络成员的建造,以及这些成员准备处理应用过程。
参照图6,这一基本处理模块是处理器元素(PE)500。PE 500包括I/O接口502、处理单元(PU)504以及多个子处理单元508,即子处理单元508A、子处理单元508B、子处理单元508C以及子处理单元508D。一条局部(或内部)PE总线512在PU 504、子处理单元508以及一个存取器接口511之间传输数据和应用。例如,局部PE总线512可以具有一个传统的体系结构,也可以将其作为一个包交换网络加以实现。如果作为包交换网络加以实现,尽管要求更多的硬件,但增加了可用的带宽。
可以使用各种用于实现数字逻辑的方法构造PE 500。然而,优选的是把PE 500构造为单一的集成电路,这一集成电路使用了硅衬底上的互补金属氧化物半导体(CMOS)。用于衬底的可选的材料包括砷化镓、镓铝砷等所谓的III-B化合物,这些化合物使用了范围广泛的各种杂质。也可以使用超导体材料,例如快速单通量量子(RSFQ)逻辑,实现PE 500。
PE 500通过高带宽存储器连接516与共享(主)存储器514密切相关。尽管优选的是存储器514为一个动态随机存取存储器(DRAM),但也可以使用其它机制,例如,作为静态随机存取存储器(SRAM)、磁随机存取存储器(MRAM)、光存储器、全息存储器等,实现存储器514。
优选的是分别把PU 504和子处理单元508耦接于一个包括直接存储器存取DMA功能的存储流控制器(MFC),MFC与存取器接口511相组合,有助于DRAM与PE 500的PU 504和子处理单元508之间的数据传送。应该加以注意的是,可以把DMAC 514与/或存取器接口511相对子处理单元508和PU 504整体地或独立地加以设置。实际上,DMAC功能与/或存取器接口511功能可以与一个或多个(优选的是与全部)子处理单元508和PU 504的相集成。还应该加以注意的是,可以把DRAM 514相对PE 500整体地或独立地加以设置。例如,可以把DRMA 514设置于片下,这也是所示例子的意图所在,也可以按集成的方式,把DRAM 514设置在片上。
例如,PU 504可以为能够独立处理数据和应用的标准的处理器。在操作过程中,优选的是,PU 504能够通过子处理单元调度与协调数据和应用的处理。优选的是,子处理单元为单指令、多数据(SIMD)处理器。在PU 504的控制下,各子处理单元以并行和独立的方式处理这些数据和应用。优选的是使用PowerPC核心实现PU 504。PowerPC核心是一种微处理器体系结构,其使用了精简指令集合计算(RISC)技术。RISC可使用简单指令的集合执行更复杂的指令。因此,处理器的计时可以基于较简单和较快的操作,从而能够使微处理器针对给定的时钟速度执行更多的指令。
应该注意的是,可以通过能够发挥主处理单元作用的,即能够调度和协调子处理单元508的数据和应用的处理的子处理单元508之一,实现PU 504。而且,还可以在处理器元素500中,实现一个以上的PU。
根据这一模块结构,某一具体计算机***所使用的PE 500的数目,基于该***所需要的处理能力。例如,服务器可以使用4个PE 500,工作站可以使用2个PE 500,而PDA可以使用1个PE 500。为处理某一具体软件单元所分配的PE 500的子处理单元的数目,基于该单元程序与数据的复杂程度与大小。
图7说明了子处理单元(SPU)508的优选的结构与功能。优选的是,SPU508体系结构填充通用处理器(其设计旨在在一个宽的应用范围实现高水平的平均性能)和专用处理器(其设计旨在针对某一单一的应用实现高性能)之间的空白。SPU 508的设计旨在满足游戏应用、媒体应用、宽带***等的高性能需求,并且能够向实时应用的程序员提供高水平的控制能力。SPU 508的一些能力包括图形几何管线、曲面分割、快速傅里叶变换、图像处理关键字、流处理、MPEG编码/解码、加密、解密、设备驱动器扩展、制模、游戏物理、内容创建、以及音频合成与处理。
子处理单元508包括两个基本的功能单元,即一个SPU核心510A和一个存储流控制器(MFC)510B。SPU核心510A执行程序、操纵数据等,而MFC 510B执行SPU核心510A与***的DRAM 514之间的数据传送相关的功能。
SPU核心510A包括一个局部存储器550、一个指令单元(IU)552、寄存器554、一个或多个浮点执行阶段556以及一个或多个定点执行阶段558。优选的是使用单端口随机存取存储器,例如使用SRAM存储器,实现局部存储器550。然而,由于使用了高速缓存器,大多数处理器减少了相对存储器的延迟。SPU核心510A实现了一个相当小的局部存储器,而不是高速缓存器。实际上,为了向实时应用(以及此处所提到的其它应用)的程序员提供相容的和可预测的存储器存取,在子处理单元508A中的高速缓冲存储器体系结构不是理想的选择。高速缓冲存储器的高速缓存器命中/未命中特性导致易失存储器存取时间从几个周期到几百个周期变化。这样的易失性削弱了存取计时的可预测性,而这种可预测性,例如在实时应用编程中,是人们所希望的。在局部存储器SRAM 550中,可以通过把DMA传送与数据计算相重叠,实现延迟隐藏。这向实时应用的编程提供了高水平的控制。由于与DMA传送的相关的延迟和指令开销超过了向高速缓存器未命中提供服务的延迟的开销,所以当DMA传送的大小足够大,并且可充分加以预测(例如,可以在需要数据之前,发布一条DMA命令)时,SRAM局部存储器方案具有优势。
运行在子处理单元508给定之一上的程序使用一个局部地址访问相关的局部存储器550,但也在整个***的映像中向局部存储器550的每一个单元赋予了一个实际地址(RA)。这允许特权软件把一个局部存储器550映像成一个过程的有效地地址(EA),以促进一个局部存储器550和另一个局部存储器550之间的DMA传送。PU 504也可以使用有效地址直接存取局部存储器550。在一个优选实施例中,局部存储器550包含556K个字节的存储容量,寄存器552的容量为128×128个比特。
优选的是使用一条处理流水线实现SPU核心504A,其中,按流水线方式处理逻辑指令。尽管可以把流水线划分成任意数目的处理指令的阶段,但流水线通常包括取出一或多条指令、对指令进行解码、检查指令之间的相关性、发布指令、以及执行指令。在这一方面,IU 552包括一个指令缓冲器、指令解码电路、相关性检查电路以及值龄发布电路。
优选的是,指令缓冲器包括多个寄存器,这些寄存器耦接于局部存储器550,并且可操作来临时存储它们将加以取出的指令。优选的是,指令缓冲器以这样的方式操作:所有指令成组地离开寄存器,即基本同时离开寄存器。尽管指令缓冲器可以为任意大小,但优选的是其大小不超过大约两或三个寄存器。
总体上讲,解码电路分解指令,并且生成执行相应指令的功能的逻辑微操作。例如,逻辑微操作可以指出算术和逻辑操作、把操作加载并存储于局部存储器550、寄存器源操作元与/或直接数据操作元。解码电路还可以指出指令使用哪些资源,例如目标寄存器地址、结构资源、功能单元与/或总线。解码电路还可以提供指出其中需要资源的指令流水线阶段的信息。优选的是,指令解码电路可操作来对条数等于指令缓冲器的寄存器的数目的多条指令基本上同时进行解码。
相关性检查电路包括执行测试的数字逻辑,以判断给定指令的操作元是否依赖于流水线中其它指令的操作元。如果依赖,则在修改这样的其它操作元(例如,允许其它指令完成执行)之前,不应该执行该给定的指令。优选的是,相关性检查电路同时判断从解码器电路所分派的多条指令的相关性。
指令发布电路可操作来向浮点执行阶段556与/或定点执行阶段558发布指令。
优选的是把寄存器554实施成为相对大的统一的寄存器文件,例如作为一个128个条目的寄存器文件,加以实现。这允许在无需寄存器重新命名的情况下深度流水线化那些高频度的执行,从而避免了寄存器饥饿。对硬件重新命名,通常会耗费处理***中很大部分的空间与能量。因此,当通过软件循环展开或其它交叉技术掩盖了延迟时,可以实现有利的操作。
优选的是,SPU核心510A为超标量体系结构,以致能够每时钟周期发布一条以上的指令。优选的是,SPU核心510A以这样一种程度按超标量操作:与来自指令缓冲器的同时的指令分派相对应,例如在2和3之间(意味着每时钟周期发布2或3条指令)。根据所要求的处理能力,可以使用较多或较少数量的浮点执行阶段556和定点执行阶段558。在一个优选实施例中,浮点执行阶段556按每秒320亿个浮点操作的速度(32GFLOPS)进行操作。定点执行阶段558按每秒320亿个操作的速度(32GOPS)进行操作。
优选的是,MFC 510B包括一个总线接口单元(BIU)564、一个存储器管理单元(MMU)562以及一个直接存储器存取控制器(DMAC)560。除了DMAC 560外,优选的是,510B按以相应SPU核心510A和总线一半的频率(一半的速度)加以运行,以满足低功能设计目标。MFC 510B可操作来处理从总线512进入SPU 508的数据和指令、提供针对DMAC的地址翻译、以及数据连贯性的探查操作。BIU 564提供了总线512和MMU 562以及DMAC 560之间的一个接口。于是,物理地与/或逻辑地把SPU 508(包括SPU核心510A和MFC 510B)和DMAC 560连接于总线512。
优选的是,MMU 562可操作来把有效地址(从DMA命令中获取的)翻译成用于存储器存取的实际地址。例如,MMU 562可以把有效地址的较高阶的比特翻译成实际地址比特。然而,优选的是,较低阶的地址比特是不可翻译的,并且将它们既视为逻辑的,也视为物理的,以用于形成实际地址和请求对存储器的存取。在一个或多个实施例中,可以根据一个64个比持的存储器管理模式实现MMU 562,并且可以提供具有4K、64K、1M以及16M个字节页大小和256MB段大小的264个字节的有效地址空间。优选的是,MMU562可用支持针对DMA命令的最多265个字节的虚拟存储器和242个字节(4TB)的物理存储器。MMU 562的硬件可以包括一个8个条目的全相关的SLB、一个256个条目的4路设置相关TLB、以及针对TLB的(用于硬件TLB未命中处理的)4×4取代管理表(RMT)。
优选的是,DMAC 560可操作来管理来自SPU核心510A和一个或多个诸如PU 504的其它设备与/或其它SPU的命令。有3种类型的DMA命令:放置命令,它们把数据从局部存储器550移至共享存储器514;得到命令,它们把数据从共享存储器514移至局部存储器550;以及存储控制命令,它们包括SLI命令和同步命令。同步命令可以包括原子命令、发送信号命令以及专用的屏障命令。响应DMA命令,MMU 562把有效地址翻译成实际地址,并且把实际地址传送于BIU 564。
优选的是,SPU核心510A使用一个通道接口和数据接口与DMAC 560中的一个接口进行通信(发送DMA命令、状态等)。SPU核心510A通过通道接口把DMA命令分派于DMAC 560中的一个DMA队列。一旦一条DMA命令处于DMA队列中,将由DMAC 560中的发布与完成逻辑对其加以处理。当所有针对一条DMA命令的总线事务得以完成时,通过通道接口把一个完成信号发送回SPU核心510A。
图8说明了PU 504的优选结构和功能。PU 504包括两个基本的功能单元:PU核心504A和存储流控制器(MFC)504B。PU核心504A执行程序、操纵数据、执行多处理器管理功能等,而MFC 504B执行与PU核心504A和***100的存储器空间之间的数据传送相关的功能。
PU核心504A可以包括一个L1高速缓存器570、一个指令单元572、寄存器574、一个或多个浮点执行阶段576、以及一个或多个定点执行阶段578。L1高速缓存器通过MFC 504B为从共享存储器106、处理器102、或存储器空间的其它部分所接收的数据提供数据高速缓存器功能。由于优选的是PU核心504A作为一条超级流水线加以实现,所以优选的是把指令单元572作为具有许多阶段的指令流水线加以实现,这些阶段包括取出、解码、依赖性检查、发布等。优选的是,PU核心504A也为超标量配置,从而每时钟周期可以从指令单元572发布一条以上的指令。为了实现高处理能力,浮点执行阶段576和定点执行阶段578包括流水线配置中的多个阶段。根据所要求的处理能力,可以使用较多或较少数量的浮点执行阶段576和定点执行阶段578。
MFC 504B包括一个总线接口单元(BIU)580、一个L2高速缓冲存储器、一个非可高速缓存器单元(NCU)584、一个核心接口单元(CIU)586、以及一个存储器管理单元(MMU)588。MFC 504B的主要部分以相应PU核心504A和总线108的一半的频率(一半的速度)加以运行,以满足功耗设计目标。
BIU 580在总线108和L2高速缓存器582以及NCU 584逻辑块之间提供了一个接口。为此,BIU 580既可以作为一个主设备也可以作为一个从设备在总线108上运作,以执行完全连贯的存储器操作。作为主设备,其可以代表L2高速缓存器582和NCU 584向总线108发布用于服务的加载/存储请求。BIU 580还可以实现一个针对命令的流控制机制,该机制限制可以发送于总线108的命令的总数。可以把总线108上的数据操作设计为呈8个节拍,因此,优选的是,把BIU 580设计为大约128个字节的高速缓冲存储器线,连贯性和同步粒度为128KB。
优选的是把L2高速缓冲存储器582(并且支持硬件逻辑)设计成能够高速缓存器512KB的数据。例如,L2高速缓存器582可以处理可高速缓存器的加载/存储、数据预取出、指令取出、指令预取出、高速缓存器操作、以及屏障操作。优选的是,L2高速缓存器582为一个8路设置相关***。L2高速缓存器582可以包括与6个逐出队列(例如,6个RC机器)相匹配的6个重新加载队列,以及8个(64个字节宽)存储队列。L2高速缓存器582可操作来提供L1高速缓存器570中的某些或全部数据的一个后援拷贝。有利的是,当对处理结点进行热转储时,后援拷贝的这一提供可操作来恢复一个或多个状态。这一配置还允许LI高速缓存器570使用较少的端口更快地操作,并且允许更快的高速缓存器到高速缓存器的传送(因为请求可能会停止在L2高速缓存器582处)。这一配置还提供了一个用于把高速缓存器连贯性管理传递于L2高速缓冲存储器582的机制。
NCU 584与CIU586、L2高速缓冲存储器582以及BIU580接口,并且总体上作为一个针对PU核心504A和存储器***之间的非可高速缓存器操作的排队/缓冲电路加以运作。优选的是,NCU 584可以处理所有与PU核心504A的、L2高速缓存器器582不能处理的通信,例如,禁止高速缓存器的加载/存储、屏障操作、以及高速缓存器连贯性操作。优选的是,NCU 584以一半的速度运行,以满足以上所提到的功耗目标。
把CIU 586设置在MFC 504B和PU核心504A的边界上,并且作为针对来自执行阶段576,578、指令单元572以及MMU单元588并且进入L2高速缓存器582和NCU 584的请求的一个路由、仲裁以及流控制点加以运作。优选的是,PU核心504A和MMU 588全速运行,而L2高速缓存器582和NCU 584可按2∶1的速度比率操作。因此,CIU 586中存在一个频率边界,而且其功能之一是,当其在两个频域之间传送请求和重新加载数据时,可适当地处理频率交叉。
CIU 586由3个功能块组成:一个加载单元、一个存储单元以及一个重新加载单元。另外,CIU 586还执行一数目据预取出功能,优选的是,其为加载单元的一个功能部分。优选的是,CIU可操作来:(i)从PU核心504A和MMU 588接收加载和存储请求;(ii)把这些请求从全速时钟频率转换成半速(一个2∶1的时钟频率转换;(iii)把可高速缓存器的请求路由至L2高速缓存器582,并且把非可高速缓存器的请求路由至NCU 584;(iv)在针对L2高速缓存器582和NCU 584的请求之间进行公平的仲裁;(v)对向L2高速缓存器582和NCU 584的分派进行流控制,以致能够在一个目标窗口中接收这些请求,并且避免了溢出;(vi)接收加载返回数据,并且将其路由至执行阶段576,578、指令单元572、或者MMU 588;(vii)把窥探请求传送于执行阶段576,578、指令单元572、或者MMU 588;以及(viii)把加载返回数据和窥探交通从半速转换成全速。
优选的是,MMU 588为PU核心540A提供地址翻译,例如,通过一个二级地址翻译设施。优选的是通过可比MMU 588小得多和快得多的独立的指令和数据ERAT(对实际地址翻译有效的)阵列,把翻译的第一级提供于PU核心504A中。
在一个优选实施例中,PU 504按46GHz、10F04操作,并且具有一个64个比特的实现。优选的是,寄存器为64个比特长(尽管一个或多个专用寄存器可以小一些),有效地址为64个比特长。优选的是使用PowerPC技术实现指令单元570、寄存器572以及执行阶段574和576,以实现(RISC)计算技术。
关于这一计算机***的模块化结构的进一步的细节,可以在申请号为6,526,491的美国专利中发现,特将其所公开的全部内容并入此处,以作参考。
根据本发明的至少一个进一步的方面,可以利用适当的硬件,例如图中所说明的硬件,实现以上所描述的方法与装置。可以利用任何已知的技术,例如标准的数字电路、任何可操作来执行软件与/或固件程序的已知的处理器、一个或多个可编程数字器件或***,例如可编程只读存储器(PROM)、可编程阵列逻辑器件(PAL)等,实现这样的硬件。另外,尽管把图中所说明的装置描述为被划分成了某些功能块,但也可以通过独立的电路实现这样的功能块与/或将它们组合成一个或多个功能单元。而且,为了实现可传输性与/或可分布性,可以通过一个或多个能够将其存储在一个或多个适当的存储媒体(例如一个或多个软盘、一个或多个存储器芯片等)中的软件与/或固件程序,实现本发明的各个方面。
如以上所讨论的,本发明的各个方面在处理器的局部存储器中提供了高速缓冲存储器的软件实现。不同高速缓冲存储器部分的数目、每个存储器的高速缓冲存储器线的数目、每条指令标签比较的次数、行块的大小,以及代换策略的某些方面,可以通过API代码进行配置。这明显优于其中把这些参数加以固定的硬件实现。另外,通过监视高速缓冲存储器命中率和存取频率,并且计算高速缓冲存储器负担,可以通过软件自动地调整高速缓存器配置(即以上所列出的高速缓存器参数与/或其它高速缓存器参数),以提高处理性能。
有利的是,用于提供软件实现的高速缓冲存储器的方法与装置,允许程序员利用硬件实现的高速缓冲存储器的至少某些优点,而且芯片空间的消费和使用方面不要求处理器设计者/制造商承受不利的成本开销。因此,可以获得存储器效率、处理能力以及处理质量方面的明显改进。
尽管此处已参照具体的实施例对本发明进行了描述,然而,应该认识到,这些实施例仅说明性地描述了本发明的原理与应用。因此,应该认识到,在不背离所附权利要求所定义的本发明的构思与范围的情况下,可以对这些说明性的实施例进行众多的修改,并且可以设计其它的配置。
产业上的可应用性
本发明适用于在一个对外部***存储器拥有存取权的处理器的局部存储器中提供一种软件实现的高速缓冲存储器的技术。
Claims (41)
1.一种装置,包括:
处理器,能够被耦接到主存储器,并且操作来获得存储在主存储器中的数据;以及
局部存储器,与所述处理器操作连接,从而所述数据可被存储在其中以由所述处理器使用,所述局部存储器不是一种硬件高速缓冲存储器,
其中,所述处理器可操作执行应用程序接口代码,所述应用程序接口代码对局部存储器进行配置,以便其中包括至少一个软件调用的高速缓冲存储器区。
2.根据权利要求1所述的装置,其中,所述处理器可操作来使用所述应用程序接口代码指定包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目。
3.根据权利要求1所述的装置,其中,所述至少一个软件调用的高速缓冲存储器区包括多个高速缓冲存储器线,所述处理器可操作来使用所述应用程序接口代码指定高速缓冲存储器线的大小。
4.根据权利要求1所述的装置,其中,所述处理器可操作来使用所述应用程序接口代码指定主存储器的一些区域以便从其中读取数据/向其中写入数据。
5.根据权利要求1所述的装置,其中,所述处理器可操作来使用所述应用程序接口代码指定在每个这样的读/写周期中可以从主存储器读取的或被写入主存储器的所述数据的数据大小。
6.根据权利要求1所述的装置,其中,所述至少一个软件调用的高速缓冲存储器区包括多个高速缓冲存储器线,所述处理器可操作来使用所述应用程序接口代码指定高速缓冲存储器线代换策略。
7.根据权利要求1所述的装置,其中,所述处理器可操作来执行应用程序接口代码,所述应用程序接口代码对局部存储器进行配置,以便其中包括多个不同的软件调用的高速缓冲存储器区。
8.根据权利要求1所述的装置,其中,所述处理器可操作来使用所述应用程序接口代码指定下列参数至少之一:包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、所述高速缓冲存储器线的大小、从中读取数据/向其写入数据的所述主存储器的指定区域、在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小、以及高速缓冲存储器线代换策略。
9.根据权利要求1所述的装置,其中,
所述处理器可操作来根据高速缓冲存储器命中率和高速缓冲存储器存取频率至少之一,计算高速缓冲存储器负担;以及
所述处理器可操作来响应于所述计算结果,重新配置所述软件调用的高速缓冲存储器区的参数。
10.根据权利要求9所述的装置,其中,所述软件调用的高速缓冲存储器区的参数包括下列参数至少之一:包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、所述高速缓冲存储器线的大小、从中读取数据/向其写入数据的所述主存储器的指定区域、在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小、以及高速缓冲存储器线代换策略。
11.一种装置,包括:
主存储器,可操作来存储数据;
多个处理器,每个都能被耦接到所述主存储器,并且可操作来从所述主存储器中获得至少某些数据;以及
相应的局部存储器,与每一处理器一起设置在芯片上,与处理器操作连接,从而所述数据可被存储以由所述处理器使用,所述局部存储器不是硬件高速缓冲存储器。
其中,每一处理器能够执行应用程序接口代码,所述应用程序接口代码对每一处理器的相应的局部存储器进行配置,以便其中包括至少一个软件调用的高速缓冲存储器区。
12.根据权利要求11所述的装置,其中,至少一个处理器可操作来执行应用程序接口代码,所述应用程序接口代码对其局部存储器进行配置,以便其中包括多个不同的软件调用的高速缓冲存储器区。
13.根据权利要求11所述的装置,其中,至少一个处理器可操作来使用所述应用程序接口代码指定下列参数至少之一:包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、所述高速缓冲存储器线的大小、从中读取数据/向其写入数据的所述主存储器的指定区域、在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小、以及高速缓冲存储器线代换策略。
14.根据权利要求11所述的装置,其中,
至少一个处理器可操作来根据高速缓冲存储器命中率和高速缓冲存储器存取频率至少之一,计算高速缓冲存储器负担;以及
至少一个处理器可操作来响应于计算结果,重新配置软件调用的高速缓冲存储器区的参数。
15.一种方法,包括:
在处理器上执行应用程序接口代码,以对局部存储器进行配置,以便其中包括至少一个软件调用的高速缓冲存储器区,其中所述局部存储器不是硬件高速缓冲存储器,
其中所述处理器能够连接于主存储器,并且可操作来从所述主存储器中获得数据,以便在局部存储器中由处理器使用。
16.根据权利要求15所述的方法,还包括使用所述应用程序接口代码指定包括在至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目。
17.根据权利要求15所述的方法,还包括使用所述应用程序接口代码指定软件调用的高速缓冲存储器区的高速缓冲存储器线的大小。
18.根据权利要求15所述的方法,还包括使用所述应用程序接口代码指定从中读取数据/向其写入数据的所述主存储器的指定区域。
19.根据权利要求15所述的方法,还包括使用所述应用程序接口代码指定在每个这样的读/写周期中可以从所述主存储器读取或写入所述主存储器的所述数据的数据大小。
20.根据权利要求15所述的方法,还包括使用所述应用程序接口代码指定所述软件调用的高速缓冲存储器区的高速缓冲存储器线代换策略。
21.根据权利要求15所述的方法,还包括:
基于高速缓冲存储器命中率和高速缓冲存储器存取频率至少之一,计算高速缓冲存储器负担;以及
响应于所述计算结果,重新配置所述软件调用的高速缓冲存储器区的参数。
22.根据权利要求21所述的方法,其中,所述软件调用的高速缓冲存储器区的参数包括下列参数至少之一:包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、所述高速缓冲存储器线的大小、从中读取数据/向其写入数据的所述主存储器的指定区域、在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小、以及高速缓冲存储器线代换策略。
23.一种含有软件程序的存储媒体,该软件程序可操作来致使处理器执行下列动作:
对局部存储器进行配置,以便其中包括至少一个软件调用的高速缓冲存储器区,其中所述局部存储器不是硬件高速缓冲存储器,
其中所述处理器能够连接于主存储器以便存储数据,并且可操作来从主存储器中获得至少某些数据,以便在所述局部存储器中由所述处理器使用。
24.根据权利要求23所述的存储媒体,还包括使用所述应用程序接口代码指定包括在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目。
25.根据权利要求23所述的存储媒体,还包括使用所述应用程序接口代码指定所述软件调用的高速缓冲存储器区的高速缓冲存储器线的大小。
26.根据权利要求23所述的存储媒体,还包括使用所述应用程序接口代码指定从中读取数据/向其写入数据的主存储器的指定区域。
27.根据权利要求23所述的存储媒体,还包括使用所述应用程序接口代码指定在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小。
28.根据权利要求23所述的存储媒体,还包括使用所述应用程序接口代码指定所述软件调用的高速缓冲存储器区的高速缓冲存储器线代换策略。
29.根据权利要求23所述的存储媒体,还包括:
基于高速缓冲存储器命中率和高速缓冲存储器存取频率至少之一,计算高速缓冲存储器负担;以及
响应于所述计算结果,重新配置所述软件调用的高速缓冲存储器区的参数。
30.根据权利要求29所述的存储媒体,其中,所述软件调用的高速缓冲存储器区的参数包括下列参数至少之一:包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、所述高速缓冲存储器线的大小、从中读取数据/向其写入数据的所述主存储器的指定区域、在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小、以及高速缓冲存储器线代换策略。
31.一种方法,包括:
接收独立于位置的代码的参照到处理器中,该处理器包括其中含有至少一个高速缓冲存储器区的局部存储器;
判断所述独立于位置的代码是否位于所述处理器的所述局部存储器的所述高速缓冲存储器区中,如果是,则从所述高速缓冲存储器区中接收所述独立于位置的代码;以及
在可执行的程序中使用所检索的独立于位置的代码。
32.根据权利要求31所述的方法,其中,所述局部存储器的所述高速缓冲存储器区是可被软件调用。
33.一种装置,包括:
至少一个主处理器,耦接于硬件实现的高速缓冲存储器,并且能够耦接于主存储器,其中,所述主处理器可操作来从所述主存储器获得数据,以存储在所述高速缓冲存储器中;
多个子处理器,每个耦接于所述至少一个主处理器、能够耦接于所述主存储器,并且可操作来从所述主存储器中获得至少某些数据;以及
相应的局部存储器,与每一处理器一起设置在芯片上,并且与其操作连接,从而所述数据可被存储以由所述处理器使用,所述局部存储器不是硬件高速缓冲存储器,
其中,每一处理器能够执行应用程序接口代码,所述应用程序接口代码对其相应的局部存储器进行配置,以便其中包括至少一个软件调用的高速缓冲存储器区。
34.根据权利要求33所述的装置,其中,所述主处理器、硬件高速缓冲存储器、子处理器以及局部存储器被设置在公共半导体芯片上。
35.根据权利要求34所述的装置,其中,所述主存储器也被设置在该公共半导体芯片上。
36.根据权利要求33所述的装置,其中,每一子处理器可操作来使用所述应用程序代码指定下列参数至少之一:包含在所述至少一个软件调用的高速缓冲存储器区中的高速缓冲存储器线的数目、所述高速缓冲存储器线的大小、从中读取数据/向其写入数据的所述主存储器的指定区域、在每个这样的读/写周期中可以从所述主存储器读取的或写入所述主存储器的所述数据的数据大小、以及高速缓冲存储器线代换策略。
37.根据权利要求33所述的装置,其中,所述处理器可操作来执行应用程序接口代码,所述应用程序接口代码对所述局部存储器进行配置,以在其中包括多个不同的软件调用的高速缓冲存储器区。
38.一种装置,包括:
至少一个主处理器,耦接于硬件实现的高速缓冲存储器,并且能够耦接于主存储器,其中,所述主处理器可操作来从所述主存储器获得数据,以存储在所述高速缓冲存储器中;
多个子处理器,每个耦接于所述至少一个主处理器、能够被耦接于所述主存储器,并且可操作来从所述主存储器中获得至少某些数据;以及
相应的局部存储器,与每一处理器一起设置在芯片上,并且与其操作连接,从而所述数据可被存储以由所述处理器使用,所述局部存储器不是硬件高速缓冲存储器。
39.根据权利要求38所述的装置,其中,所述处理器和相关的局部存储器被设置在公共半导体衬底上。
40.根据权利要求38所述的装置,还包括通过总线耦接于所述处理器的共享存储器。
41.根据权利要求40所述的装置,其中,所述处理器、相关的局部存储器以及共享存储器被设置在公共半导体衬底上。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US57544404P | 2004-05-28 | 2004-05-28 | |
US60/575,444 | 2004-05-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1806231A true CN1806231A (zh) | 2006-07-19 |
CN100451996C CN100451996C (zh) | 2009-01-14 |
Family
ID=35451049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005800005057A Active CN100451996C (zh) | 2004-05-28 | 2005-05-26 | 提供软件实现的超高速缓冲存储器的方法与装置 |
Country Status (9)
Country | Link |
---|---|
US (1) | US7526608B2 (zh) |
EP (1) | EP1658564B1 (zh) |
JP (1) | JP3802042B2 (zh) |
KR (1) | KR100829287B1 (zh) |
CN (1) | CN100451996C (zh) |
AT (1) | ATE483202T1 (zh) |
DE (1) | DE602005023827D1 (zh) |
TW (1) | TWI264642B (zh) |
WO (1) | WO2005116839A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102687129A (zh) * | 2009-12-30 | 2012-09-19 | 国际商业机器公司 | 多核心数据处理***中的工作项分布 |
CN103597450A (zh) * | 2011-05-20 | 2014-02-19 | 高通股份有限公司 | 具有存储在存储器页的一部分中的元数据的存储器 |
CN108349725A (zh) * | 2015-11-12 | 2018-07-31 | 罗切斯特大学 | 用于高性能能量有效低温计算的超导***架构 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7644239B2 (en) | 2004-05-03 | 2010-01-05 | Microsoft Corporation | Non-volatile memory cache performance improvement |
US7490197B2 (en) | 2004-10-21 | 2009-02-10 | Microsoft Corporation | Using external memory devices to improve system performance |
JP2006309338A (ja) * | 2005-04-26 | 2006-11-09 | Toshiba Corp | データ変換器モジュール |
JP4855710B2 (ja) * | 2005-04-28 | 2012-01-18 | 株式会社東芝 | ソフトウェアのプラグイン方法、および、アプリケーションプログラム |
US8914557B2 (en) | 2005-12-16 | 2014-12-16 | Microsoft Corporation | Optimizing write and wear performance for a memory |
US7581064B1 (en) * | 2006-04-24 | 2009-08-25 | Vmware, Inc. | Utilizing cache information to manage memory access and cache utilization |
US7434002B1 (en) * | 2006-04-24 | 2008-10-07 | Vmware, Inc. | Utilizing cache information to manage memory access and cache utilization |
US20080005473A1 (en) * | 2006-06-30 | 2008-01-03 | Tong Chen | Compiler assisted re-configurable software implemented cache |
US8370575B2 (en) * | 2006-09-07 | 2013-02-05 | International Business Machines Corporation | Optimized software cache lookup for SIMD architectures |
US9176886B2 (en) * | 2006-10-30 | 2015-11-03 | Hewlett-Packard Development Company, L.P. | Method and system for filling cache memory for cache memory initialization |
US7711904B2 (en) * | 2007-03-22 | 2010-05-04 | International Business Machines Corporation | System, method and computer program product for executing a cache replacement algorithm |
US8631203B2 (en) * | 2007-12-10 | 2014-01-14 | Microsoft Corporation | Management of external memory functioning as virtual cache |
US8423989B2 (en) * | 2008-05-02 | 2013-04-16 | Synchonoss Technologies, Inc. | Software parameter management |
US8868844B2 (en) * | 2008-06-25 | 2014-10-21 | International Business Machines Corporation | System and method for a software managed cache in a multiprocessing environment |
US8819651B2 (en) * | 2008-07-22 | 2014-08-26 | International Business Machines Corporation | Efficient software cache accessing with handle reuse |
US9032151B2 (en) | 2008-09-15 | 2015-05-12 | Microsoft Technology Licensing, Llc | Method and system for ensuring reliability of cache data and metadata subsequent to a reboot |
US7953774B2 (en) | 2008-09-19 | 2011-05-31 | Microsoft Corporation | Aggregation of write traffic to a data store |
JP5489884B2 (ja) * | 2010-06-30 | 2014-05-14 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 命令実行装置、命令実行方法、及び命令実行プログラム |
KR101257192B1 (ko) | 2011-07-28 | 2013-04-22 | 손상훈 | 비닐하우스용 운반장치 |
US9158685B2 (en) | 2012-09-11 | 2015-10-13 | Apple Inc. | System cache with cache hint control |
EP2881918B1 (en) * | 2013-12-06 | 2018-02-07 | My Virtual Reality Software AS | Method for visualizing three-dimensional data |
JP6384375B2 (ja) * | 2015-03-23 | 2018-09-05 | 富士通株式会社 | 情報処理装置、記憶装置制御方法、記憶装置制御プログラム及び情報処理システム |
US11330042B2 (en) | 2018-05-17 | 2022-05-10 | International Business Machines Corporation | Optimizing dynamic resource allocations for storage-dependent workloads in disaggregated data centers |
US11221886B2 (en) | 2018-05-17 | 2022-01-11 | International Business Machines Corporation | Optimizing dynamical resource allocations for cache-friendly workloads in disaggregated data centers |
US10977085B2 (en) | 2018-05-17 | 2021-04-13 | International Business Machines Corporation | Optimizing dynamical resource allocations in disaggregated data centers |
US10936374B2 (en) * | 2018-05-17 | 2021-03-02 | International Business Machines Corporation | Optimizing dynamic resource allocations for memory-dependent workloads in disaggregated data centers |
US10601903B2 (en) | 2018-05-17 | 2020-03-24 | International Business Machines Corporation | Optimizing dynamical resource allocations based on locality of resources in disaggregated data centers |
US10893096B2 (en) | 2018-05-17 | 2021-01-12 | International Business Machines Corporation | Optimizing dynamical resource allocations using a data heat map in disaggregated data centers |
US10841367B2 (en) | 2018-05-17 | 2020-11-17 | International Business Machines Corporation | Optimizing dynamical resource allocations for cache-dependent workloads in disaggregated data centers |
CN109118422B (zh) * | 2018-07-10 | 2023-05-05 | 西安科技大学 | 一种嵌入式移动图形处理器的纹理Cache及处理方法 |
US11416431B2 (en) | 2020-04-06 | 2022-08-16 | Samsung Electronics Co., Ltd. | System with cache-coherent memory and server-linking switch |
US20210374056A1 (en) * | 2020-05-28 | 2021-12-02 | Samsung Electronics Co., Ltd. | Systems and methods for scalable and coherent memory devices |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0416767A3 (en) * | 1989-09-08 | 1992-04-29 | Digital Equipment Corporation | Position independent code location system |
DE69527634T2 (de) | 1995-12-01 | 2002-11-28 | Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto | Rechner-Cachespeichersystem |
US5966734A (en) * | 1996-10-18 | 1999-10-12 | Samsung Electronics Co., Ltd. | Resizable and relocatable memory scratch pad as a cache slice |
US6526491B2 (en) | 2001-03-22 | 2003-02-25 | Sony Corporation Entertainment Inc. | Memory protection system and method for computer architecture for broadband networks |
US6826662B2 (en) | 2001-03-22 | 2004-11-30 | Sony Computer Entertainment Inc. | System and method for data synchronization for a computer architecture for broadband networks |
US6622208B2 (en) * | 2001-03-30 | 2003-09-16 | Cirrus Logic, Inc. | System and methods using a system-on-a-chip with soft cache |
US6745295B2 (en) | 2001-04-19 | 2004-06-01 | International Business Machines Corporation | Designing a cache with adaptive reconfiguration |
-
2005
- 2005-05-24 US US11/136,022 patent/US7526608B2/en active Active
- 2005-05-26 KR KR1020067006208A patent/KR100829287B1/ko active IP Right Grant
- 2005-05-26 DE DE602005023827T patent/DE602005023827D1/de active Active
- 2005-05-26 EP EP05745794A patent/EP1658564B1/en active Active
- 2005-05-26 WO PCT/JP2005/010095 patent/WO2005116839A1/en not_active Application Discontinuation
- 2005-05-26 JP JP2005153848A patent/JP3802042B2/ja active Active
- 2005-05-26 CN CNB2005800005057A patent/CN100451996C/zh active Active
- 2005-05-26 AT AT05745794T patent/ATE483202T1/de not_active IP Right Cessation
- 2005-05-27 TW TW094117526A patent/TWI264642B/zh active
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102687129A (zh) * | 2009-12-30 | 2012-09-19 | 国际商业机器公司 | 多核心数据处理***中的工作项分布 |
US8949529B2 (en) | 2009-12-30 | 2015-02-03 | International Business Machines Corporation | Customizing function behavior based on cache and scheduling parameters of a memory argument |
CN102687129B (zh) * | 2009-12-30 | 2015-06-17 | 国际商业机器公司 | 多核心数据处理***中的工作项分布 |
CN103597450A (zh) * | 2011-05-20 | 2014-02-19 | 高通股份有限公司 | 具有存储在存储器页的一部分中的元数据的存储器 |
CN108349725A (zh) * | 2015-11-12 | 2018-07-31 | 罗切斯特大学 | 用于高性能能量有效低温计算的超导***架构 |
CN108349725B (zh) * | 2015-11-12 | 2021-11-19 | 罗切斯特大学 | 用于高性能能量有效低温计算的超导***架构 |
Also Published As
Publication number | Publication date |
---|---|
KR100829287B1 (ko) | 2008-05-13 |
DE602005023827D1 (de) | 2010-11-11 |
EP1658564B1 (en) | 2010-09-29 |
KR20060063977A (ko) | 2006-06-12 |
JP2005339557A (ja) | 2005-12-08 |
US20050268038A1 (en) | 2005-12-01 |
WO2005116839A1 (en) | 2005-12-08 |
EP1658564A1 (en) | 2006-05-24 |
ATE483202T1 (de) | 2010-10-15 |
JP3802042B2 (ja) | 2006-07-26 |
US7526608B2 (en) | 2009-04-28 |
TWI264642B (en) | 2006-10-21 |
TW200609726A (en) | 2006-03-16 |
CN100451996C (zh) | 2009-01-14 |
EP1658564A4 (en) | 2008-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1806231A (zh) | 提供软件实现的高速缓冲存储器的方法与装置 | |
JP4805341B2 (ja) | アドレス空間の仮想化のための方法および装置 | |
JP4322259B2 (ja) | マルチプロセッサシステムにおけるローカルメモリへのデータアクセスを同期化する方法および装置 | |
JP4246204B2 (ja) | マルチプロセッサシステムにおける共有メモリの管理のための方法及び装置 | |
CN1811745A (zh) | 使能/禁止控制simd处理器切片的方法和设备 | |
JP4219369B2 (ja) | プロセッサシステム内においてスタックを分離して管理する方法および装置 | |
CN101099140B (zh) | 用于混合dma队列和dma表的方法和装置 | |
JP4346612B2 (ja) | 情報処理方法および装置 | |
US7689784B2 (en) | Methods and apparatus for dynamic linking program overlay | |
JP4645973B2 (ja) | 命令セットのエミュレーションのための方法、装置及びシステム | |
JP2006318477A (ja) | ロジカルパーティショニングされた処理環境におけるリソース管理のための方法および装置 | |
JP2006172474A (ja) | アドレスを変換するための方法および装置、情報処理装置 | |
JP4134182B2 (ja) | タスク変更アプリケーションプログラミングインタフェースを提供する方法及び装置 | |
JP2006172468A (ja) | システム内部のデータ転送を処理する装置および方法 | |
JP4583327B2 (ja) | 分散型のマルチプロセッサシステム内において一貫性管理を行う方法、システムおよび装置 | |
US20060179275A1 (en) | Methods and apparatus for processing instructions in a multi-processor system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |