CN100451996C - 提供软件实现的超高速缓冲存储器的方法与装置 - Google Patents

提供软件实现的超高速缓冲存储器的方法与装置 Download PDF

Info

Publication number
CN100451996C
CN100451996C CNB2005800005057A CN200580000505A CN100451996C CN 100451996 C CN100451996 C CN 100451996C CN B2005800005057 A CNB2005800005057 A CN B2005800005057A CN 200580000505 A CN200580000505 A CN 200580000505A CN 100451996 C CN100451996 C CN 100451996C
Authority
CN
China
Prior art keywords
cache
data
processor
main memory
software
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.)
Active
Application number
CNB2005800005057A
Other languages
English (en)
Other versions
CN1806231A (zh
Inventor
安江正宏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of CN1806231A publication Critical patent/CN1806231A/zh
Application granted granted Critical
Publication of CN100451996C publication Critical patent/CN100451996C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration 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代码,配置不同超高速缓冲存储器部分的个数、每个存储器的超高速缓存行的个数、每条指令的标签比较的次数、行块的大小、以及取代策略的某些方面。这提供了明显优于其中将这些参数固定化的硬件实现。
根据本发明的至少一个方面,这些方法与装置向处理器提供了与主存的有效的连接,以存储数据,例如程序代码以及其所操纵或所使用的相关的数据。如此处所使用的,把术语“数据”宽泛地定义为:包括应用程序代码、系统级程序代码、将加以操纵或使用的数据、数据流等。处理器可用于请求至少某些所使用与/或所执行的数据。本地存储器与处理器有效地加以连接,从而可以把数据存储在其中,以由处理器加以使用。显然,本地存储器不是一种硬件超高速缓冲存储器。处理器可用于执行应用程序接口代码,其中的应用程序接口代码对本地存储器进行配置,以在其中包括至少一个软件引用的超高速缓冲存储器区。较佳的做法是令处理器可用于引用多个不同的软件超高速缓冲存储器区。
另外,较佳的做法是令处理器可用于使用应用程序接口代码指出下列参数至少之一:包含在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数、超高速缓存行的大小、从中读取数据/向其写入数据的主存的指定区域、在每一个这样的读/写周期中可以从主存读取或写入主存的数据的数据大小、以及超高速缓存行取代策略。
处理器可用于(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。
可以使用能够从系统存储器106请求数据,并且能够为达到所希望的结果操纵这些数据的任何已知的技术,实现处理器102。例如,可以使用何能够执行软件与/或固件的任何已知微处理器,包括标准的微处理器、分布式微处理器等,实现处理器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         /*超高速缓存路数*/
#define CACHE_BUF_SIZE 15*1024  /*超高速缓存排大小*/
/*软件超高速缓存的结构区:用作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′所指出的主存数据进行直接存储器存取
  改变`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′所指出的主存区进行直接存储器存取
  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)。用于衬底的可选的材料包括砷化镓(印刷错arsenide)、镓铝砷等所谓的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之一,实现PU504。而且,还可以在处理器元素500中,实现一个以上的PU。
根据这一模块结构,某一具体计算机系统所使用的PE 500的个数,基于该系统所需要的处理能力。例如,服务器可以使用4个PE 500,工作站可以使用2个PE 500,而PDA可以使用1个PE 500。为处理某一具体软件单元所分配的PE 500的子处理单元的个数,基于该单元程序与数据的复杂程度与大小。
图7说明了子处理单元(SPU)508的优选的结构与功能。较佳的做法是令SPU 508体系结构填充通用处理器(其设计旨在在一个宽的应用范围实现高水平的平均性能)和专用处理器(其设计旨在针对某一单一的应用实现高性能)之间的空白。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实现了一个相当小的本地存储器,而不是一个超高速缓存。实际上,为了向实时应用(以及此处所提到的其它应用)的程序员提供相容的和可预测的存储器存取,在子处理单元508中的超高速缓冲存储器体系结构不是理想的选择。超高速缓冲存储器的超高速缓存命中/未命中特性导致易失存储器存取时间从几个周期到几百个周期变化。这样的易失性削弱了存取计时的可预测性,而这种可预测性,例如在实时应用编程中,是人们所希望的。在本地存储器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个字节的有效地址空间。较佳的做法是令MMU 562可用支持针对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使用一个通道接口和数据接口与DMAC560中的一个接口进行通信(发送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 (24)

1.一种装置,包括:
一个处理器,能够将其耦合于主存,并且可用于获得存储在主存中的数据;以及
一个本地存储器,与处理器有效连接,从而可以把数据存储在其中,以由处理器加以使用,本地存储器不是一种硬件超高速缓冲存储器,
其中,处理器对本地存储器进行配置,以在其中包括至少一个软件引用的超高速缓冲存储器区;
处理器可用于根据超高速缓存命中率和超高速缓存存取频率至少之一,计算超高速缓存负担;以及
处理器可用于针对计算结果,重新配置软件引用的超高速缓冲存储器区的参数。
2.根据权利要求1所述的装置,其中,处理器可用于使用应用程序接口代码指出包括在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数。
3.根据权利要求1所述的装置,其中,至少一个软件引用的超高速缓冲存储器区包括多个超高速缓存行,处理器可用于使用应用程序接口代码指出超高速缓存行的大小。
4.根据权利要求1所述的装置,其中,处理器可用于使用应用程序接口代码指出从中读取数据/向其写入数据的主存的指定区域。
5.根据权利要求1所述的装置,其中,处理器可用于使用应用程序接口代码指出在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小。
6.根据权利要求1所述的装置,其中,至少一个软件引用的超高速缓冲存储器区包括多个超高速缓存行,处理器可用于使用应用程序接口代码指出超高速缓存行取代策略。
7.根据权利要求1所述的装置,其中,处理器可用于执行应用程序接口代码,其中的应用程序接口代码对本地存储器进行配置,以在其中包括多个不同的软件引用的超高速缓冲存储器区。
8.根据权利要求1所述的装置,其中,处理器可用于使用应用程序接口代码指出下列参数至少之一:包含在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数、超高速缓存行的大小、从中读取数据/向其写入数据的主存的指定区域、在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小、以及超高速缓存行取代策略。
9.根据权利要求1所述的装置,其中,软件引用的超高速缓冲存储器区的参数包括下列参数至少之一:包含在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数、超高速缓存行的大小、从中读取数据/向其写入数据的主存的指定区域、在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小、以及超高速缓存行取代策略。
10.一种装置,包括:
一个主存,可用于存储数据;
多个处理器,能够将每一个处理器耦合于主存,并且可用于获得来自主存的数据中至少一些;以及
一个相应的本地存储器,与每一处理器一起设置在芯片上,与处理器有效连接,从而可以存储数据,以由处理器加以使用,本地存储器不是一种硬件超高速缓冲存储器;
其中,处理器都具有相同的结构,并且每一处理器能够通过执行处理器所共有的应用程序接口代码对其相应的本地存储器进行配置,以在其中包括至少一个软件引用的超高速缓冲存储器区;
其中,这些处理器中至少之一可用于根据超高速缓存命中率和超高速缓存存取频率至少之一,计算超高速缓存负担;以及
这些处理器中至少之一可用于针对计算结果,重新配置软件引用的超高速缓冲存储器区的参数。
11.根据权利要求10所述的装置,其中,这些处理器中至少之一可用于执行应用程序接口代码,其中的应用程序接口代码对其本地存储器进行配置,以在其中包括多个不同的软件引用的超高速缓冲存储器区。
12.根据权利要求10所述的装置,其中,这些处理器中至少之一可用于使用应用程序接口代码指出下列参数至少之一:包含在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数、超高速缓存行的大小、从中读取数据/向其写入数据的主存的指定区域、在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小、以及超高速缓存行取代策略。
13.一种方法,包括:
对一个本地存储器进行配置,以在其中包括至少一个软件引用的超高速缓冲存储器区,其中本地存储器不是一种硬件超高速缓冲存储器,
根据超高速缓存命中率和超高速缓存存取频率至少之一,计算超高速缓存负担;以及
针对计算结果,重新配置软件引用的超高速缓冲存储器区的参数,
其中处理器能够连接于主存,并且能够从主存中获得数据,以在本地存储器中由处理器加以使用。
14.根据权利要求13所述的方法,还包括使用应用程序接口代码指出包括在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数。
15.根据权利要求13所述的方法,还包括使用应用程序接口代码指出软件引用的超高速缓冲存储器区的超高速缓存行的大小。
16.根据权利要求13所述的方法,还包括使用应用程序接口代码指出从中读取数据/向其写入数据的主存的指定区域。
17.根据权利要求13所述的方法,还包括使用应用程序接口代码指出在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小。
18.根据权利要求13所述的方法,还包括使用应用程序接口代码指出软件引用的超高速缓冲存储器区的超高速缓存行取代策略。
19.根据权利要求13所述的方法,其中,软件引用的超高速缓冲存储器区的参数包括下列参数至少之一:包含在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数、超高速缓存行的大小、从中读取数据/向其写入数据的主存的指定区域、在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小、以及超高速缓存行取代策略。
20.一种装置,包括:
至少一个主处理器,耦合于硬件实现的超高速缓冲存储器,并且能够被耦合于一个主存,其中,主处理器可用于从主存获得数据,以存储在超高速缓冲存储器中;
多个子处理器,能够将每一个子处理器耦合于至少一个主处理器、能够将每一个子处理器耦合于主存,并且可用于获得来自主存的数据中至少一些;以及
一个相应的本地存储器,与每一子处理器一起设置在芯片上,并且与子处理器操作连接,从而可以存储数据,以由子处理器加以使用,本地存储器不是一种硬件超高速缓冲存储器,
其中,每一子处理器能对其相应的本地存储器进行配置,以在其中包括至少一个软件引用的超高速缓冲存储器区;
其中,这些处理器中至少之一可用于根据超高速缓存命中率和超高速缓存存取频率至少之一,计算超高速缓存负担;以及
这些处理器中至少之一可用于针对计算结果,重新配置软件引用的超高速缓冲存储器区的参数。
21.根据权利要求20所述的装置,其中,把主处理器、硬件实现的超高速缓冲存储器、子处理器以及本地存储器设置在一个公共半导体芯片上。
22.根据权利要求21所述的装置,其中,也把主存设置在该公共半导体芯片上。
23.根据权利要求20所述的装置,其中,每一子处理器可用于使用应用程序接口代码指出下列参数至少之一:包含在至少一个软件引用的超高速缓冲存储器区中的超高速缓存行的个数、超高速缓存行的大小、从中读取数据/向其写入数据的主存的指定区域、在每一个读/写周期中可以从主存读取或写入主存的数据的数据大小、以及超高速缓存行取代策略。
24.根据权利要求20所述的装置,其中,子处理器可用于执行应用程序接口代码,其中的应用程序接口代码对本地存储器进行配置,以在其中包括至少一个软件引用的超高速缓冲存储器区。
CNB2005800005057A 2004-05-28 2005-05-26 提供软件实现的超高速缓冲存储器的方法与装置 Active CN100451996C (zh)

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 CN1806231A (zh) 2006-07-19
CN100451996C true 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)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
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
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
JP5489884B2 (ja) * 2010-06-30 2014-05-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令実行装置、命令実行方法、及び命令実行プログラム
US20120297256A1 (en) * 2011-05-20 2012-11-22 Qualcomm Incorporated Large Ram Cache
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 富士通株式会社 情報処理装置、記憶装置制御方法、記憶装置制御プログラム及び情報処理システム
WO2018009240A2 (en) * 2015-11-12 2018-01-11 University Of Rochester Superconducting system architecture for high-performance energy-efficient cryogenic computing
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
US10936374B2 (en) * 2018-05-17 2021-03-02 International Business Machines Corporation Optimizing dynamic resource allocations for memory-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
US11330042B2 (en) 2018-05-17 2022-05-10 International Business Machines Corporation Optimizing dynamic resource allocations for storage-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
CN109118422B (zh) * 2018-07-10 2023-05-05 西安科技大学 一种嵌入式移动图形处理器的纹理Cache及处理方法
US20210311871A1 (en) 2020-04-06 2021-10-07 Samsung Electronics Co., Ltd. System and method for aggregating server memory

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1496517A (zh) * 2001-03-22 2004-05-12 �ֹ��� 用于宽带网络的计算机体系结构的数据同步系统和方法
CN1498369A (zh) * 2001-03-30 2004-05-19 使用带有软高速缓存的芯片上系统的系统与方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0416767A3 (en) * 1989-09-08 1992-04-29 Digital Equipment Corporation Position independent code location system
EP0777183B1 (en) 1995-12-01 2002-07-31 Hewlett-Packard Company, A Delaware Corporation Computer cache system
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
US6745295B2 (en) 2001-04-19 2004-06-01 International Business Machines Corporation Designing a cache with adaptive reconfiguration

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1496517A (zh) * 2001-03-22 2004-05-12 �ֹ��� 用于宽带网络的计算机体系结构的数据同步系统和方法
CN1498369A (zh) * 2001-03-30 2004-05-19 使用带有软高速缓存的芯片上系统的系统与方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Design and Performance of a General-PurposeSoftwareCache. Arun Iyengar.PROCEEDINGS OF IPCCC'99.. 1999
Design and Performance of a General-PurposeSoftwareCache. Arun Iyengar.PROCEEDINGS OF IPCCC'99.. 1999 *
Using Cache Optimizing Compiler for Managing SoftwareCache on Distributed Shared Memory System. Takeshi Nanri,Hiroyuki Sato,Masaaki Shimasaki.PROCEEDINGS OF HPC ASIA'97.. 1997
Using Cache Optimizing Compiler for Managing SoftwareCache on Distributed Shared Memory System. Takeshi Nanri,Hiroyuki Sato,Masaaki Shimasaki.PROCEEDINGS OF HPC ASIA'97.. 1997 *

Also Published As

Publication number Publication date
EP1658564B1 (en) 2010-09-29
ATE483202T1 (de) 2010-10-15
JP3802042B2 (ja) 2006-07-26
JP2005339557A (ja) 2005-12-08
EP1658564A1 (en) 2006-05-24
TWI264642B (en) 2006-10-21
DE602005023827D1 (de) 2010-11-11
CN1806231A (zh) 2006-07-19
US20050268038A1 (en) 2005-12-01
WO2005116839A1 (en) 2005-12-08
KR100829287B1 (ko) 2008-05-13
EP1658564A4 (en) 2008-12-31
KR20060063977A (ko) 2006-06-12
US7526608B2 (en) 2009-04-28
TW200609726A (en) 2006-03-16

Similar Documents

Publication Publication Date Title
CN100451996C (zh) 提供软件实现的超高速缓冲存储器的方法与装置
CN101099140B (zh) 用于混合dma队列和dma表的方法和装置
JP4322259B2 (ja) マルチプロセッサシステムにおけるローカルメモリへのデータアクセスを同期化する方法および装置
CN100432956C (zh) 管理多处理器系统中的共享存储器的方法和设备
CN100524270C (zh) 在多处理器系统中使用直接存储器存取传输来进行列表传输的方法及装置
US7644255B2 (en) Method and apparatus for enable/disable control of SIMD processor slices
JP4219369B2 (ja) プロセッサシステム内においてスタックを分離して管理する方法および装置
CN101326500B (zh) 提供同时软件/硬件高速缓存填充的方法与装置
EP1846820B1 (en) Methods and apparatus for instruction set emulation
TWI533222B (zh) 處理任務的工作分配控制
JP2006221639A (ja) グラフィック処理を用いた粒子操作方法及び装置
JP2009503624A (ja) アドレス空間の仮想化のための方法および装置
TW201351277A (zh) 平行執行緒子集合的均衡載入處理
JP2006172468A (ja) システム内部のデータ転送を処理する装置および方法
JP2006221638A (ja) タスク変更アプリケーションプログラミングインタフェースを提供する方法及び装置
JP4024271B2 (ja) マルチプロセッサシステムにおいて命令を処理するための方法と装置
JP4583327B2 (ja) 分散型のマルチプロセッサシステム内において一貫性管理を行う方法、システムおよび装置

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