一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于高性能向量处理的地址生成的制作方法

2021-12-07 20:55:00 来源:中国专利 TAG:


1.本文中所描述的示范性实施例一般涉及高效存储器访问,更具体来说,涉及用于访问包括多个内存库的存储器单元中的二进制数据向量的方法,其中所述二进制数据向量分部分地存储在所述多个内存库中。示范性实施例进一步涉及一种用于访问包括n多个内存库的存储器单元中的二进制数据向量的相关存储器访问单元,其中所述二进制数据向量分部分地存储在所述多个内存库中,以及一种计算机程序产品。


背景技术:

2.许多工作负载和现代计算依赖于应用相同操作的并且是对大量数据的操作序列的基本处理步骤。实现这些工作负载的高性能的主要挑战通常涉及以最高效的方式从存储器系统获得数据到执行单元,以及从执行单元获得处理结果回到存储器系统。
3.这些工作负载中的许多工作负载所需的处理通常是浮点值或整数值的乘法和加法的组合。例如,深度学习(训练和干扰两者)工作负载的核心处理是基于对输入和/或训练数据应用大量矩阵乘法运算。模板代码构成了许多模型的核心,这些模型用于诸如天气预测、寻找油气等应用。这些模板代码根据固定模式(被称为模板)迭代地更新错误率元素,所述固定模式通常涉及相邻元素的值的某种加权和。fft(快速傅里叶变换)是科学和工程中最广泛使用的算法之一,并且基于计算非常大量的、各自基于乘法和加法的所谓蝶形计算。模板计算和fft两者也用于特定的深度学习算法(例如,卷积神经网络、cnn)。
4.为了获得高性能,执行单元(通常涉及乘法器和加法器的组合)经常被组织为向量(simd,即,单指令多数据)单元,所述向量单元对被提供为宽数据向量流的输入数据并行地应用相同的操作或多次操作的组合。
5.由于读取那些操作数值所需的地址序列中的所谓2的幂跨距(power

of

2strides),从存储器系统检索包括构成向量单元的处理元素的所有所需操作数值的数据向量通常不是直截了当的。这种类型的访问模式例如针对访问被映射在线性虚拟地址空间或物理地址空间上的数据结构的工作负载而发生,地址增量为1(例如,0、1、2、3等)、8(例如,0、8、16、24等),或256(例如,0、256、512、768、1024等)等。
6.有一些公开文件涉及用于访问包括n多个内存库的存储器单元中的二进制数据向量的方法,其中所述二进制数据向量分部分地存储在该n多个内存库中。
7.文献us 9705532 b2披露了一种用于作为生成低密度奇偶校验码的一部分的信息位的并行累积的方法和系统。由此,可以通过向量运算来累积连续的信息位,其中,可以通过虚拟和专用奇偶校验地址映射来使用于累积的奇偶校验地址连续。
8.文献us 7793038 b2披露了将存储器系统中的存储器访问的地址映射到包含内存库标识符和内存库内部地址的组合地址。该地址被划分成第一部分和第二部分。另外,通过在查找矩阵中执行查找操作来确定内存库标识符。
9.然而,已知解决方案的缺点仍然是如下问题:对于许多应用,需要以各种方式构造数据向量,这些方式涉及在用于访问数据向量元素的地址序列中的多个不同的2的幂跨距。
例如,在一个时刻,数据向量可由与涉及跨距1的地址序列相关的数据元素组成,在其他时刻,数据向量可由与涉及跨距8的地址序列相关的数据元素组成,等等。因为相同的数据元素以各种方式与其他数据元素组合以形成数据向量,所以更加难以确保将用于形成数据向量的所有数据元素存储在不同的库中,以便能在底层硬件的一个主循环中从那些库中并行读取组成一个数据向量的所有数据元素。在此提出的概念解决这个问题。


技术实现要素:

10.根据一个方面,可提供一种用于访问包括n多个内存库的存储器单元中的二进制数据向量的方法,其中所述二进制数据向量分部分地部分存储在所述n个内存库中。该方法包括:接收所述二进制数据向量的起始地址和所述二进制数据向量的元素的2的幂跨距,并确定所述内存库的每个一个的n个偏移量,其中,所述偏移量中的每个以下述方式确定:将多个位级xor函数应用到所述起始地址,从而产生z向量,使用所述z向量访问映射表,根据所述二进制数据向量的2的幂跨距移位映射表访问结果。
11.此外,该方法包括:根据所述z向量的二进制等效值确定所述n个内存库中的所述二进制数据向量的部分的序列;以及并行地访问所述存储器单元的所述n个内存库中的所述二进制数据向量。
12.根据另一方面,可提供一种存储器访问单元,其用于访问包括n多个内存库的存储器单元中的二进制数据向量,其中所述二进制数据向量可存储在所述n多个内存库中。所述存储器访问单元包括接收单元,所述接收单元适于接收所述二进制数据向量的起始地址和所述二进制数据向量的元素的2的幂跨距;以及第一确定模块,用于确定所述内存库的每个一个的n个偏移量,其中,所述偏移量中的每个以下述方式确定:将多个位级xor函数应用到所述起始地址,从而产生z向量,使用所述z向量访问映射表,根据所述二进制数据向量的2的幂跨距移位映射表访问结果。
13.此外,所述存储器访问单元包括第二确定模块,其适于根据所述z向量的二进制等效值确定所述n个内存库中的所述二进制数据向量的部分的序列;以及基本访问单元,其适于并行访问所述存储器单元的所述n个内存库中的所述二进制数据向量。
14.所提出的用于访问包括n多个内存库的存储器单元中的二进制数据向量—其中所述二进制数据向量可存储在所述n多个内存库中—的方法具有多个优点和技术效果:
15.其主要可以也允许—特别是为矩阵运算(如乘法等)—“一次性”(即,基本上在存储器系统的一个操作循环中)寻址大的或长的数据向量。这可以变得可能,是因为可以不需要重叠寻址。高维度向量的不同维度的数据值总是可以跨存储器系统或存储器单元的不同内存库分布。由此,通过寻址不同内存库且在内存库内寻址高维向量的一维的一个特定数据值,对向量的所有值的最短可能访问时间变为可能。
16.由此,可以避免其中为了寻址同一超维向量的不同维度的不同数据值,可能需要对同一内存库的两次或更多次访问的情形。这可以清楚地节省存储器单元的操作周期并且因此节省相关计算系统的操作周期。因此,通过这里提出的概念,与访问存储器系统/单元中的数据向量的现有技术相比,可以实现显著的性能优势。
17.所提出的概念还使得能够以某种方式在向内存库写入时混洗(shuffling)向量的数据元素以及在读取向量的数据时反混洗(back

shuffling)数据元素。因此,在写

读循环
之后,向量的数据元素再次像在对存储器单元/系统的写操作之前那样被很好地排序。
18.此外,由于计算机系统设计中的当前趋势,对存储器中的数据的访问和对应的传送变成影响许多应用的系统级性能的主导因素。通过改进可以非常有效地由现有技术向量单元处理的数据向量可以在存储器中被访问的速度,在此描述的实施例可以帮助针对一系列工作负载实质性地改进计算机系统的性能。
19.在下文中,将描述本发明概念的附加实施方式。
20.根据该方法的一个优选实施例,将多个位级xor函数应用到起始地址可以包括:从起始地址—尤其是cpu的线性地址空间中的向量的第一元素的地址—选择log2(n)个部分和log2(n)位大小的y部分,确定该log2(n)个部分中的每个的奇偶校验位,从而产生log2(n)维的奇偶校验向量x—即一组单独的位—并且在x和y之间执行位级xor运算,从而产生z向量。由此,可以提及的是,该log2(n)个部分和该y部分可以是由地址掩码—是由[log2(n) 1]个地址掩码—可选择的。此混洗操作的细节将在下文结合对附图的描述变得更加清楚。
[0021]
根据该方法的一个有用实施例,使用z向量来访问映射表还可以包括通过使用z向量(尤其是其二进制等效值)作为映射表中的索引来选择包括log2(n)个条目的映射表中的行,以及组合(也可表示为“合并”)映射表访问结果与起始地址的一部分,以获得n个偏移量。下文将在附图的上下文中解释细节。
[0022]
根据该方法的一个有利实施例,所述组合可以包括用所确定的log2(n)个映射表条目替换位于起始地址的位偏移量log2(s)处的log2(n)个位,产生log2(n)个偏移量。由此,每个偏移量可以被用作log2(n)个库中的相应库中的偏移量。这可以允许仅以非常有限的开销就直接确定。
[0023]
根据该方法的一个另外优选实施例,所述n个内存库中的所述二进制数据向量的部分的序列—也可以表示为混洗的过程—可以包括控制log2(n)个连续复用器级(multiplexer stages),复用器级中的每个包括多个2

输入位复用器,以涵盖所述数据向量的总宽度。这可以允许定位高维度向量的各个数据值,使得可不需要重叠地址。
[0024]
更具体地,在相应的z向量位等于1的情况下,第一多路复用器级可以将数据向量的最高有效部分与最低有效部分交换。第二复用器级可在第二z向量位的控制下将相同的函数应用到数据向量的下部和上部,等等。这些log2(n)个多路复用器级可用于交换将被写入内存库的正确位置、分别从内存库的正确位置读取的各种数据元素。
[0025]
根据该方法的一个许可实施例,访问操作可以是读取操作。可替代地或组合地,访问操作可以是写入操作。因此,删除操作也可用作本发明概念的一部分。所以,可以用这里提出的概念来执行存储器单元、各个内存库的存储器设备中的所有操作。差异可能在于地址生成的顺序,或者较大向量(例如,超维向量)的已识别数据元素的重新混洗。
[0026]
根据该方法的一个实际实施例,起始地址的选择的log2(n)个部分的大小可以相等。这可以在2的幂跨距概念下等同地执行。
[0027]
根据该方法的另一实际实施例,所述二进制数据向量可存储在所述n多个内存库中的大小相等的部分中。因此,可以实现数据元素的相等分布。
[0028]
根据该方法的一个实施例,其中,包含对所述内存库的写入操作,可以在将二进制数据向量写入n个内存库之前执行所述提供起始地址、确定偏移量、以及确定二进制数据向量的部分(即,主要概念的部分)的序列和确定部分的序列(即,混洗)。这可以保证为了用于
基本上仅需要存储器单元的一个周期的快速写入操作以及为了允许对数据的“镜像”读取操作而存储向量的维度值。
[0029]
根据该方法的一个后续实施例,可以在将所述二进制数据向量读取到所述n个内存库之前进行所述提供起始地址,确定偏移量,以及确定所述二进制数据向量的部分的序列(参见主要概念),并且其中,可以将所述二进制数据向量读取到所述n个内存库之后执行所述确定部分的序列(即,混洗)。为了将大维或超维向量的数据值恢复到原始序列中,可能需要该步骤。
[0030]
此外,实施例可以采取相关计算机程序产品的形式,该相关计算机程序产品可从计算机可用或计算机可读介质访问,该计算机可用或计算机可读介质提供用于由计算机或任何指令执行系统使用或与其结合使用的程序代码。出于本说明的目的,计算机可用或计算机可读介质可为可包含用于存储、传达、传播或传输供指令执行系统、设备或装置使用或结合指令执行系统、设备或装置使用的程序的装置的任何设备。
附图说明
[0031]
应注意的是,本发明的实施例是参考不同的主题描述的。特别地,一些实施例参考方法类型权利要求来描述,而其他实施例参考装置类型权利要求来描述。然而,本领域的技术人员将从以上和以下说明中得出,除非另有说明,除了属于一种类型的主题的特征的任何组合之外,涉及不同主题的特征之间的任何组合,特别是方法类型权利要求的特征之间的任何组合以及装置类型权利要求的特征之间的任何组合,也被视为在本文件内公开。
[0032]
以上限定的各方面以及另外的各方面,显见于下文中描述的实施方式的实例,并且是参考实施方式的实例进行解释的,但是实施方式不限于这些实施方式的实例。
[0033]
将仅以举例方式并且参考以下附图来描述优选实施例:
[0034]
图1示出用于访问包括n多个内存库的存储器单元中的二进制数据向量—其中二进制数据向量分部分地存储在该n多个内存库中—的本发明方法的基本实施例的框图。
[0035]
图2示出典型矩阵修改所需的困难存储器寻址方案。
[0036]
图3示出了所提出的概念的另一个应用领域。
[0037]
图4示出了示范性映射的实施例。
[0038]
图5示出具有9个位元素的数据向量的起始地址的实例。
[0039]
图6示出了示范性映射表的一个实施例以及确定存储器单元中的内存库的偏移量的下一步骤。
[0040]
图7示出了如何可以确定内存库中的条目的混洗。
[0041]
图8示例性地示出代表存储器单元的8个库。
[0042]
图9作为示例示出了向量起始地址256,跨距1。
[0043]
图10作为示例示出了向量起始地址3,跨距8。
[0044]
图11示出了根据所提出的基本概念的读取过程的更接近实现的流程图。
[0045]
图12示出了根据所提出的基本概念的读取过程的更接近实现的流程图。
[0046]
图13展示用于包括多个库的存储器单元中的二进制向量的存储器访问单元的框图。
[0047]
图14示出其中可使用存储器访问单元的计算机系统的框图。
具体实施方式
[0048]
在本说明书的上下文中,可以使用以下惯例、术语和/或表达式:
[0049]
术语“二进制数据向量”(binary data vector)可以表示计算机的存储器系统中作为位序列的字寻址的值的字段(例如,位值、整数值、浮点值、字符字段等)。这样的存储器系统通常可以是ram(随机存取存储器)。取决于给定地址处的字长,预定义数目的位可以被存储在存储器系统或存储器单元的字中(两种形式可在全文中用作同义词)。
[0050]
术语“存储器单元”(memory unit)可以表示计算机系统的可以被划分为多个库(bank)的较大存储模块。每个库可以具有按一定大小的可单独寻址的字组织的预定义数量的存储单元(storage cells)。存储器单元的内存库可以单独寻址,并且在每个内存库中,可以寻址单个字。
[0051]
术语“内存库”(memory banks)可以表示一组存储单元,复数定义了通过库地址可访问的较大的一组存储单元。在每个库内,可以单独寻址被组织为字的多个单独的存贮单元(memory cells)。通常,存储器单元包括多个内存库。
[0052]
术语“二进制数据向量的起始地址”通常可表示长二进制数据向量的第一(或第0)个元素的地址。
[0053]
术语“2的幂跨距”(power

of

2stride)可以表示其间由2
n
个元素分开的元素序列。如果n=0,则可以寻址以下元素:0,1,2,3,...,因为20=1。如果n=1,则可以寻址以下元素:0,2,4,6,...,因为2
n
=2,等等。
[0054]
术语“z向量”可以表示通过将多个位级xor函数应用到地址而获得的具有log2(n)个位的大小的向量。
[0055]
术语“映射表”可以表示包括与存储器单元中包含的库的数量一样多的列的表。表中的元素可以是范围从零到库的数量减1的整数值。
[0056]
在下文中,将给出附图的详细描述。附图中的所有说明都是示意性的。首先,给出了用于访问包括二进制数据向量分部分地在其中存储的n多个内存库的存储器单元中的二进制数据向量的本发明方法的实施例的框图。之后,将描述进一步的实施例,以及用于访问包括二进制数据向量分部分地在其中存储的n多个内存库的存储器单元中的二进制数据向量的存储器访问单元(memory access unit)的实施例。
[0057]
图1示出了用于访问包括二进制数据向量分部分地在其中存储的n多个内存库的存储器单元中的二进制数据向量的方法的实施例的框图。

作为用于以下示例的心理参考模型,可以想象二进制数据向量是256位长,并且存储器单元具有八个库、每个库的宽度为32位、以及64个位置(locations)的库大小。
[0058]
该方法包括:接收(102)二进制数据向量的起始地址—尤其是cpu的地址空间中的阵列的起始地址—以及二进制数据向量的元素的2的幂跨距。
[0059]
该方法还包括确定(104)所述内存库的每个一个的n个偏移量。其中,通过以下方式确定所述偏移量中的每个:将多个位级xor函数应用到所述起始地址,从而产生z向量(106),使用所述z向量访问映射表(108),根据所述二进制数据向量的2的幂跨距移位映射表访问结果(110)。
[0060]
此外,该方法包括:根据所述z向量的二进制等效值确定所述n个内存库中的所述二进制数据向量的部分的序列(112);以及并行(尤其是在一个操作循环中或同时地)访问
所述存储器单元的所述n个内存库中的所述二进制数据向量(114)。
[0061]
图2在200处例示典型矩阵操作所需的困难存储器寻址方案。该图示出了一个简单矩阵乘法的实例,其中矩阵a的行与矩阵b的列逐元素地相乘。在两个矩阵的元素要被写入到线性地址空间中的连续地址位置的情况下,将使用地址跨距1来访问矩阵a中的每个行,并且使用等于行的大小的地址跨距来访问矩阵b中的每个列。因为后一跨距在许多存储器系统中可能是有问题的,所以通常应用所谓的矩阵转置操作,其涉及“在矩阵对角线上”翻转矩阵值。结果,然后可以使用跨距1访问模式来访问列以产生所得矩阵c。然而,这要以必须读取和重写整个矩阵为代价,这也可能消耗大量的存储器带宽和时间。
[0062]
在图3中的300处示出了示出所提出的概念的另一应用领域的另一示例。它示出了可以应用在2

d或3

d结构上的不同模板。从图示可以看出,访问由单个模板涵盖的所有元素会涉及两种分别不同的2的幂跨距(对于2

d结构和3

d结构)。
[0063]
尽管2的幂访问模式已经被研究了很长时间,但是低效访问的问题尚未得到解决。一个问题是,由于在许多存储器系统中使用的组织和突出的地址映射,这种访问经常导致存储器性能降级,这些存储器系统通常使用2的幂数量的内存库来组织。
[0064]
在特殊hpc(高性能计算)系统中,有时可能会应用固定/硬连线映射,这些映射基于针对质数执行模运算或类似方法,这些方法可能特定于特定工作负载,因为这些方法可能不同或不可能编程,因此仍然可以存在于更坏的情况/病理情况中。后一种机制还增加了访问延迟。
[0065]
在转到下一个附图之前,应该考虑关于向量处理和访问的以下想法:
[0066]
为了在n个库中并行访问数据向量(即,数据向量的大小等于n*w,其中w是单个组的宽度或访问粒度),必须生成每个库的正确的偏移量,从而产生针对每个数据向量的总共n个偏移量。例如:如果基于图4中的映射实例400必须访问与地址序列0、1、2、3、4、5、6和7(跨距1)相关的8元素数据向量,则必须在8个相应内存库中访问以下偏移量处的存储器位置:{0,1、2、3、4、5、6、7}。
[0067]
所示的表通过定义灵活且可编程的地址映射方案来解决上述问题,该方案能够在2的幂跨距的访问模式之间完全地交织到存储在包括多个内存库的存储器系统中的一个数据结构之间。
[0068]
该映射方案基于通过从将被映射的地址提取的两个值来索引的小二维(2

d)查找表(未示出)。通过计算所选择的地址位的逐位奇偶校验值来确定两个索引值中的一个。然而,这里不需要解释基本概念。该图应仅示出对于完全交错的多个2的幂访问模式,可能也需要混洗存储器位置序列。
[0069]
图4中的条纹标记的“映射地址”展示了大小等于与涉及2的幂跨距的对齐的地址序列相关的内存库的数量(在示例中为8个数据元素)的数据向量,在所有内存库上完全交织,因此可以作为单个数据向量通过并行访问所有组而被访问(即,读取或写入),而并行访问所有库只需要对每个库访问一次。例如,在图4中,涉及跨距1(例如,地址0、1、2、3、4、5、6、7),跨距2(例如,地址0、2、4、6、8、10、12、14)、跨距4(例如,地址0、4、8、12、16、20、24、28),跨距8(例如,地址0、8、16、24、32、40、48、56)、跨距16(例如,地址0、16、32、48、64、80、96、112),跨距32(例如,地址0、32、64、96、128、160、192、224)等的对齐的地址的每个块,能全部被并行访问。不需要再访问库,因为要访问的数据元素在库之间均匀地分布。
[0070]
在读取操作的情况下,库0将提供数据向量的第一个元素(映射地址0),库1提供第二个元素(映射地址1),等等。类似地,在写入操作的情况下,数据向量的元素将按顺序次序写入到相应的组。如果相反,访问与地址序列0、2、4、6、8、10、12和14(跨距2)相关的8元素数据向量,则必须在8个对应内存库中并行地访问以下偏移量:{0、8、2、10、4、12、6、14}。在这个实例中,在读取操作的情况下,数据向量的第一个元素(映射地址0)将由库0提供,第二个元素(映射地址2)将由库2提供,第五个元素(映射地址8)将由库1提供,等等。将清楚的是,必须对从库读取的数据进行混洗以恢复期望的数据向量,所述数据向量应包含按元素的映射地址(0,2,

,14)的顺序的元素。而且,在写入数据向量时,也必须对元素进行混洗,以便按照每个元素的对应地址映射到内存库上的方式正确地写入每个元素。
[0071]
取决于与数据向量的元素相关的地址序列,可能有一系列的不同顺序,需要按照这些顺序来生成各个库偏移量以及需要按照这些顺序来混洗读写数据。
[0072]
一种暴力方法是独立于其他元素生成数据向量中的每个元素的地址并将其独立地映射在库标识符和库偏移量上,这将导致总共n个地址生成和地址映射函数。然后,可以用映射函数的输出(特别是库标识符)控制用于写入和读取数据向量的两个n



n混洗单元,这将允许以任何可能的顺序混洗每个数据向量的元素。
[0073]
然而,就性能和面积成本而言,这种方法的复杂性随着n值的增加而迅速增加,这基本上限制这种暴力方法应应用于小的n值,例如4或8。
[0074]
然而,更大的数据向量非常重要,因为这些向量有助于在计算中实现所需的效率和性能。由于由较新的存储器技术(例如,hbm—高带宽存储器)提供的宽数据路径,这一点更加突出。
[0075]
为此目的,涵盖了以下创新:
[0076]
1.并行涵盖所有库的整个数据向量的基于向量的偏移量生成;
[0077]
2.有效混洗所述数据向量元素以将其写入所述内存库;
[0078]
3.在从内存库读取数据向量元素之后有效混洗数据向量元素;
[0079]
4.用来计算奇偶校验位中的每个的地址位的选择。
[0080]
对于基于向量的偏移量生成,可以进行以下观察:对于具有涉及任何2的幂跨距的对齐地址序列的n个元素的任何数据向量,n个地址之间的差被限制于地址中的log2n相邻位位置并且涵盖那些log2n位位置的所有n个可能值。
[0081]
如果从位交错方式的地址提取奇偶校验位,那么将基于在查找表中的单个行中指定的库标识符来映射在具有2的幂跨距的任何对齐的地址序列中涉及的n个地址。
[0082]
图5示出了具有9位元素a0,a1,

,a8的数据向量的起始地址

a’502的示例500。msb(最高有效位)被用作向量y,稍后将需要该向量y并且该向量y具有log2(n)的大小(n=8)。位a0,a1,

,a5与掩码向量m0,m1和m2(log2(n)=3)进行and组合,得到图右侧的log2(n)向量504。可以注意到,掩码向量m0、m1和m2在起始地址a 502的y部分的位置中携带“0”。
[0083]
对于每个向量504,计算奇偶校验位,从而产生x0、x1、x2;这也可以被解释为应用xor函数。x0、x1、x2被视为x向量的维。然后,将位级xor函数应用于x和y,从而产生相同大小或维度(log2(n))的向量z。
[0084]
为此,图6在600处示出了确定存储器单元中的内存库的偏移量的下一步骤。
[0085]
可以注意到,映射表具有以下属性:所存储的与x和y值的给定组合相关的值等于
那些x和y值的xor乘积。这再次导致以下属性:如果库标识符i出现在给定行的列j中,则库标识符j也出现在该行的列i中(那些值可被记为被交换的(swapped))。
[0086]
例如,映射表602中对应于y=6的行包括列1(对应于x=1)中的内存库标识符7。同一行现在包括列7(x=7)中的库标识符1。这两个位置将被称为“交换”位置对。由于上述“交换”属性,如果从n个地址提取的奇偶校验值的顺序与log2(n)个相邻位位置—此处该n个地址是不同的—的值的顺序相同,则库偏移量可以直接从查找表行取得,如现在将例示的那样。
[0087]
向量z的二进制相等值将被用作映射表602的行索引。映射表602的行的每个二进制值将在替代起始地址的log2(n)个位的定义位置处使用。这在图6的下部示出。在地址a(比较502/图5;部分a0,a1,

,a5)中,在位偏移量3处开始的log2(n)位将由相应行条目的二进制相等值代替;例如,“3”给出011(二进制),如在图6的左下部分上可见。该原理被应用于映射表的选择的行中的每个元素。可以注意到,出于易理解性原因,仅示出了前两个和第八地址/行条目组合。此时,已经确定了各个库的偏移量值。
[0088]
还可以注意到是,在8位示例的情况下,映射表—即查找表—仅需要8*8*3位=24个字节。在这样一个小表中查找条目,对于所提出的方法所代表的巨大优势来说,只是一个可忽略的要求。
[0089]
在下一步骤中—比较图7—需要确定内存库中的条目的混洗。这需要z向量的调用。由于z是二进制向量的事实,因此z向量的元素是“0”或“1”。因此,由向量z的位控制的交换控制定义如下:位=1表示起始地址中的一对条目的交换;位=0表示“无交换”。
[0090]
这在图7中显示为向下箭头(无交换)或交叉箭头(交换),其在log2(n)个步骤的序列中从如图6所示的z向量的lsb(最低有效位)开始一个接一个地应用。
[0091]
这现在可以在表示图8中的存储器单元802的8个组的示例800中示出。例如,(涉及跨距1的)地址序列64、65、66、67、68、69、70和71涉及等于1的y值,并且因此将根据映射表804中的行1(y=1)来映射:地址64将被映射(比较808)在库1上(比较806),地址65将被映射在库0上,地址66将被映射在库3上、地址67将被映射在库2上,地址68将被映射在库5上,地址69将被映射在库4上,地址70将被映射在库7上,以及地址71将被映射在库6上。相应的偏移量等于8个最低有效地址位,即:0、1、2、3、4、5、6和7。在其处这八个地址不同的log28=3个位位置(如上所述),位于地址位位置0、1和2,其也等于库偏移量的3个最低有效位。对于先前八个偏移量,那些位位置处的值等于0、1、2、3、4、5、6和7(这些等于偏移量值,是因为在此实例中其他偏移量位恰好为零)。由于生成查找表内容的方式,这些不同log2(n)位位置的值将等于奇偶校验位的值。
[0092]
基于查找表内容的上述“交换”属性,可以推导出,如果基于对应的查找表元素将地址映射到特定的内存库标识符上,对应于该元素的交换位置将包含相同地址的奇偶校验位的值,其等于不同的log2(n)个位位置的值。这意味着可以通过确定对齐的地址序列中的第一地址的y值来生成偏移量向量,然后通过在不同的log2(n)个位位置处用对应于y值的相应行值替换序列中的第个地址,获得取自该第一地址的偏移量(通过取最低有效部分,如上所述)的n个副本。
[0093]
该属性适用于涉及任何2的幂跨距的n个地址的任何对齐序列。它不限于n个不同的位位置—如上所述—以“对齐”方式(即,以位位置x0“开始”,之后是位置x1,等等)涵盖x
字段的位的2的幂跨距。这是因为任何n个连续位位置的值将总是导致索引同一表行中的不同条目。
[0094]
值得注意的暗示是,基于该属性,可以通过将由从地址“a”派生的y值索引的行中的值替换为从地址a导出的与2次幂跨距的log2值相对应的n个位位置处的偏移量值,直接检索n个列偏移量的值。这在图11中的流程图中示出,该图示出了用于通过应用以下步骤来高效地生成所有库的偏移量的步骤:1)仅映射地址序列的第一地址,即,计算奇偶校验,导出y值,导出偏移量,2)执行一个对应于y的表查找,3)执行并行移位和按位or函数以获得实际的库偏移量。
[0095]
在转向流程图之前,可以给出另外两个映射的示例。图9作为示例900示出了向量起始地址256、跨距1(地址256,257,258,

,263)。因为256等于100000000b,所以可确定y、x和z向量为y=100b、x=000b、z=100b,所以映射表(比较602,图6)中的行4(100b)等于:4 5 6 7 0 1 2 3。因此,内存库偏移量是:4、5、6、7、0、1、2、3(分别针对库0

7)。z=100b的数据向量混洗意味着第一四个条目与第二四个条目交换。
[0096]
图10作为示例1000示出了向量起始地址3、跨距8(因此,地址3、11、19、

、59)。因为起始地址=3=000000011b,得到y=000b,x=011b,z=011b。映射表602中的行3(011b)等于:3 2 1 0 7 6 5 4。因此,库偏移量可以被确定为:27(011011b)、19(010011b)、11、3、59、51、43、35(分别针对库0

7)。
[0097]
数据向量混洗部分由z=011b确定意味着每对相邻条目首先在第一步中被交换,随后两个条目的第一块与第二块交换,然后两个条目的第三块与第四块交换。结果显示在图8中,在各库条目旁边有条纹标记。
[0098]
图11示出了与图1相比以形式上更接近的实现方式用于读取过程的访问偏移量生成的流程图1100。
[0099]
简而言之—详细信息也将进一步解释—操作流程如下:首先,获得地址

a’,1102。然后,导出地址

a’的奇偶校验、y字段和初始偏移量,1104。通过基于y字段(或奇偶校验)访问映射表中的行,获得所有内存库的基本偏移量,1106。接下来,将所有库的基本偏移量移位到对应于目标2的幂跨距的位位置,1108。最后,合并已针对地址

a’确定的初始偏移量与从映射表获得的移位的基本偏移量,以获得所有内存库的偏移量,1110。
[0100]
该紧凑流程图表示将在以下段落中再次讨论:
[0101]
用于将数据向量元素写入地址序列中的地址的内存库中的数据向量元素的有效混洗可以任何可能的方式映射到n个存储器库上,那么,为了将每个数据元素写入正确的库,必须对相应的写入数据进行混洗的可能方式总共有n!个。对于较大的n值,这个总数快速增加,且将需要非常大的n



n混洗单元。
[0102]
然而,对于上面讨论的映射方案来说,可以实质性地简化混洗。现在将使用以上示例映射方案对此进行说明。
[0103]
以下假设奇偶校验值(即,x)是与偏移量值相同地排序的。如果最低有效不同地址位被最低有效奇偶校验(x)位涵盖、第二个不同地址位被下一个奇偶校验位涵盖,以此类推,则会出现这种情况。下面将在涉及地址/奇偶校验位选择的段落中进一步描述任意2的幂跨距的访问如何满足此约束。
[0104]
由于发起映射表的方式(“交换”属性),混洗是通过查找表中的单个行确定的,与
偏移量向量的生成类似。从图6中的映射表可以直接看到映射的一个有趣特性:映射表中的每个行都可以通过使用涵盖k个连续行元素的块以“对齐方式”交换行元素,从第一行(对应于y=0)导出,其中k是2的幂,其值范围为2到行大小n/2。
[0105]
例如,在图6中,通过识别每个具有2个元素的四个块{0,1}、{2,3}、{4,5}、{6,7}并且交换每个块中的所有元素,可以从对应于y=0的第一行导出对应于y=1的行。通过首先识别各自具有4个元素的两个块{0,1,2,3}和{4,5,6,7},然后分别识别那些块中的每个中具有2个元素的大小的两个块,{0,1}和{2,3}以及{4,5}和{6,7},并交换每个4元素块内的两个2元素块,可以导出对应于y=2的下一行。在图6中可见,所有剩余行可通过在4元素块的层级或在4元素块内的2元素块的层级的交换或通过二者的组合从第一行导出。
[0106]
从图6和图8的例子可以看出的另一个重要特性是,z向量的最高有效位可以用于确定是否需要在该映射表的最大块大小的层级执行交换操作,下一个z向量位可以用于确定针对第二大块大小的层级的交换操作,依此类推。
[0107]
由于“交换”属性,以上讨论的属性现在可以直接用于通过以下方式使用相同的块交换概念混洗写入数据:1)针对n个地址的序列的起始地址确定z值(如上所述);2)如果设置了最高有效z值位,则在最大块大小为n/2的层级交换n个写入数据元素;3)如果设置了下一个最高有效z值位,则在下一个块大小为n/4的层级交换n个写入数据元素;4)依此类推。这由图12中的图例示。对于具有4、8或16个库的存储系统,这意味着分别仅需要2、3、4个不同的2路混洗函数,这与全n



n混洗单元相比是巨大的简化。
[0108]
因此,以及也是简而言之,写入操作可以总结在图12的流程图1200中。首先,获得地址

a’,1202。在步骤1204,导出奇偶校验和z字段。接下来,基于z字段位位置(log2(n))

1以n/2块大小的粒度混洗写入数据元素,1206。在步骤1208,同样的情况再次发生,然而是基于z字段位位置(log2(n))

2以n/4块大小的粒度,依此类推。这个过程被重复—由虚线箭头所示—直到步骤1210:基于z字段位位置0以2块大小的粒度混洗写入数据元素。
[0109]
新的混洗函数的基本特征是:
[0110]
1.它可以仅使用log2(n)个混洗函数来实现,每个混洗函数仅混洗2个输入(每个需要最多n*w个2输入多路复用器,其中w是每个数据元素的宽度)。
[0111]
2.每个混洗函数由z向量或奇偶校验函数(其各为log2(n)位宽)的一位控制。
[0112]
如果对于每个写入数据元素使用单独的写使能信号,则这些写使能信号需要以相同的方式混洗,以便对每个写入数据元素应用正确的写信号。
[0113]
3.在从内存库读取数据向量元素之后对数据向量元素的有效混洗:由于先前所讨论的映射方案的“交换”属性,如以上针对写入数据所描述的那样的相同的混洗概念可以用于对读取数据进行混洗。
[0114]
如果芯片区域或fpga资源非常有限,那么还可能将一组log2(n)个混洗器用作用于读取或写入数据的存储器端口。显然,这将需要在混洗阶段之前有一个输入复用器,以便在必须被混洗的读取或写入数据元素之间进行选择。
[0115]
4.选择用来计算每个奇偶校验位的地址位:
[0116]
如之前所指出的那样,以上写入和读数据混洗概念假设奇偶校验值(x)是与偏移量值相同地排序的。这要求对齐的地址序列中的最低有效不同地址位由最低有效奇偶校验(x)位涵盖,第二不同地址位由下一奇偶校验位涵盖,依此类推。
[0117]
不适用这一点的示例将是图8中所示的映射方案的涉及跨距2的地址序列0、2、4、6、8、10、12和14。在这种情况下,八个地址之间的log2(n)=log28=3个不同位位置是位位置1、2和3。因为这些位位置不以相同顺序对应于x个位位置,所以结果x值不以与地址相同的方式排序:对于地址0,x=0,对于地址2,x=2,对于地址4,x=4,对于地址6,x=6,对于地址8,x=1,对于地址10,x=3,对于地址12,x=5,并且对于地址14,x=7。尽管地址完全交织在所有内存库上而没有任何冲突,但上述简化的混洗操作是不充分的。
[0118]
这可以通过1)添加额外混洗层或者通过2)应用对用于生成奇偶校验向量x的地址位的不同选择来解决。第一个选项将需要添加(log2(n))

1个额外层,因为可能存在(log2(n))

1个方式,其中,在具有2的幂跨距的地址序列中的log2(n)个不同位位置不与生成x字段位的方式“对齐”。对于图8中的实例,此将因此需要(log2(n))

1=1个额外混洗层。
[0119]
第二选项将是改变从地址导出x位的方式。
[0120]
在以上实例中,可以反转两个x位(x0和x1)的位置以获得相同结果。或者,可以仅从与相关的2的幂跨距相关的地址位位置导出x位。通过这样做,可以使用与如上所述的相同的写入和读取数据混洗概念。该选择可以通过相应地为应用于该地址的每个x位位置选择掩码向量以选择在其上计算奇偶校验的地址位来进行(掩码的地址位给出零,其将不会改变基于xor的奇偶校验计算)。
[0121]
同样,为此目的,对齐的地址序列中与不同的位不相关的所有其他地址位位置不必是奇偶校验计算的一部分(除了无表方法之外:不是库偏移量的一部分的所有位需要由奇偶校验计算涵盖)。
[0122]
出于完整性原因,图13展示用于访问包括n多个内存库的存储器单元中的二进制数据向量的存储器访问单元1400的示意性框图,其中,所述二进制数据向量分部分地存储在n个内存库。存储器访问单元1400包括接收单元1402,其适于接收二进制数据向量的起始地址和二进制数据向量的元素的2的幂跨距。
[0123]
存储器访问单元1400还包括第一确定模块1404,用于确定所述内存库中的每个内存库一个的n个偏移量,其中,所述偏移量中的每个偏移量是通过以下方式确定的:将多个位级xor函数应用到所述起始地址,从而产生z向量,使用所述z向量访问映射表,根据所述二进制数据向量的2的幂跨距移位映射表访问结果。
[0124]
存储器访问单元1400还包括第二确定模块1406和基本访问单元1408,第二确定模块1406适于根据z向量的二进制等效值来确定n个内存库中的二进制数据向量的部分的序列,基本访问单元1408适于并行访问所述存储器单元的n个内存库中的二进制数据向量。
[0125]
本发明的实施例可以与几乎任何类型的计算机一起实现,无论平台是否适于存储和/或执行程序代码。图14作为实例示出计算系统1500,计算系统1500适于执行与所提出的方法相关的程序代码和/或可在其中实现这里提出的用于存储器单元的寻址方案。
[0126]
计算系统1500仅是合适的计算机系统的一个示例,并且不旨在对在此描述的本发明的实施例的使用范围或功能提出任何限制,无论计算机系统1500是否能够被实现和/或执行上文阐述的任何功能。在计算机系统1500中,存在可与许多其他通用或专用计算系统环境或配置一起操作的组件。可以适合于与计算机系统/服务器1500一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户机、厚客户机,手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可
编程消费电子产品,网络pc、小型计算机系统、大型计算机系统和包括任何上述系统或设备的分布式云计算环境,等等。计算机系统/服务器1500可以在由计算机系统1500执行的计算机系统可执行指令(诸如程序模块)的一般上下文中描述。一般而言,程序模块可包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器1500可在分布式云计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可位于本地和远程计算机系统存储介质(包括存储器存储设备)两者中。
[0127]
如图所示,计算机系统/服务器1500以通用计算设备的形式示出。计算机系统/服务器1500的组件可以包括但不限于一个或多个处理器或处理单元1502、系统存储器1504和将包括系统存储器1504的不同系统组件耦合到处理器1502的总线1506。总线1506表示若干类型的总线结构中的任一种总线结构中的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构中的任一种的处理器或局部总线。作为示例而非限制,此类架构包括工业标准架构(isa)总线、微通道架构(mca)总线、增强型isa(eisa)总线、视频电子标准协会(vesa)局部总线和外围组件互连(pci)总线。计算机系统/服务器1500通常包括各种计算机系统可读介质。这样的介质可以是可由计算机系统/服务器1500访问的任何可用介质,并且它包括易失性和非易失性介质、可移动和不可移动介质两者。
[0128]
系统存储器1504可包含易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)1508和/或高速缓冲存储器1510。计算机系统/服务器1500还可以包括其他可移动/不可移动、易失性/非易失性计算机系统存储介质。仅作为示例,存储系统1512可被提供用于从不可移动、非易失性磁介质(未示出,并且通常被称为“硬盘驱动器”)读取和向其写入。虽然未示出,但是可以提供用于从可移除非易失性磁盘(例如,“软盘”)读取和向可移除非易失性磁盘写入的磁盘驱动器,以及用于从可移除非易失性光盘(诸如cd

rom、dvd

rom或其他光学介质)读取或向可移除非易失性光盘写入的光盘驱动器。在这样的实例中,每一个都可以通过一个或多个数据介质接口连接到总线1506。如下面将进一步示出和描述的,存储器1504可以包括具有被配置为执行本发明的实施例的功能的程序模块的集合(例如,至少一个)的至少一个程序产品。
[0129]
具有一组(至少一个)程序模块1516的程序/实用工具以及操作系统、一个或多个应用程序、其他程序模块和程序数据可以通过示例而非限制的方式存储在存储器1504中。操作系统、一个或多个应用程序、其他程序模块和程序数据中的每一个或其某一组合可包含联网环境的实施例。程序模块1516通常执行如本文所述的本发明的实施例的功能和/或方法。
[0130]
计算机系统/服务器1500还可以与一个或多个诸如键盘、定点设备、显示器1520等的外部设备1518通信;使得用户能够与计算机系统/服务器1500交互的一个或多个设备;和/或使计算机系统/服务器1500能够与一个或多个其他计算设备通信的任何设备(例如,网卡、调制解调器等)。这样的通信可以经由输入/输出(i/o)接口1514发生。此外,计算机系统/服务器1500可以经由网络适配器1522与诸如局域网(lan)、通用广域网(wan)和/或公共网络(例如,互联网)之类的一个或多个网络通信。如所描绘的,网络适配器1522可以经由总线1506与计算机系统/服务器1500的其他部件通信。应当理解,尽管未示出,其他硬件和/或
软件组件可以与计算机系统/服务器1500结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动器阵列、raid系统、磁带驱动器和数据归档存储系统等。
[0131]
此外,用于访问包括n多个内存库的存储器单元中的二进制数据向量的存储器访问单元1400可附接至总线系统1506,其中,二进制数据向量分部分地存储在n个内存库中。
[0132]
已经出于说明的目的呈现了本发明的不同实施例的描述,但并不旨在是穷尽性的或局限于所披露的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域的普通技术人员而言将是显而易见的。这里使用的术语被选择以最佳地解释实施例的原理、实际应用或对市场上存在的技术的技术改进,或者使得本领域普通技术人员能够理解这里公开的实施例。
[0133]
本发明可以体现为系统、方法和/或计算机程序产品。所述计算机程序产品可包含上面具有计算机可读程序指令的计算机可读存储介质(或介质),所述计算机可读程序指令用于致使处理器执行本发明的各方面。
[0134]
该介质可以是用于传播介质的电子、磁性、光学、电磁、红外或半导体系统。计算机可读介质的示例可包括半导体或固态存储器、磁带、可移动计算机磁盘、随机存取存储器(ram)、只读存储器(rom)、刚性磁盘和光盘。光盘的当前示例包括致密盘只读存储器(cd

rom)、致密盘读/写(cd

r/w)、dvd和蓝光盘(blu

ray

disk)。
[0135]
计算机可读存储介质可以是可以保留和存储指令以供指令执行设备使用的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述各项的任何合适的组合。计算机可读存储介质的更具体例子的非穷举列表包括以下:便携式计算机盘,硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存),静态随机存取存储器(sram)、便携式致密盘只读存储器(cd

rom),数字通用盘(dvd)、记忆棒、软盘、诸如穿孔卡片或具有记录在其上的指令的凹槽中的凸起结构的机械编码设备,以及上述的任意合适的组合。如本文中所使用的计算机可读存储介质不应被解释为瞬态信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤电缆的光脉冲)、或通过导线传输的电信号。
[0136]
本文所述的计算机可读程序指令可从计算机可读存储介质下载到相应的计算/处理设备,或经由网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0137]
用于执行本发明的操作的计算机可读程序指令可以是汇编指令,指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据,或者以一种或多种编程语言的任意组合编写的源代码或目标代码,包括面向对象的smalltalk、c 等编程语言,以及常规的过程式编程语言,例如“c”编程语言或类似的编程语言。计算机可读程序指令可以完全地在用户的计算机上执行、部分地作为独立软件包在用户的计算机上执行、部分地在用户的计算机上部分在远程计算机上执行、或者完全地在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何类型的网络(包括局域网(lan)或广域网
(wan))连接到用户的计算机,或者可以连接到外部计算机(例如,通过使用互联网服务提供商的互联网)。在一些实施例中,电子电路(包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla))可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本发明的各方面。
[0138]
本文中参考根据本发明的实施例的方法、设备(系统)和计算机程序产品的流程图说明和/或框图描述本发明的方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令来实现。
[0139]
这些计算机可读程序指令可以被提供给通用计算机的处理器,专用计算机或其他可编程数据处理装置,以产生机器,其通过计算机或其他可编程数据处理装置的处理器执行,创建用于实现在流程图和/或方框图的一个或多个方框中指定的功能/动作的装置。这些计算机可读程序指令还可存储在可指导计算机的计算机可读存储介质中,可编程数据处理装置,和/或以特定方式起作用的其他设备,使得具有存储在其中的指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各方面的指令。
[0140]
计算机可读程序指令还可以加载到计算机、其他可编程数据处理装置上,或者使得在计算机上执行一系列操作步骤的另一设备,其他可编程装置或其他设备,以产生计算机实现的过程,使得在计算机上执行的指令,其他可编程装置或另一设备实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0141]
附图中的流程图和/或框图图示了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。对此,流程图或框图中的每个方框可以代表模块、段或指令的一部分,其包括用于实现规定的逻辑功能的一个或多个可执行指令。在一些替代实现方式中,框中所标注的功能可以不以图中所标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。还将注意的是,框图和/或流程图中的每个框、以及框图和/或流程图中的框的组合可以由基于专用硬件的系统来实现,所述基于专用硬件的系统执行指定的功能或动作或执行专用硬件与计算机指令的组合。
[0142]
在此使用的术语仅用于描述具体实施例的目的并且不旨在限制本发明。如在此使用的,单数形式“一个”、“一种”和“该”旨在也包括复数形式,除非上下文另外清楚地指示。将进一步理解的是,当在本说明书中使用术语“包括”和/或“包括”时,其指定所陈述的特征、整体、步骤、操作、元件和/或组件的存在,但是不排除一个或多个其他特征、整体、步骤、操作、元件、组件和/或其组的存在或添加。
[0143]
所附权利要求中的所有装置或步骤加上功能元件的对应结构、材料、动作和等效物旨在包括用于结合其他要求保护的元件(如具体要求保护的)来执行功能的任何结构、材料或动作。本发明的描述是出于说明和描述的目的而呈现的,但不旨在是穷尽性的或局限于所披露的形式的本发明。在不脱离本发明的范围和精神的情况下,许多修改和变化对本领域的普通技术人员将是显而易见的。选择和描述这些实施例是为了最好地解释本发明的原理和实际应用,并且使得本领域的普通技术人员能够针对适合于所考虑的具体用途的具有不同修改的不同实施例理解本发明。
[0144]
简而言之,本发明概念可以被概括为一种用于访问包括n多个内存库的存储器单
元中的二进制数据向量的方法,其中所述二进制数据向量分部分地存储在所述n个内存库中,该方法包括接收所述二进制数据向量的起始地址和所述二进制数据向量的元素的2的幂跨距,确定所述内存库中的每个内存库一个的n个偏移量,其中,所述偏移量中的每个偏移量是通过以下方式确定的:将多个位级xor函数应用到所述起始地址,从而产生z向量,使用所述z向量访问映射表,并根据所述二进制数据向量的2的幂跨距移位映射表访问结果,以及根据所述z向量的二进制等效值来确定所述n个内存库中的所述二进制数据向量的部分的序列,以及并行访问所述存储器单元的所述n个内存库中的所述二进制数据向量。
[0145]
在该方法中,将多个位级xor函数应用到起始地址可包括从起始地址选择log2(n)个部分和log2(n)位大小的y部分,确定该log2(n)个部分中的每个的奇偶校验位,从而产生log2(n)维的奇偶校验向量x,以及在x与y之间执行位级xor运算,从而产生z向量。
[0146]
使用z向量来访问映射表可以包括:通过使用z向量作为映射表中的索引来选择包括log2(s)个条目的映射表中的行,并且将映射表访问结果与起始地址的一部分组合以获得n个偏移量。
[0147]
该组合可以包括用确定的log2(n)个映射表条目替换位于起始地址的位偏移量log2(n)处的log2(n)个位,从而产生log2(n)个偏移量,每个偏移量被用作log2(n)个库的相应库中的偏移量。
[0148]
确定n个内存库中的二进制数据向量的部分的序列可以包括控制log2(n)个连续复用器级,每个复用器级可包括多个2输入位复用器,以涵盖数据向量的总宽度。
[0149]
访问操作可以是读取操作。
[0150]
访问操作可以是写入操作。
[0151]
所选择的起始地址的log2(n)个部分的大小可以相等。
[0152]
二进制数据向量可存储在所述n多个内存库中的大小相等的部分中。
[0153]
起始地址的提供、偏移量的确定、以及二进制数据向量的部分的序列的确定和部分的序列的确定,可以在二进制数据向量向n个内存库的写入操作之前执行。
[0154]
提供起始地址、确定偏移量以及确定二进制数据向量的部分的序列,可以在对n个内存库读取二进制数据向量的操作之前执行,确定部分的序列,可以在对n个内存库读取二进制数据向量的操作之后执行。
[0155]
一种用于访问存储器单元中的二进制数据向量的存储器访问单元包括n多个内存库,所述二进制数据向量分部分地存储在所述n个内存库中,所述存储器访问单元包括:接收单元,适于接收所述二进制数据向量的起始地址和所述二进制数据向量的元素的2的幂跨距;第一确定模块,适于确定每个内存库一个的n个偏移量,其中,所述偏移量中的每个偏移量通过以下方式确定:将多个位级xor函数应用到所述起始地址,从而产生z向量,使用所述z向量访问映射表,并根据所述二进制数据向量的2的幂跨距移位映射表访问结果;以及第二确定模块,适于根据所述z向量的所述二进制等效值确定所述n个内存库中的所述二进制数据向量的部分的序列;以及基本访问单元,用于并行访问所述存储器单元的n个内存库中的二进制数据向量。
[0156]
由第一确定模块将多个位级xor函数应用到起始地址可以包括从起始地址中选择log2(n)个部分和log2(n)位大小的y个部分,确定log2(n)个部分中的每个的奇偶校验位,从而产生log2(n)维的奇偶校验向量x,以及在x与y之间执行位级xor运算,从而产生z向量。
[0157]
由所述第一确定模块使用所述z向量来访问映射表可以包括:通过使用所述z向量作为所述映射表中的索引来选择所述映射表中包括log2(s)个条目的行,并且将所述映射表访问结果与所述起始地址的一部分组合以获得所述n个偏移量。
[0158]
第一确定模块的组合还可以包括由所确定的log2(n)个映射表条目替换位于起始地址的位偏移量log2(n)处的log2(n)个位,从而产生log2(n)个偏移量,每个偏移量被用作log2(n)个库中的对应库中的偏移量。
[0159]
所述第二确定模块还可以用于:当确定所述二进制数据向量在所述n个内存库中的部分的序列时,控制log2(n)个连续复用器级,每个复用器级包括多个2输入位复用器,以便涵盖所述数据向量的总宽度。
[0160]
访问操作可以是读取操作。
[0161]
访问操作可以是写入操作。
[0162]
起始地址的所选log2(n)个部分的大小可以相等。
[0163]
所述二进制数据向量可存储在所述n多个内存库中的大小相等的部分中。
[0164]
可以在将二进制数据向量写入n个内存库之前执行提供起始地址、确定偏移量、确定二进制数据向量的部分的序列、以及确定部分的序列。
[0165]
可以在对所述n个内存库读取所述二进制数据向量的操作之前,执行所述提供起始地址、所述偏移量的确定以及所述二进制数据向量的部分的序列的确定,以及可在对所述n个内存库的所述二进制数据向量的所述读取操作之后执行确定部分的序列。
[0166]
一种计算机程序产品,用于访问包括n多个内存库的存储器组件的数据向量,其中所述二进制数据向量分部分地存储在所述n多个内存库中,所述计算机程序产品包括计算机可读存储介质,所述计算机可读存储介质具有随其体现的程序指令,所述程序指令可由一个或多个计算系统或控制器执行以促使所述一个或多个计算系统接收所述二进制数据向量的起始地址和所述二进制数据向量的元素的2的幂跨距,确定所述内存库中的每个内存库一个的n个偏移量,其中,所述偏移量中的每个偏移量是通过以下方式确定的:将多个位级xor函数应用到所述起始地址,从而产生z向量,使用所述z向量访问映射表,并根据所述二进制数据向量的2的幂跨距移位映射表访问结果;以及根据所述z向量的二进制等效值来确定所述n个内存库中的所述二进制数据向量的部分的序列;以及并行访问所述存储器单元的所述n个内存库中的所述二进制数据向量。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献