减少存储体冲突的方法与流程

文档序号:17585732发布日期:2019-05-03 21:17阅读:462来源:国知局
减少存储体冲突的方法与流程

本发明涉及一种减少存储体冲突的方法,属于存储器技术领域。



背景技术:

最近,随着对处理器的处理数据的能力的要求的提高,一些处理器已经被设计为并行访问存储器。在存储器具有多个存储体(bank)的情况下,处理器可以同时对多个存储体并行访问而不会发生冲突。

然而,在某些情况下,处理器可能需要并行访问存储在同一存储体中的数据,在正常情况下,存储器中数据的地址是固定的,此时便会发生存储体冲突(bankconflict),即,必须逐个访问位于同一存储体中的这些数据。例如,在如图3所示的存储器示例中,每一列代表一个存储体,即该内存中具有bank0,…,bank7的8个存储体,若访问同一个存储体中的多个地址的数据,例如在bank0中点击0,8,16,24,如图3中灰度显示,那么它必须用多个周期来逐个访问bank0,导致内存性能降低。



技术实现要素:

本发明的目的在于在处理器的lsu(load/storeunit,存取单元)的微架构设计中,提供一种减少存储体冲突方案,以提高存储器性能。

本发明的第一方面提供了一种减少存储体冲突的方法,包括:

确定对包含n个存储体的存储器进行并行访问时会发生存储体冲突的多个数据的二进制地址;

确定移位步长,移位步长表示存储体中的数据将被移动的存储体数,是从存储器中的数据的二进制地址中选择的n位所表示的值,其中n=2^n,且n和n均为自然数;并且,存储器中的数据以各自的移位步长移动之后,发生存储体冲突的多个数据将不再位于同一存储体中;以及

按照移位步长移动存储器中的数据,其中存储器中的数据在存储体内部的行地址值不变。

本发明通过地址变换,使访问时可能发生冲突的数据不再位于同一存储体中,减少了存储体冲突,提高了存储器性能。

进一步,发生存储体冲突的多个数据的移位步长彼此均不相同,使得存储器中的数据以移位步长移动之后,发生存储体冲突的多个数据将分别位于不同的存储体中。通过将所有发生冲突的数据分别移动到不同存储体中,尽可能的消除所有冲突,充分提高存储器的性能。

进一步,从存储器中的数据的二进制地址中选择的n位可以是连续的n位。可选择地,从存储器中的数据的二进制地址中选择的n位也可以是不连续的n位。更具体地,发生存储体冲突的多个数据的行距可以用2^i+j表示,其中,i和j为自然数,且0≤j<2^i;在j=0时,移位步长可以是从存储器中的数据的二进制地址的第n+i位起向高位方向的连续的n位所表示的值。在j≠0时,移位步长可以是从存储器中的数据的二进制地址的第n+i或n+i+1位起向高位方向的连续n位所表示的值,或存储器中的数据的二进制地址中不连续的n位所表示的值。这些不同移位步长的选择取决于存储体冲突的具体情况以及软件的配置。

进一步,可以将存储器的存储空间划分为多个页面,提供多组寄存器来配置页面以便为每个页面分别确定移位步长,寄存器的数量小于或等于页面的数量。进一步,在寄存器的数量小于页面的数量时,可以以tlb方式使每个寄存器映射到多个页面。

本发明的第二方面提供了一种减少存储体冲突的装置,包括:

存储体冲突确定单元,被被配置为确定对包含n个存储体的存储器进行并行访问时会发生存储体冲突的多个数据的二进制地址;

移位步长确定单元,被配置为使存储器中的数据以各自的移位步长移动之后,发生存储体冲突的多个数据将不再位于同一存储体中,其中,移位步长表示存储体中的数据将被移动的存储体数,是从存储器中的数据的二进制地址中选择的n位所表示的值,其中n=2^n,且n和n均为自然数;和

移位单元,被配置为按照移位步长移动存储器中的数据,其中所述存储器中的数据在存储体内部的行地址值不变。

进一步,移位步长确定单元进一步被配置为,发生存储体冲突的多个数据的移位步长彼此均不相同,使存储器中的数据以移位步长移动之后,发生存储体冲突的多个数据将分别位于不同的存储体中。

进一步,从存储器中的数据的二进制地址中选择的n位可以是连续的n位。可选择地,从存储器中的数据的二进制地址中选择的n位也可以是不连续的n位,且发生存储体冲突的数据的移位步长可以完全不同。

进一步,移位步长确定单元可以进一步被配置为,将存储器的存储空间划分为多个页面,提供多组寄存器来配置页面以便为每个页面分别选择移位步长,寄存器的数量小于或等于页面的数量。进一步,在寄存器的数量小于页面的数量时,以tlb方式使每个寄存器映射到多个页面。

本发明的第三方面提供了一种处理器,该处理器包括具有多个存储体的存储器以及如前述第二方面或第二方面的任一实现方式提供的装置。

本发明的第四方面提供了一种电子设备,该电子设备可以是各种计算机、服务器或各种移动设备,包括如前述第四方面或第四方面的任一实现方式提供的处理器。

本发明的第五方面提供了一种计算机程序产品,该计算机程序产品包括程序代码,当该计算机程序产品被控制器执行时,该控制器执行前述第一方面或第一方面的任一实现方式提供的方法。

本发明通过简单提取存储在存储器中的数据的地址中的几位来进行移位操作,将可能发生冲突的数据移动到不同存储体中,减少或消除了存储体冲突,提高了存储器性能。

附图说明

图1是根据本发明的实施例的减少存储体冲突的方法的流程图。

图2是根据本发明的实施例的能够减少存储体冲突的系统的示意图。

图3是根据本发明的实施例的具有八个存储体的存储器示意图。

图4是根据本发明的实施例的使用地址[5:3]移动存储器中的数据后的存储器示意图。

图5是根据本发明的实施例的使用地址[6:4]移动存储器中的数据后的存储器示意图。

图6是根据本发明的实施例的使用地址的第6、5、3位所表示的值作为移位步长移动存储器中的数据后的存储器示意图。

图7是根据本发明的实施例的存储器地址重组的硬件实现示意图。

具体实施方式

下面结合具体实施例和附图对本发明做进一步说明。可以理解的是,此处描述的具体实施例仅仅是为了解释本发明,而非对本发明的限定。此外,为了便于描述,附图中仅示出了与本发明相关的部分而非全部的结构或过程。

诸如动态随机存取存储器(dram)或静态随机存取存储器(sram)等的存储器设备可以包括多个存储体(bank),处理器等设备可以对多个存储体进行独立访问。在处理器需要并行访问存储在同一存储体中的数据时,会发生存储体冲突,本发明通过地址变换,将可能发生冲突的数据移动到不同存储体中,从而减少存储体冲突。

根据本发明的一个实施例,提供了一种减少存储体冲突的方法,如图1所示,包括以下步骤:

首先,步骤s101,确定对包含多个存储体的存储器进行并行访问时会发生存储体冲突的多个数据的二进制地址。举例来说,如图3中所示,在具有八个存储体bank0,bank1,…,bank7的存储器300中,正常情况下,可以通过8个地址并行访问八个存储体中的数据而不会发生冲突。然而,如果同时点击存储在同一个存储体中的多个数据,例如同时点击bank0中的四个地址0,8,16,24,如图3中灰色所示,即会发生存储体冲突,在需要同时访问0,8,16,24处的数据时,0,8,16,24即为会发生存储体冲突的位置。

随后,步骤s102,确定移位步长,移位步长表示存储体中的数据被移动的存储体数,即数据将被移动几个存储体,它是从存储器中的数据的二进制地址中选择的n位所表示的值,其中n=2^n,且n和n均为自然数;并且,存储器中的数据以移位步长移动之后,发生存储体冲突的数据将不再位于同一存储体中;以及步骤s103,按照移位步长移动存储器中的数据,其中存储器中的数据在存储体内部的行地址值不变。

例如,对于图3示出的存储器300,可以用移位步长将发生冲突的数据0,8,16,24转移,使他们位于不同的存储体。存储器300包括8个存储体(即n=8),对于其中存储的每个数据来说,最多需要移动7个bank,最少需要移动0个bank,那么用三位地址即可表示移位步长,因此,可以从存储器中存储的数据的地址中选择3位来表示移位步长(即n=3)。例如,根据本发明的一个实施例,可以使用从地址的第3位起向高位方向的连续3位所表示的值作为移位步长,也就是取地址[5:3]来移动存储器中的数据,即,取存储器中存储的数据的地址中的第5位到第3位(在地址表示中,通常将最右侧的最低位作为第0位,向左依次递增,以下地址的位数均按此方式表示),按照这三位的值来移动存储器中的数据。那么,在存储器300中,第一行数据0-7的移位步长均为000,即第一行数据不移动;第二行数据8-15的移位步长均为001,即,移动一位;同理,可得剩余其他数据的移位步长。在本实施例中,发送存储体冲突的数据被移动到了不同存储体中,但是数据在存储体内部的行地址值并没有发生变化,即从附图表示的来看,数据都是在同一行中移动,因为移位步长只改变了存储体的解码,而并不会改变存储体内部的行地址的解码。

按照上述方式移位后,可以得到图4所示的结果,存储器中的数据0,8,16,24被分别移动到了不同的存储体bank0、bank1、bank2、bank3中,如此,处理器便可以在一个周期中并行地访问0,8,16,24。在图4中,仅示意性的示出了发生存储体冲突的数据所在的行,其余行被省略。

从图3和图4的对比中可以看出,通过上述的方式移动数据后,存储体冲突被消除,0,8,16,24处的数据可以在同一个周期中被并行地访问,提高了存储器性能。

需要注意的是,以上移位步长的选择是可以根据不同的数据访问需求而灵活配置的,例如,在另一实施例中,对于同样类似于图3中的存储器300的具有8个存储体的存储器,假设bank0中的0,16,32,48处的数据发生冲突,为了将以上数据移动到不同存储体,可以使用从地址的第4位起向高位方向的连续3位所表示的值作为移位步长,也就是取地址[6:4]所表示的值作为移位步长来移动存储器中的数据,0,16,32,48处的数据的移位步长分别为000、001、010、011,从而0,16,32,48处的数据将分别移动到存储体bank0、bank1、bank2、bank3中,移位后的结果如图5所示。

此外,在以上两个示例中,所有的冲突数据都被分别移动到了不同的存储体中,但是,这只是本发明的一种较优实施方式,在一些情况下,也可以不把所有的冲突数据都分别移动到不同存储体中,而只是将部分冲突数据移动到不同存储体中,消除部分冲突。例如,在图3所示的存储器中,假设需要同时访问0,8,16,24处的数据,除了上述的取地址[5:3]来移动存储器中的数据以外,也可以取地址[6:4]来移动存储器中的数据,即四个发生冲突的数据的移位步长分别为000、000、001、001,移动后得到的结果与图5相同,此时,发生存储体冲突的0,8,16,24处的数据被分别移动到了bank0、bank0、bank1、bank1中,使得对这样四个数据的访问从四个周期缩减为两个周期,同样减少了存储体冲突,在一定程度上提高了存储器性能。

上面的实施例示出了选择存储在存储器中的数据的地址中的连续的几位来表示移位步长的情况。除此之外,也可以选择地址中不连续的几位来作为移位步长。

例如,在图3所示的具有8个存储体的存储器的实例中,在一个实施例中,若发生冲突的数据是bank0中的8,16,32处的数据,为了将以上数据转移到不同存储体中,可以选择地址的第6、5、3位组成的数据作为移位步长,分别将数据移动到存储体bank1、bank0、bank2中,得到如图6所示的结果,图6仅示意性的示出了部分行,其余行被省略。同样,在一些实施方式中,也可以选择地址的第5、4、2位组成的数据作为移位步长,或者可以选择6、3、1位组成的数据来作为移位步长等等,这些不同的选择取决于不同的数据访问需求带来的不同存储体冲突或者不同的软件配置。

尽管对于移位步长的不同的选择取决于不同的数据访问需求带来的不同存储体冲突或者不同的软件配置。但是,在选择时也可以有一定的规律可循。例如,在发生存储体冲突的多个数据是等间距的情况下,冲突数据的行距(本发明中,行距表示两个数据的行地址值之间的差)可以用2^i+j表示,其中,i和j为自然数,且0≤j<2^i,此时,在不同情况下,可以按照下述方式选择移位步长。

在j=0时,移位步长可以选择为从存储器中的数据的二进制地址的第n+i位起向高位方向的连续的n位所表示的值。例如,在图3所示的存储体冲突示例中,0,8,16,24处的数据的行距为1,即,i=0,j=0,那么选择第n+i=3起的连续3(n=3)位,即地址[5:3]来移动存储器中的数据,可以有效消除存储体冲突;再如,图5所示的将冲突数据0,16,32,48分别移动到了不同的存储体中的实例,冲突数据的行距为2,即,i=1,j=0,那么可以选择第n+i=4起的连续3(n=3)位,即地址[6:4]来移动存储器中的数据,也可以有效消除存储体冲突。而在j≠0时,移位步长可以是从存储器中的数据的二进制地址的第n+i或n+i+1位起向高位方向的连续n位所表示的值,或存储器中的数据的二进制地址中不连续的n位所表示的值。例如,同样利用图3所示的具有8个存储体的存储器的实例,假设发生存储体冲突的数据为0,24,48,则行距为3,即,i=1,j=1,那么可以选择第n+i=4起的连续3(n=3)位,即地址[6:4]来移动存储器中的数据,此时,0,24,48处的数据的移位步长分别为000、001、011,数据将被分别移动到存储体bank0、bank1、bank3中,可以有效消除存储体冲突;也可以选择第n+i+1=5起的连续3(n=3)位,即地址[7:5]来移动存储器中的数据,此时,0,24,48处的数据的移位步长分别为000、000、001,数据被分别移动到存储体bank0、bank0、bank1中,有效地减少了存储体冲突;也可以选择不连续的几位,只要能把发生存储体冲突的数据从同一存储体中移开即可。

需要注意的是,以上关于冲突数据的行距以2^i+j表示时的移位步长的选择方式仅仅是举例说明,旨在说明本发明的一种可能的实施方式,并不构成对本发明的限制,对于本领域技术人员来说,可以依据本发明的思想采用各种方式选择地址中的n位来作为移位步长。

同时,虽然在图3-5中示出了包括8个存储体的存储器的示例,但本领域技术人员应当理解,这里示出的存储体的数量以及存储器的结构仅仅是为了方便说明,而并不构成对本发明的限制。本发明同样可以应用于具有4、16、32等等不同数量的存储体的存储器中,在具有不同数量的存储体的存储器中,可以选择不同位数的地址来作为移位数据,例如,在具有32个存储体的存储器中,发生存储体冲突时,可以选取地址中的5位作为移位数据,用选取的5位表示的值来将发生冲突的数据移动到不同存储体中,从而减少存储体冲突。

下面结合图7来说明根据本发明的实施例的存储器地址重组的硬件实现示例。

根据本发明的一个实施例,假设存储器被分成n个存储体,一般来说,n通常取2的指数,例如2,4,8,16,32等,即n=2^n,以避免资源浪费,但在一些极端情况下,也可以取其他值。

通常,可以从存储器地址中选择n位来解码存储体选择。例如,如图7所示,可以将此信号命名为bank_sel(即,bank_sel是从地址中选择的n位)。在没有本发明的情况下,bank_sel的值可以直接选择要访问的存储体,例如,bank_sel=0表示bank0,bank_sel=1表示bank1等。

在根据本发明的实施例中,可以向bank_sel添加移位步长,移位步长可以用shift_sel表示,如图7所示,对于具有n个存储体的这样的存储器的每一行,都会有n种可能的移位情况(0,1,2,…,n-1),即,shift_sel的值可以是0...n-1。那么,存储体的选择便由bank_sel和shift_sel共同决定。例如,bank_sel+shift_sel=0表示bank0,bank_sel+shift_sel=1表示bank1等。

由此,如图7所示,可以定义一个5位域的地址,包括存储体选择(bank_sel)、移位步长(shift_sel)、字节偏移(offset)以及2位域的行索引(index_h和index_l),用以生成解码信号。其中,存储体选择(bank_sel)和移位步长(shift_sel)用于解码存储体选择,如上所述;行索引(index_h和index_l)用于索引到存储体的具体行,即用于索引数据在存储体内部的行地址;字节偏移(offset)用于索引一个存储体内的偏移量,例如,如果存储体宽度为4字节,则字节偏移(offset)应为2位。各位域的位置可以通过软件来配置,例如,可以通过软件来配置shift_sel和bank_sel是否相邻,如果不相邻,例如如图7中所示情况,此时,index_l的宽度也可以是可配置的。

硬件配置好后,关键是如何获得移位步长shift_sel。

根据本发明的实施例,一种简单的方法是根据数据访问需求选择地址中的另外的n位作为shift_sel。bank_sel位和shift_sel位都可以是地址中的任意n位。例如,它们可以是地址中相同的n位,或者有一些位重叠。软件配置可以根据应用场景将地址中的n位选为shift_sel。当然,如果不想移动,也可以配置一个意味着不移动的值。如前所述,它们可以是地址中连续的n位,也可以是不连续的n位。

另一种更复杂但也更灵活的方法是,在不同的地址空间选择不同的位作为shift_sel。

例如,在一些实施例中,存储器的存储空间可以被划分为多个页面(page),例如划分为page1,page2,page3……每个页面可以都有nkb(或其他)的空间,可以提供多组寄存器来配置这些页面,从而为每个页面分别定义不同的移位方式。例如,可以在page1中选择使用地址[5:3]来移动存储器中的数据,在page2中选择使用地址[6:4]来移动存储器中的数据,在page3中选择使用地址的第5、4、2位来移动存储器中的数据等等。

如果可以的话,可以分别为每个页面配一组寄存器。但在一些情况下,寄存器组的数量可以小于地址页面的数量,也就是说,可以将一组寄存器组配置为以tlb方式映射到不同的页面,从而节省寄存器。这种方式实际上是一个特殊的tlb(translationlookasidebuffer,转译旁路缓冲)。传统上,tlb一般用于将虚拟地址转换为物理地址,但是在这里,可以提供tlb以在不同的页面采取不同的移位方式将存储器中的数据从一个存储体转移到另一个存储体中。

在被划分为多个页面的存储器空间中,每页的大小可以是2的指数,即,m=2^m。那么,一页内的地址可以用m位表示。假设整个地址有k位,则其他k-m位地址可以构成页面地址。可以定义多组配置寄存器,并将这多组配置寄存器作为tlb。当访问存储器时,将所访问的地址的页面地址与所有配置寄存器组中的页面地址进行比较,如果找到一个相同的值,那么可使用该组配置来选择shift_sel;而如果未找到相同的值,那么硬件将向软件请求中断,以要求软件填充或替换tlb,或者使用第二tlb中的软件预配置值自动替换tlb条目。软件必须确保不会出现两个或更多寄存器组配置对应到同一页面。这样,用较少数量的寄存器组即可配置大量的页面地址空间,实现在不同的页面地址空间中以不同的移位方式将地址从一个存储体转换到另一个存储体。

以上硬件实现仅仅作为示例说明本发明的思想,其中的具体配置并不构成对本发明的限制,本发明可以以各种合适的方式实施。

根据本发明的另一个实施例,还提供了一种系统,该系统可以在处理器中实现,如图2所示,即,处理器可以包括具有多个存储体的存储器20以及减少存储体冲突的装置10。其中,装置10包括存储体冲突确定单元101,被配置为确定对包含n个存储体的存储器进行并行访问时会发生存储体冲突的数据的二进制地址;移位步长确定单元103,被配置为使存储器中的数据以移位步长移动之后,发生存储体冲突的数据将不再位于同一存储体中,其中,移位步长表示存储体中的数据被移动的存储体数,是从存储器中的数据的二进制地址中选择的n位所表示的值,其中n=2^n;和移位单元105,被配置为按照移位步长移动存储器中的数据,其中存储器中的数据在存储体内部的行地址值不变;装置10可以执行如图1所示的减少存储体冲突的方法。

在此,特别说明,本发明各种实施例中提到的各单元都是逻辑单元,在物理上,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现,这些逻辑单元本身的物理实现方式并不是最重要的,这些逻辑单元所实现的功能的组合才是解决本发明所提出的技术问题的关键。此外,为了突出本发明的创新部分,本发明各实施例中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,这并不表明各个实施例中不存在其它的单元。

根据本发明的另一个实施例,还提供了一种电子设备,包括如前所述的处理器,这种计算设备可以是各种计算设备,例如膝上型计算机、台式机、工作站、个人数字助理、服务器、刀片服务器、大型机和其他适当的计算机;或者各种形式的移动设备,诸如个人数字助理、蜂窝电话、智能电话、便携式数字助理(pda)、便携式游戏机、掌上电脑或平板电脑等;或者各种智能设备,诸如各种可穿戴智能设备、智能家电等。

上面结合附图对本发明的实施例做了详细说明,但本发明技术方案的使用不仅仅局限于本专利实施例中提及的各种应用,各种结构和变型都可以参考本发明技术方案轻易地实施,以达到本文中提及的各种有益效果。在本领域普通技术人员所具备的知识范围内,在不脱离本发明宗旨的前提下做出的各种变化,均应归属于本发明专利涵盖范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1