用于集群数据系统的基于列的数据布局技术

文档序号:1860759 发布日期:2021-11-19 浏览:3次 >En<

阅读说明:本技术 用于集群数据系统的基于列的数据布局技术 (Column-based data layout techniques for clustered data systems ) 是由 C·肖汉 S·东高恩卡尔 R·孙达拉姆 J·卡恩 S·古丽亚尼 D·森古普塔 M·泰珀 于 2020-12-25 设计创作,主要内容包括:用于为集群数据提供列数据布局的介质管理技术包括一种设备,其具有列可寻址存储器以及连接到存储器的电路。该电路被配置为:以基于列的格式将逻辑矩阵的数据集群存储在列可寻址存储器中;以及以列读取操作从列可寻址存储器中读取数据集群的逻辑列。读取逻辑列可以包括:从列可寻址存储器中对角地读取逻辑列数据,包括从数据集群和从数据集群的复制副本中读取。读取逻辑列可以包括从多个互补逻辑列读取。读取逻辑列可以包括利用模数计数器对角地读取逻辑列数据。可以从基于逻辑列号选择的列地址存储器的分区读取列数据。描述和要求保护其它实施例。(A media management technique for providing a column data layout for cluster data includes a device having a column addressable memory and circuitry coupled to the memory. The circuitry is configured to: storing the data clusters of the logical matrix in a column-addressable memory in a column-based format; and reading the logical columns of the data cluster from the column addressable memory in a column read operation. Reading the logical column may include: the logical column data is read diagonally from the column addressable memory, including from the data cluster and from the replicated copy of the data cluster. Reading the logical column may include reading from a plurality of complementary logical columns. Reading the logical column may include reading the logical column data diagonally using a modulo counter. Column data may be read from a partition of the column address memory selected based on the logical column number. Other embodiments are described and claimed.)

具体实施方式

虽然本公开的构思易于进行各种修改和替代形式,但是其具体实施例已经通过示例在附图中示出并且将在本文中详细描述。然而,应当理解,无意将本公开的构思限制为所公开的特定形式,而是相反,其意图是覆盖与本公开和所附权利要求一致的所有修改、等同物和替代物。

在说明书中对“一个实施例”、“实施例”、“说明性实施例”等的引用指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可以包括或不必包括所述特定特征、结构或特性。此外,这样的短语不一定指同一实施例。此外,当结合实施例描述特定特征、结构或特性时,可以认为结合其它实施例来实现这种特征、结构或特性在本领域技术人员的知识范围内,而无论是否进行了明确描述。另外,应当理解,以“至少一个A、B和C”的形式包括在列表中的项目可以表示(A);(B);(C);(A和B);(A和C);(B和C);或(A、B和C)。类似地,以“A、B或C中的至少一个”形式列出的项目可以表示(A);(B);(C);(A和B);(A和C);(B和C);或(A、B和C)。

在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由暂时性或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其中的指令,该指令可以由一个或多个处理器读取和执行。机器可读存储介质可以体现为用于以机器可读形式(例如易失性或非易失性存储器、介质盘或其它介质设备)存储或传输信息的任何存储设备、机制或其它物理结构。

在附图中,一些结构或方法特征可以以特定的布置和/或次序示出。然而,应当理解,可能不需要这种特定的布置和/或次序。相反,在一些实施例中,这些特征可以以与说明性附图中所示的不同方式和/或次序进行布置。另外,在特定附图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这种特征,并且在一些实施例中,可以不包括这种特征或可以将其与其它特征组合。

现在参考图1,用于使用列读取启用存储器为集群数据提供列数据布局的计算设备100包括:处理器102、存储器104、输入/输出(I/O)子系统112、数据存储设备114、通信电路122,以及一个或多个加速器设备126。当然,在其它实施例中,计算设备100可以包括其它或额外组件,例如计算机中常见的那些组件(例如,显示器、外围设备等)。另外,在一些实施例中,一个或多个说明性组件可以并入另一组件中,或者以其它方式形成另一组件的一部分。除非另有说明,否则本文在参照执行介质管理时所使用的术语“存储器”可以指代存储器104和/或数据存储设备114。如本文中更详细地解释的,介质访问电路108、118(例如,被配置为访问对应的存储器介质110、120中的数据并对其进行操作的任何电路或设备)与对应的存储器介质110、120(例如,数据被写入和读取的任何设备或材料)连接,可以提供(例如,读取和/或写入)集群数据的各种列数据布局。如下面进一步描述的,列数据布局可以包括如结合图5-6描述的复制的数据集群,结合图7-9描述的互补逻辑列,结合图10-11描述的多个分区中的每管芯旋转(per-die rotation),和/或结合图12-13描述的具有保留的行读取性能的每管芯旋转。本文公开的列数据布局可以通过减少所需的列读取操作的总数来提高读取性能,例如,通过避免在集群边缘上进行多次读取,避免模数代价(modulo penalty)或以其它方式减少读取。

在说明性实施例中,存储器介质110具有三维交叉点架构,其具有与其它存储器架构(例如,动态随机存取存储器(DRAM))不同的数据访问特性,例如能够实现每分片(tile)一位的访问,并在读取或写入同一分区或其它分区之间会产生时间延迟。介质访问电路108被配置为有效使用(例如,就功率使用和速度方面)存储器介质110的架构,例如,通过在给定分区内并行访问多个分片,利用便笺式存储器(scratch pad)(例如,相对较小的低延迟存储器)来暂时保持从存储器介质110读取的数据并对该数据进行操作,以及将来自一个分区的数据广播到存储器104的其它部分以使得矩阵计算(例如,张量操作)能够在存储器104内并行执行。另外,在说明性实施例中,代替向存储器104发送读取或写入请求以访问矩阵数据,处理器102可以发送更高级别的请求(例如,对宏操作的请求,前n相似性搜索查询请求,或其它随机关联搜索请求),并提供在所请求的操作(例如,输入查询)中要使用的输入数据的位置。此外,代替将结果数据发送回处理器102,存储器104可以仅发回确认或其它状态指示(例如,“完成”),以指示所请求的操作已经完成。这样,可以在存储器(例如,在存储器104中或在数据存储设备114中)中以最少使用总线(例如,I/O子系统)在计算设备100的组件之间(例如,在存储器104或数据存储设备114与处理器102之间)传输数据的方式,执行诸如人工智能操作(例如,随机关联搜索)之类的许多计算操作。

在一些实施例中,介质访问电路108包括在与存储器介质110相同的管芯中。在其它实施例中,介质访问电路108在独立的管芯上,但与存储器介质110处于同一封装中。在其它实施例中,介质访问电路108位于单独的管芯和单独的封装中,但是与存储器介质110在同一双列直插式存储器模块(DIMM)或板上。

处理器102可以体现为能够执行本文所述的操作(例如执行应用)的任何设备或电路(例如,多核处理器、微控制器或其它处理器或处理/控制电路),所述应用例如是可以利用神经网络或其它机器学习结构来学习和进行推理的人工智能相关的应用。在一些实施例中,处理器102可以体现为、包括或耦合至FPGA、专用集成电路(ASIC)、可重配置硬件或硬件电路或者或其它专用硬件,以便于本文所述功能的执行。

可以包括非易失性存储器(例如,两级存储器方案中的远存储器)的存储器104包括存储器介质110和位于下方(例如,较低位置)并耦合至存储器介质110的介质访问电路108(例如,设备或电路,如处理器,专用集成电路(ASIC)或由互补金属氧化物半导体(CMOS)或其它材料构成的其它集成电路)。介质访问电路108也连接到存储器控制器106,可以体现为被配置为响应于对应请求(例如,来自可能正在执行人工智能相关应用的处理器102,该应用依赖于随机关联搜索来识别对象,进行推理和/或执行人工智能相关操作)而选择性地从存储器介质110读取和/或向其写入的任何设备或电路(例如,处理器、协处理器、专用电路等)。在一些实施例中,存储器控制器106可以包括向量功能单元(VFU)130,其可以被体现为任何设备或电路(例如,专用电路、可重配置电路、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等),其能够从处理器102卸载基于向量的任务(例如,比较从存储于存储器介质110中的向量的特定列中读取的数据,确定存储于存储器介质110中的向量与搜索关键词之间的汉明(Hamming)距离,根据向量的汉明距离对向量进行排序等)。

简要地参考图2,在说明性实施例中,存储器介质110包括分片架构,在此也称为交叉点架构(例如,其中存储器单元位于字线和位线的交点处且可单独寻址的架构以及其中位存储是基于体电阻的变化),其中每个存储器单元(例如,分片)210、212、214、216、218、220、222、224、226、228、230、232、234、236、238、240可通过x参数和y参数(例如,列和行)寻址。存储器介质110包括多个分区,每个分区包括分片架构。分区可以堆叠为层202、204、206,以形成三维交叉点架构(例如,Intel 3D XPointTM存储器)。与其中仅固定大小的多位数据结构(例如,字节、字等)可寻址的典型存储器设备不同,介质访问电路108被配置为在存储器控制器106的请求下从存储器介质110读取各个位或其它数据单元,所述存储器控制器106可以响应于从处理器102接收到对应请求而产生该请求。

返回参考图1,存储器104可以包括非易失性存储器和易失性存储器。非易失性存储器可以体现为能够以持久方式(即使对非易失性存储器断电)存储数据的任何类型的数据存储设备。例如,非易失性存储器可以体现为一个或多个非易失性存储器设备。非易失性存储器设备可以包括以交叉点架构配置的一个或多个存储器设备,该交叉点架构使得能够进行位级寻址(例如,从数据的各个位读取和/或写入数据的各个位的能力,而不是字节或其它更大数据单元),并且示例性地体现为三维(3D)交叉点存储器。在一些实施例中,非易失性存储器可以另外包括其它类型的存储器,包括使用硫族化物相变材料(例如,硫族化物玻璃)的存储器设备、铁电晶体管随机存取存储器(FeTRAM)、基于纳米线的非易失性存储器、相变存储器(PCM)、结合了忆阻器技术的存储器、磁阻随机存取存储器(MRAM)或自旋传递扭矩(STT)-MRAM的任意组合。易失性存储器可以被实现为能够在供电给易失性存储器的同时存储数据的任何类型的数据存储设备。例如,易失性存储器可以被实现为一个或多个易失性存储器设备,并且在理解易失性存储器在其它实施例中可以被实现为其它类型的非持久数据存储设备的情况下,在下文中偶尔地称为易失性存储器。易失性存储器可以具有支持位级可寻址性的架构,类似于上面描述的架构。

处理器102和存储器104经由I/O子系统112通信地耦合到计算设备100的其它组件,该I/O子系统112可以体现为用于促进与处理器102和/或主存储器104和计算设备100的其它组件的输入/输出操作的电路和/或组件。例如,I/O子系统112可以体现为或以其它方式包括:存储器控制器中枢,输入/输出控制中枢,集成传感器中枢,固件设备,通信链路(例如,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等)和/或其它组件和子系统,以促进输入/输出操作。在一些实施例中,I/O子系统112可以形成片上系统(SoC)的一部分,并且与处理器102、主存储器104和计算设备100的其它组件中的一个或多个一起被合并在单个芯片中。

数据存储设备114可以体现为被配置用于短期或长期存储数据的任何类型的设备,例如,存储器设备和电路、存储卡、硬盘驱动器、固态驱动器或其它数据存储设备。在说明性实施例中,数据存储设备114包括类似于存储器控制器106的存储器控制器116,类似于存储器介质110的存储器介质120(也称为“存储介质”),以及类似于介质访问电路108的介质访问电路118。此外,存储器控制器116还可以包括类似于向量功能单元(VFU)130的向量功能单元(VFU)132。数据存储设备114可以包括存储数据存储设备114的数据和固件代码的系统分区,以及存储操作系统的数据文件和可执行文件的一个或多个操作系统分区。

通信电路122可以体现为能够支持通过计算设备100与另一设备之间的网络进行通信的任何通信电路、设备或其集合。通信电路122可以被配置为使用任何一种或多种通信技术(例如,有线或无线通信)和相关联的协议(例如,以太网、WiMAX等)来实现这种通信。

说明性通信电路122包括网络接口控制器(NIC)124,其也可以称为主机结构接口(HFI)。NIC 124可以被体现为一个或多个附加板、子卡、网络接口卡、控制器芯片、芯片组或可以由计算设备100用于与另一计算设备连接的其它设备。在一些实施例中,NIC 124可以体现为包括一个或多个处理器的片上系统(SoC)的一部分,或者包含于也包含一个或多个处理器的多芯片封装中。在一些实施例中,NIC 124可以包括都位于NIC 124本地的本地处理器(未示出)和/或本地存储器(未示出)。在这样的实施例中,NIC 124的本地处理器能够执行处理器102的一个或多个功能。另外或替代地,在这样的实施例中,NIC 124的本地存储器可以在板级、插槽级、芯片级和/或其它级别被集成到计算设备100的一个或多个组件中。

一个或多个加速器设备126可以体现为能够比通用处理器102更快地执行一组操作的任何设备或电路。例如,加速器设备126可以包括图形处理单元128,其可以体现为能够比处理器102更快地执行图形操作(例如,矩阵操作)的任何设备或电路(例如,协处理器、ASIC、可重配置电路等)。

现在参考图3,在一些实施例中,计算设备100可以利用双列直插式存储器模块(DIMM)架构300。在架构300中,存储器介质110的多个管芯与共享命令地址总线310连接。这样,在操作中,在连接到共享命令地址总线310的所有存储器介质110上并行地读出数据。以允许在存储器介质110的所有连接管芯上读取同一列的配置方式,可以实现在存储器介质110上布局数据。

现在参考图4,图400示出了在存储器104和/或数据存储设备114中可以由计算设备100访问(例如,读取和/或写入)的集群数据集。集群数据集被示出为逻辑矩阵402,其包括以行和列布置的数据元素(例如,位)。矩阵402的行被作为说明性地分组为多个集群404、406、408、410、412、414、416、418、420。每个集群包括行的连续组,并且每个集群可以具有不同的长度(即,行数)。每个集群的行包括每个相同列的数据。例如,列422、424、426被示为延伸穿过所有集群。应用可以请求对包含于特定集群或集群组中的列数据的列读取。例如,可以执行列读取以取回包含于集群414中的列424的数据。应当注意,图400示出了矩阵400的逻辑视图,包括行和列的逻辑视图。如下文进一步所述,当矩阵402的行和/或列存储在存储器介质110、120中时,可以以不同的基于列的格式来布置矩阵402的行和/或列。

现在参考图5,计算设备100在操作中可以执行用于集群数据访问的方法500。参考存储器104描述了方法500。然而,应当理解,可以另外或替代地使用数据存储设备114来执行方法500。方法500以框502开始,其中计算设备100(例如,介质访问电路108)确定是执行读取操作还是写入操作。如果计算设备100确定执行读取操作,则方法500向前分支到框514,如下所述。如果计算设备100确定执行写入操作,则方法500前进到框504。

在框504中,计算设备100(例如,介质访问电路108)接收逻辑行写入请求。逻辑行写入请求可以包括行地址和逻辑行数据以存储在存储器104中。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如响应于从主机处理器102接收到的宏命令。

在框506中,计算设备100在存储器介质110的分区上旋转逻辑行数据。旋转量可以由行地址确定。作为说明性地,计算设备100针对每个递增的行地址将逻辑行数据向右旋转一列(即,一个分片)。应当理解,作为说明性地,旋转包括将数据位向右移位(例如,朝向较高编号的列),并且如果将数据位移位经过最后一列,则将该数据位回绕到左侧(例如,列号0)。旋转量可以是分区的列的总宽度的模数。例如,在实施例中,存储器介质的每个管芯可以包括128个分片(列),并且每个分区可以包括八个管芯。在这个实施例中,分区包括总共1024个列。

在框508中,计算设备100在存储器介质110中的行地址处存储旋转的行。在框510中,计算设备100在存储器介质110中在行地址加上预定的行偏移处存储旋转行的复制副本。因此,计算设备100可以在存储器介质110中存储由预定行数隔开的数据集群的复制副本。在一些实施例中,在框512中,预定行偏移可以基于以列表示的分区的宽度。例如,在一些实施例中,预定行偏移可以等于128、1024,或等于存储器介质110的分区中包括的分片的另一数量。在写入数据之后,方法500循环回到框502以执行其它存储器访问操作。

返回参考框502,如果计算设备100执行读取操作,则方法500分支到框514,其中计算设备100确定是执行列读取操作还是行读取操作。如果计算设备100确定执行列读取,则方法500分支到框522,如下所述。如果计算设备100确定执行行读取,则方法500前进到框516。

在框516中,计算设备100(例如,介质访问电路108)接收逻辑行读取请求。逻辑行读取请求可以包括标识存储在存储器104中的逻辑行数据的行地址。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如响应于从主机处理器102接收到的宏命令。

在框518中,计算设备100在存储器介质110中的行地址处读取旋转的行数据。如以上结合框506所述,旋转的行数据以旋转格式存储在存储器介质110中。在框520中,计算设备100解旋(un-rotate)存储器介质110的分区上经过旋转的数据。计算设备100可以执行与当行数据存储在存储器介质110中时执行的旋转相反的旋转。因此,通过解旋数据,计算设备100恢复原始的逻辑行数据。旋转量可以由行地址确定。作为说明性地,为了恢复行数据,计算设备100针对每个增加的行地址将逻辑行数据向左旋转一列(即,一个分片)。应当理解,作为说明性地,旋转包括向左移动数据位(例如,朝向较低编号的列),并且如果将数据位移动超过列0,则该数据位被回绕到右侧(例如,最大的列号)。旋转量可以是分区中的列的总宽度的模数。例如,在一个实施例中,存储器介质的每个管芯可以包括128个分片(列),并且每个分区可以包括八个管芯。在该实施例中,分区包括总共1024个列。在读取数据之后,方法500循环回到框502以执行其它的存储器访问操作。

返回参考框514,如果计算设备100确定执行列读取操作,则方法500分支到框522,其中计算设备(例如,介质访问电路108)接收逻辑列读取请求。列读取请求标识块地址和逻辑列号。块地址可以是包括集群的起始行和/或列(例如,行0)的行地址。在框524中,计算设备100基于块地址和列号来确定基地址。基地址标识存储器介质110中的行,该行包括在存储器介质110中的物理列0中的所请求的逻辑列号。基地址可以使用算术运算(例如,加法、减法和/或模数)的组合来确定。例如,基地址可以是块地址加上存储器分区的列宽度减去逻辑列号,对列宽度取模。

在框526中,计算设备100从基地址开始从存储器介质110对角地读取逻辑列数据。对角地读取列数据包括:从基地址处的列0读取数据元素(例如,位);递增用于行号和列号的内部计数器;以及继续在存储器介质110上读取列。在一些实施例中,计算设备100可以在分区的多个管芯上并行读取列数据。在这些实施例中,单个命令/地址总线可以用于将行地址传送给每个管芯,并且每个管芯可以向行地址添加预配置的偏移。从基地址开始的读取从如上结合框508所述存储的旋转行中读取逻辑列数据。在一些实施例中,在框528中,计算设备100可以从如上结合框510所述存储的旋转行的复制副本中读取逻辑列的至少一部分。在一些实施例中,在框530中,计算设备100丢弃从不包含于数据集群中的行读取的一个或多个数据元素(例如,位)。例如,从位于集群和集群的复制副本之间的行读取的数据可能会被丢弃。在读取逻辑列之后,方法500循环回到框502以执行其它的存储器访问操作。

现在参考图6,图600示出了如以上结合图5的方法所描述的可访问的列数据格式的一个可能的实施例。图600示出了存储器介质602,例如图1的存储器介质110和/或存储器介质120。如图所示,说明性的存储器介质602被布置成许多行604和分片606(即,列606)。每个分片606包含于管芯608中。作为说明性地,每行604包括两个管芯608,每个管芯608具有四个分片606,总共八个分片606;然而,在其它实施例中,每行可以包括128个分片、1024个分片或另一数量的分片。每行604可通过行地址寻址,而每个分片606可通过列号寻址。

说明性的存储器介质602在其中存储了数据集群610和复制数据集群612。集群610、612中的每个是具有六行的逻辑矩阵。如图所示,对于存储器介质602上的每个后续行,将每行604的列606旋转一个列位置。例如,逻辑行0、逻辑列0存储在行地址0、分片号0中;逻辑行1、逻辑列0存储在行地址1、分片号1中;等等。复制数据集群612以距数据集群610预定的行偏移存储。作为说明性地,预定行偏移为2,使得复制数据集群612的起始地址为8,其等于存储器介质602在分片606中的宽度。因此,在说明性实施例中,每个数据集群包括的行数不超过存储器介质602中的列数。当然,在其它实施例中,可使用不同的预定行偏移(例如,128行或1024行)。

可以使用单列读取操作来读取数据集群610的每个逻辑列。列读取可以从数据集群610和复制数据集群612两者读取物理位。图600将包含于逻辑列7中的数据示出为突出显示的单元614。逻辑列7的作为说明性的列读取可以从行地址1、分片号0开始,并沿对角继续到行地址2、分片号1、行地址3、分片号2,依此类推,直到行地址8、分片地址7。因为不包含于集群610中,所以从行地址6、分片号5和行地址7、分片号6读取的数据可以被丢弃。类似地,图600还将包含于逻辑列4中的数据示出为突出显示的单元616。逻辑列4的作为说明性的列读取可以从行地址4、分片号0开始,并沿对角继续到行地址5、分片号1、行地址6、分片号2,依此类推,直到行地址11、分片地址7。因为不包含于集群610中,所以从行地址6、分片号2和行地址7、分片号3读取的数据可以被丢弃。可以类似地使用单列读取操作来读取数据集群610的其它逻辑列,这是以存储复制数据集群612为代价。

现在参考图7,计算设备100在操作中可以执行用于集群数据访问的方法700。参照存储器104描述了方法700。然而,应当理解,可以另外或替代地使用数据存储设备114来执行方法700。方法700开始于框702,其中计算设备100(例如,介质访问电路108)确定是执行读取操作还是写入操作。如果计算设备100确定执行读取操作,则方法700分支到下面描述的框712。如果计算设备100确定执行写入操作,则方法700前进到框704。

在框704中,计算设备100(例如,介质访问电路108)接收逻辑行写入请求。逻辑行写入请求可以包括行地址和逻辑行数据以存储在存储器104中。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如响应于从主机处理器102接收的宏命令。

在框706中,计算设备100在存储器介质110的分区上旋转逻辑行数据。旋转量可以由行地址确定。作为说明性地,计算设备100针对每个增加的行地址将逻辑行数据向右旋转一列(即,一个分片)。旋转量可以是分区的列总宽度的模数。例如,在实施例中,存储器介质的每个管芯可以包括128个分片(列),并且每个分区可以包括八个管芯。在该实施例中,分区包括总共1024个列。

在框708中,计算设备100针对旋转的行数据的每个列子组将管芯偏移添加到行地址。每个列子组可以包括等于存储器介质110的管芯中包括的分片的数量的多个列。例如,在说明性实施例中,旋转的行数据可以包括八个列子组,每个子组128列。每个管芯偏移是添加到写入请求的行地址的整数行。每个管芯的管芯偏移可以被配置为使得列数据可以在存储器介质110的管芯上对角地存储。例如,在具有宽度为128个分片的管芯的说明性实施例中,0号管芯的管芯偏移可以为0,1号管芯的管芯偏移可以是128,依此类推。每个管芯的管芯偏移可以被硬编码,在引导时被配置或以其它方式编程。在框710中,计算设备100将旋转后的行存储在经每管芯偏移的存储器介质110中的行地址处。在一些实施例中,每个管芯可以独立地施加相关联的管芯偏移。例如,每个管芯可以将相关联的管芯偏移添加到经由命令命令/地址总线接收的行地址。在写入数据之后,方法700循环回到框702以执行其它的存储器访问操作。

返回参考框702,如果计算设备100执行读取操作,则方法700分支到框712,其中计算设备100确定是执行列读取操作还是行读取操作。如果计算设备100确定执行列读取,则方法700分支到框720,如下所述。如果计算设备100确定执行行读取,则方法700前进到框714。

在框714中,计算设备100(例如,介质访问电路108)接收逻辑行读取请求。逻辑行读取请求可以包括标识存储于存储器104中的逻辑行数据的行地址。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如响应于从主机处理器102接收到的宏命令。

在框716中,计算设备100在经每管芯偏移的存储器介质110中的行地址处读取旋转的行数据。例如,每个管芯可以将相关联的管芯偏移添加到经由命令命令/地址总线接收到的行地址。如以上结合框706所述,旋转的行数据以旋转格式存储在存储器介质110中。在框718中,计算设备100解旋存储器介质110的分区上的旋转的数据。计算设备100可以执行与当行数据被存储在存储器介质110中时所执行的旋转相反的旋转。因此,通过解旋数据,计算设备100恢复了原始的逻辑行数据。旋转量可以由行地址确定。作为说明性地,为了恢复行数据,计算设备100针对每个增加的行地址将逻辑行数据向左旋转一列(即,一个分片)。应当理解,作为说明性地,旋转包括将数据位向左移位(例如,朝向较低编号的列),并且如果将数据位移动超过列0,则该数据位被回绕到右侧(例如,最大的列号)。旋转量可以是分区中的列总宽度的模数。例如,在实施例中,存储器介质的每个管芯可以包括128个分片(列),并且每个分区可以包括八个管芯。在该实施例中,分区包括总共1024个列。在读取数据之后,方法700循环回到框702以执行其它的存储器访问操作。

返回参考框712,如果计算设备100确定执行列读取操作,则方法700分支到框720,其中计算设备(例如,介质访问电路108)接收逻辑列读取请求。列读取请求标识块地址和逻辑列号。块地址可以是包括集群的起始行和/或列(例如,行0)的行地址。在一些实施例中,在框722中,计算设备100可以接收用于多个互补逻辑列的多个互补列号。如以下进一步描述的,在针对互补列之一的起始地址发出的列读取操作期间,读取来自多个互补列的数据。可以在发出针对每个互补列的起始地址的读取之后,组装互补列的所有数据。

在框724中,计算设备100基于块地址和列号来确定基地址。基地址标识存储器介质110中的行,该行包括存储器介质110中的物理列0中的所请求的逻辑列号。基地址可以使用算术运算(例如,加法、减法和/或模数)的组合来确定。例如,基地址可以是块地址加上存储器分区的列宽度减去逻辑列号,对列宽度取模。

在框726中,计算设备100从基地址开始并使用模数限制计数器从存储器介质110对角地读取逻辑列数据。在框728中,存储器介质100的每个管芯开始在基地址加上对应的管芯偏移处读取数据。单个命令/地址总线可以用于将行地址传送给每个管芯,并且每个管芯可以将预配置的管芯偏移添加到行地址。计算设备100可以在分区的多个管芯上并行读取列数据。在框730中,每个管芯从当前行地址处的当前分片读取列数据(例如,位),以预先配置的模数限制为模,递增用于行地址和列号的内部计数器,并继续读取管芯上的分片。模数限制可以是例如128、256或其它数字。

在框732中,计算设备100确定是否已经读取了所有互补列。例如,计算设备100可以确定是否已经为一组互补列中的每个列的起始地址发出了列读取操作。如果否,则方法700循环回到框720以继续执行互补列的列读取。如果已经读取了每个互补列,则方法700前进到框734。

在框734中,计算设备100根据以列读取操作读取的数据组装逻辑列。在一些实施例中,在框736中,计算设备100可以组装包括多位列条目的单个逻辑列。例如,逻辑列的每个数据点可以是4位或8位值,例如基因组变异数据。如上所述,多位列条目的每个位对应于互补列。因此,计算设备100可以读取一组互补列,而不丢弃来自多个互补读取的任何数据。因此,即使在存在模数限制的情况下,计算设备100也可以为列读取提供最大的吞吐量并且没有重读代价。对于具有多位长的数据的应用情形,计算设备100可以特别地提高性能。在读取和组装逻辑列之后,方法700循环回到框702以执行其它的存储器访问操作。

现在参考图8-9,图800示出了如上所述结合图7的方法来访问的列数据格式的一个可能的实施例。图800示出了存储器介质802,例如图1的存储器介质110和/或存储器介质120。如图所示,说明性的存储器介质802被布置成许多行804和分片806(即,列806)。每个分片806包含于管芯808中。作为说明性地,每行804由包括四个分片806的四个管芯808形成,总共16个分片806。然而,在其它实施例中,每行可包括另一数量的管芯808和/或分片806,例如八个管芯,每个管芯128个分片,总共1024个分片。每行804可通过行地址寻址,而每个分片806可通过列号寻址。每个管芯包括预配置的模数限制810,其示例性地为四。在一些实施例中,模数限制可以是不同的数字,例如128或256。

说明性的存储器介质802在其中存储了数据集群,该数据集群是具有16个逻辑行和16个逻辑列的逻辑矩阵。如图所示,对于在存储器介质802上的每个后续行,将每一行804的列806旋转一个列位置。例如,逻辑行0、逻辑列0存储在行地址0、分片号0;逻辑行1、逻辑列0存储在行地址1、分片号1;以此类推。另外,逻辑行在每个管芯808内偏移了相关联的管芯偏移。作为说明性地,管芯0偏移0,管芯1偏移4,管芯2偏移8,并且管芯3偏移12。因此,逻辑行0、逻辑列4存储在行地址4、管芯1的分片4;逻辑行0、逻辑列8存储在行8、管芯2的分片8;依此类推。

可以用单组列读取操作来读取数据集群的每组互补列。每个列读取操作可以从多个互补列读取位。图800示出了一组互补列,包括作为突出显示单元812的逻辑列14,作为突出显示单元814的逻辑列10,作为突出显示单元816的逻辑列6,以及作为突出显示单元818的逻辑列2。列14的说明性的列读取从行地址2、管芯0的分片0开始,其读取逻辑行2、逻辑列14。由于每管芯偏移,可以在行地址6、管芯1的分片4(其读取逻辑行2、逻辑列2),行地址10、管芯2中的分片8(其读取逻辑行2、逻辑列6)以及行地址14、管芯3中的分片12(其读取逻辑行2、逻辑列10)处同时执行读取。在读取当前位之后,每个管芯都会使受模式限制的一个或多个内部计数器递增,并且列读取继续在行地址3、管芯0中的分片1(其读取逻辑行3、逻辑列14),行地址7、管芯1中的分片5(其读取逻辑行3、逻辑列2),行地址11、管芯2中的分片9(其读取逻辑行3、逻辑列6),以及行地址15、管芯3中的分片13(其读取逻辑行3、逻辑列10)处进行。管芯使内部计数器递增,并且由于模数限制810,行计数器回绕。因此,列读取继续在行地址0、管芯0中的分片2(其读取逻辑行0、逻辑列2),行地址4、管芯1中的分片6(其读取逻辑行0、逻辑列6),行地址8、管芯2中的分片10(其读取逻辑行0、逻辑列10),以及行地址12、管芯3中的分片14(其读取逻辑行0、逻辑列14)处进行。管芯使内部计数器递增,并且列读取继续在行地址1、管芯0中的分片3(其读取逻辑行1、逻辑列2),行地址5、管芯1中分片7(其读取逻辑行1、逻辑列6),行地址9、管芯2中分片11(其读取逻辑行1、逻辑列10)和行地址13、管芯3中分片15(其读取逻辑行1、逻辑列14)处进行。

在对存储器介质802的所有分片806读取之后,列读取完成,并且计算设备100已从互补列812、814、816、818中的每个互补列(即,逻辑列2、6、10和14中)读取数据。计算设备100从行地址6、管芯0中的分片0(逻辑列10的起始地址),行地址10、管芯0中的分片0(逻辑列6的起始地址),以及行地址14、管芯0中的分片0(逻辑列2的起始地址)开始,执行其它类似的列读取。因此,在执行4个列读取操作之后,计算设备100已经读取了包含于互补列812、814、816、818中的所有数据,并且可以将逻辑列2、6、10和14组装在一起。如上所述,计算设备100可以将那些互补列作为四个单独的逻辑列或作为单个多位逻辑列来访问。

现在参考图10,计算设备100在操作中可以执行用于集群数据访问的方法1000。参考存储器104描述了方法1000。然而,应当理解,可以另外或替代地使用数据存储设备114来执行方法1000。方法1000开始于框1002,其中计算设备100(例如,介质访问电路108)确定是执行读取操作还是写入操作。如果计算设备100确定执行读取操作,则方法1000向前分支到框1012,如下所述。如果计算设备100确定执行写入操作,则方法1000前进到框1004。

在框1004中,计算设备100(例如,介质访问电路108)接收逻辑行写入请求。逻辑行写入请求可以包括行地址和逻辑行数据以存储在存储器104中。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如用于响应于从主机处理器102接收的宏命令

在框1006中,计算设备100旋转逻辑行数据内的每个列子组。每个列子组可以包括等于存储器介质110的管芯中包括的分片的数量的多个列。例如,在实施例中,存储器介质的每个管芯可以包括128个分片(列),并且每个分区可以包括八个管芯。在该实施例中,旋转的行数据可以包括八个列子组,每个子组128列。旋转量可以由行地址确定。作为说明性地,计算设备100针对每个增加的行地址将逻辑行数据向右旋转一列(即,一个分片),以每个管芯的列的宽度为模数。例如,在说明性实施例中,对于每个后续行,列0中的数据向右旋转一列,列127中的数据回绕到列0,列128中的数据向右旋转一列,列255中的数据回绕到列128,依此类推。

在框1008中,计算设备100基于行地址来确定管芯号。在行数等于列中每个管芯的宽度之后,管芯号增加。例如,在每个管芯中具有128列的说明性实施例中,在管芯0中包括行0-127,在管芯1中包括行128-255,依此类推。

在框1010中,计算设备100将每个逻辑列子组的旋转行数据存储在存储器介质110的单独分区中如上所述确定的管芯号中的行地址处。例如,说明性实施例可以包括八个分区,每个分区具有八个管芯,每个管芯具有128个分片(列)。在该实施例中,来自列0-127的数据可以存储在分区0中,来自列128-255的数据可以存储在分区1中,依此类推。继续该示例,在分区0内,将列0-127的行0-127的旋转数据存储在管芯0中,将列0-127的行128-255的旋转数据存储在管芯1中,依此类推。类似地,在分区1中,列128-255的行0-127的旋转数据存储在管芯0中,列128-255的行128-255的旋转数据存储在管芯1,依此类推。因此,存储用于整个逻辑行的数据可能需要激活并写入存储器介质110的所有分区。在写入数据之后,方法1000循环回到框1002以执行其它的存储器访问操作。

返回框1002,如果计算设备100执行读取操作,则方法1000分支到框1012,其中计算设备100确定是执行列读取操作还是行读取操作。如果计算设备100确定执行列读取,则方法1000分支到框1020,如下所述。如果计算设备100确定执行行读取,则方法1000前进到框1014。

在框1014中,计算设备100(例如,介质访问电路108)接收逻辑行读取请求。逻辑行读取请求可以包括标识存储在存储器104中的逻辑行数据的行地址。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如用于响应于从主机处理器102接收到的宏命令。

在框1016中,计算设备100读取在存储器介质110的单独分区中如上结合框1008描述而确定的管芯号中的行地址处的每个逻辑列子组的旋转行数据。例如,如上所述,说明性实施例可以包括八个分区,每个分区具有八个管芯,每个管芯具有128个分片(列)。在该实施例中,可以从分区0读取来自列0-127的数据,可以从分区1读取来自列128-255的数据,依此类推。继续该示例,在分区0内,从管芯0读取列0-127的行0-127的旋转数据,从管芯1读取列0-127的行128-255的旋转数据,依此类推。类似地,在分区1内,从管芯0读取列128-255的行0-127的旋转数据,从管芯1读取列128-255的行128-255的旋转数据,依此类推。因此,读取整个逻辑行的数据可能需要激活存储器介质110的所有分区并从其进行读取。

在框1018中,计算设备100解旋每个逻辑列子组的旋转数据。计算设备100可以执行与当行数据被存储在存储器介质110中时执行的旋转相反的旋转。因此,通过解旋数据,计算设备100恢复原始的逻辑行数据。作为说明性地,计算设备100针对每个增加的行地址将逻辑行数据向左旋转一列(即,一个分片),以每个管芯的列的宽度为模数。例如,在说明性实施例中,对于每个随后的行,列0中的数据回绕到列127,列127中的数据向左旋转一列,列128中的数据回绕到列255,列255的数据向左旋转一列,依此类推。在读取数据之后,方法1000循环回到框1002以执行其它的存储器访问操作。

返回参考框1012,如果计算设备100确定执行列读取操作,则方法1000分支到框1020,其中计算设备(例如,介质访问电路108)接收逻辑列读取请求。列读取请求标识块地址和逻辑列号。块地址可以是包括集群的起始行和/或列(例如,行0)的行地址。

在框1022中,计算设备100基于与所请求的列号相关联的逻辑列子组来选择分区。如上所述,每个列子组可以包括等于存储器介质110的管芯中包括的分片的数量的多个列。例如,在说明性实施例中,存储器介质的每个管芯包括128个分片(列)。对于列0-127,可以选择分区0,对于列128-255,可以选择分区1,依此类推。

在框1024中,计算设备100基于逻辑列子组内的列号和块地址来确定基地址。基地址标识存储器介质110中的行,该行包括存储器介质110中的物理列0中的所请求的逻辑列号。基地址可以使用算术运算(例如加法、减法和/或模数的组合来确定。作为说明性地,基地址是块地址加上管芯的列宽度减去逻辑列子组内的列号。例如,在说明性实施例中,给定块地址为0,列0可具有基地址0,列1可具有基地址127,列128可具有基地址0,列129可具有基地址127,依此类推。

在框1026中,计算设备100在如上所述选择的分区内,从基地址开始并使用模数限制计数器从存储器介质110对角地读取逻辑列数据。在框1028中,存储器介质100的每个管芯在基地址加上对应的管芯偏移处开始读取数据。单个命令/地址总线可以用于将行地址传送给每个管芯,并且每个管芯可以将预配置的管芯偏移添加到行地址。计算设备100可以在所选分区的多个管芯上并行读取列数据。在框1030中,每个管芯从当前行地址处的当前分片读取列数据(例如,位),以预先配置的模数限制为模,递增用于行地址和列号的内部计数器,并继续在管芯上读取分片。在框1032中,模数限制等于以分片表示的每个管芯的宽度。因此,在说明性实施例中,模数限制是128。因此,计算设备100可以一次通过地(in asingle pass)读取数据集群的任何列,而无需由于模数计数器而重新读取。因此,计算设备100可以为编码长度小于分区宽度(例如,在说明性实施例中为1024位)的集群中的所有列提供最大列读取速度。因为每个单独的行都存储在多个分区中,所以可能会降低单个行的行读取速度。替代地,可以以共同执行的多个行(例如,通过执行多个分区的读取以恢复多个行)读取的延时为代价来维持行读取吞吐量。在读取逻辑列之后,方法1000循环回到框1002以执行其它的存储器访问操作。

现在参考图11,图1100示出了如上结合图10的方法描述的可访问的列数据格式的一个可能的实施例。图1100示出了存储器介质1102,例如图1的存储器介质110和/或存储器介质120。如图所示,说明性存储器介质1102被布置成多个行1104和分片1106(即,列1106)。每个分片1106包含于管芯1108中。作为说明性地,每行1104由包括四个分片1106的四个管芯1108形成,总共16个分片1106。然而,在其它实施例中,每行可包括另一数量的管芯1108和/或分片1106,例如八个管芯,每个管芯128个分片,总共1024个分片。如图所示,存储器介质1102是三维的,因此四个管芯1108包含于分区1110中。存储器介质1102包括四个分区1110,并且每个分区1110包括四个管芯1108。在其它实施例中,存储器介质1102可以包括不同数量的分区1110,例如八个分区。每行1104可通过行地址寻址,而每个分片1106可通过列号寻址。每个管芯包括预先配置的模数限制,其示例性地为四。如上所述,模数限制等于以分片1106表示的每个管芯1108的宽度。

说明性存储器介质1102已在其中存储了数据集群,该数据集群是具有16个逻辑行和16个逻辑列的逻辑矩阵。如图所示,对于每个管芯1108上的列子组中每个后续行,将每一行1104的列1106旋转一个列位置。例如,逻辑行0、逻辑列3存储在行地址0、分片号3;以及逻辑行1、逻辑列3被旋转并存储在行地址1、分片号0;以此类推。另外,每组四行(等于模数限制)存储在不同的管芯1108中。如图所示,行0-3存储在管芯0中,行4-7存储在管芯1中,行8-11存储在管芯3中,以及行12-15存储在管芯4中。此外,每个分区1110存储四个逻辑列的数据(等于每个管芯的宽度)。如图所示,逻辑列0-3存储在分区0中。另外,逻辑列4-7存储在分区1中,逻辑列8-11存储在分区2中,以及逻辑列12-15存储在分区3中。

可以通过单个列读取操作来读取数据集群的每一列。作为说明性示例,图1100将包含于逻辑列2中的数据示出为突出显示单元1112。逻辑列2的说明性的列读取可以在分区0中从行地址2、管芯0中的分片0处开始。使用共享的命令/地址总线和每管芯偏移,可以在行地址6、管芯1中的分片4,行地址10、管芯2中的分片8,以及行地址14、管芯3中的分片12处同时执行读取。在读取当前位之后,每个管芯都会使受制于模数限制的一个或多个内部计数器递增,并且在行地址3、管芯0中的分片1;行地址7、管芯1中的分片5;行地址11,管芯2中的分片9;以及行地址15,管芯3中的分片13处继续列读取。管芯使内部计数器递增,并且由于模数限制为4,所以行计数器回绕。因此,在行地址0、管芯0中的分片2;行地址4、管芯1中的分片6;行地址8、管芯2中的分片10;以及行地址12、管芯3中的分片14处继续列读取。管芯使内部计数器递增,并且在行地址1、管芯0中的分片3;行地址5、管芯1中的分片7;行地址9、管芯2中的分片11;以及行地址13、管芯3中的分片15处继续列读取。

在分区1110中的所有分片上读取数据之后,完成列读取,并且计算设备已从逻辑列1112中读取了所有数据。通过在不同的行地址处开始列读取,计算设备100可以在单个列读取操作中从分区0读取逻辑列0-3中的任何一个。类似地,计算设备100可以在单个列读取操作中从分区1读取逻辑列4-7,从分区2读取逻辑列8-11以及从分区3读取逻辑列12-15中的任何一个。因此,计算设备100可以在单个列读取操作中从数据集群读取任何逻辑列,而无需由于集群边缘或模数限制而进行重新读取。因此,计算设备100可以最大化列读取的吞吐量。

现在参考图12,计算设备100在操作中可以执行用于集群数据访问的方法1200。参照存储器104描述了方法1200。然而,应当理解,可以另外或替代地使用数据存储设备114来执行方法1200。方法1200开始于框1202,其中计算设备100(例如,介质访问电路108)确定是执行读取操作还是写入操作。如果计算设备100确定执行读取操作,则方法1200向前分支到框1212,如下所述。如果计算设备100确定执行写入操作,则方法1200前进到框1204。

在框1204中,计算设备100(例如,介质访问电路108)接收逻辑行写入请求。逻辑行写入请求可以包括行地址和逻辑行数据以存储在存储器104中。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如响应于从主机处理器102接收到的宏命令。

在框1206中,计算设备100旋转逻辑行数据内的每个列子组。每个列子组可以包括等于存储器介质110的管芯中包括的分片的数目的多个列。例如,在实施例中,存储器介质的每个管芯可以包括128个分片(列),并且每个分区可能包括八个管芯。在该实施例中,旋转的行数据可以包括八个列子组,每个列子组具有128列。旋转量可以由行地址确定。作为说明性地,计算设备100针对每个增加的行地址将逻辑行数据向右旋转一列(即,一个分片),以每个管芯的列的宽度为模数。例如,在说明性实施例中,对于每个后续行,列0中的数据向右旋转一列,列127中的数据回绕到列0,列128中的数据向右旋转一列,列255中的数据回绕到列128,依此类推。

在框1208中,计算设备100基于行地址在分区上旋转列子组。计算设备100可以基于列中的每个管芯的宽度来旋转数据的子块。例如,在说明性实施例中,块的行0-127的列子组不旋转。继续该示例,行128-255的列子组向右旋转一个管芯(例如128列)。因此,逻辑列子组0-127存储在分片128-255中,逻辑列子组128-255存储在分片256-383中,依此类推。

在框1210中,计算设备100将旋转的行数据存储在行地址。每行存储在存储器介质110的单个分区中,因此整个旋转行可以在单个行写入操作中存储。在写入数据之后,方法1200循环回到框1202以执行额外的存储器访问操作。

返回参考框1202,如果计算设备100执行读取操作,则方法1200分支到框1212,其中计算设备100确定是执行列读取操作还是行读取操作。如果计算设备100确定执行列读取,则方法1200分支到框1220,如下所述。如果计算设备100确定执行行读取,则方法1200前进到框1214。

在框1214中,计算设备100(例如,介质访问电路108)接收逻辑行读取请求。逻辑行读取请求可以包括标识存储在存储器104中的逻辑行数据的行地址。逻辑行数据可以是集群中包括的一行数据。例如,介质访问电路108可以从存储器控制器106接收源自主机处理器102的存储器访问请求。在一些实施例中,存储器访问可以由存储器控制器106的向量功能单元130生成,例如响应于从主机处理器102接收到的宏命令。

在框1216中,计算设备100在存储器介质110中的行地址处读取旋转的行数据。如以上结合框1206、1208所述,旋转的行数据以旋转格式存储在存储器介质110中。在框1218中,计算设备100解旋在存储器介质110的分区上的子组旋转数据,然后解旋每个逻辑列子组。计算设备100可以执行与当行数据被存储在存储器介质110中时执行的旋转相反的旋转。因此,通过解旋数据,计算设备100恢复原始的逻辑行数据。如上所述,数据子块的旋转可以基于列中的每个管芯的宽度。例如,在说明性实施例中,块的行0-127的列子组不旋转,行128-255的列子组向左旋转一个管芯(例如128列),等等。继续该示例,每个逻辑列子组内的旋转量可以由行地址确定。作为说明性地,计算设备100针对每个增加的行地址将逻辑行数据向左旋转一列(即,一个分片),以每个管芯的列的宽度为模数。例如,在说明性实施例中,对于每个随后的行,列0中的数据回绕到列127,列127中的数据向左旋转一列,列128中的数据回绕到列255,列255中的数据向左旋转一列,依此类推。在读取数据之后,方法1200循环回到框1202以执行额外的存储器访问操作。

返回参考框1212,如果计算设备100确定执行列读取操作,则方法1200分支到框1220,其中计算设备(例如,介质访问电路108)接收逻辑列读取请求。列读取请求标识块地址和逻辑列号。块地址可以是包括集群的起始行和/或列的行地址(例如,行0)。

在框1222中,计算设备100基于块地址、列号和模数限制来确定基地址。基地址标识存储器介质110中的行,该行包括在存储器介质110中的物理列0中的所请求的逻辑列号。基地址可以使用算术运算(例如加法、减法和/或模数)来确定。

在框1224中,计算设备100从基地址开始并使用模数限制计数器从存储器介质110对角地读取逻辑列数据。在框1226中,存储器介质100的每个管芯在基地址加上对应的管芯偏移处开始读取数据。单个命令/地址总线可以用于将行地址传送给每个管芯,并且每个管芯可以将预配置的管芯偏移添加到行地址。计算设备100可以在所选分区的多个管芯上并行读取列数据。在框1228中,每个管芯从当前行地址处的当前分片读取列数据(例如,位),以预配置的模数限制为模数,使行地址和列地址的内部计数器递增,并继续读取管芯上的分片。在框1230中,模数限制等于以分片表示的每个管芯的宽度。因此,在说明性实施例中,模数限制为128。

在框1232中,计算设备100确定逻辑列号是否小于模数限制(例如128)。如果是,则列读取完成并且方法1200循环回到框1202以执行额外的存储器访问操作。因此,计算设备100可以一次通过地读取数据集群的某些列(例如,说明性实施例中的列0-127),而无需由于集群边缘或模数计数器而重新读取。因此,计算设备100可以为集群中的某些列提供最大列读取速度,同时如上所述保持行读取/写入速度。

返回参考框1232,如果逻辑列号不小于模数限制,则方法1200前进到框1234,其中计算设备100基于块地址和逻辑列号来确定额外基地址。额外基地址标识存储器介质110中的另一行,该另一行包括存储器介质110中的物理列0中的所请求的逻辑列号。例如,该额外基地址可以包含于紧接在所请求的块地址之前的列读取块中。在说明性实施例中,额外基地址可以比上面结合框1222确定的基地址小1024。在框1236中,计算设备100从基地址开始并使用模数限制计数器从存储器介质110对角地读取额外逻辑列数据。在框1224中读取的逻辑列数据和在框1236中读取的额外逻辑列数据可以被组装以形成所请求的逻辑列。因此,计算设备100可以在两次读取操作中读取数据集群的某些列(例如,说明性实施例中的列128-1023),而无需由于模数计数器而导致额外的重新读取。因此,计算设备100可以为集群中的某些列提供改进的列读取速度,同时保留整个集群的行读取/写入速度。在读取逻辑列之后,方法1200循环回到框1202以执行额外的存储器访问操作。

现在参考图13,图1300示出了如上所述结合图12的方法来访问的列数据格式的一个可能的实施例。图1300示出了存储器介质1302,例如图1的存储器介质110和/或存储器介质120。如图所示,说明性存储器介质1302被布置成多个行1304和分片1306(即,列1306)。每个分片1306包含于管芯1308中。作为说明性地,每行1304由包括四个分片1306的四个管芯1308形成,总共16个分片1306。然而,在其它实施例中,每行可包括另一数量的管芯1308和/或分片1306,例如八个管芯,每个管芯128个分片,总共1024个分片。说明性的存储器介质1302包括单个分区1310;在其它实施例中,存储器介质1302可以包括不同数量的分区1310,例如八个分区。每行1304可通过行地址寻址,而每个分片1306可通过列号寻址。每个管芯包括预先配置的模数限制,作为说明性地,模数限制为四。如上所述,模数限制等于以分片1306表示的每个管芯1308的宽度。

说明性存储器介质1302在其中存储了数据集群,该数据集群是具有16个逻辑行和16个逻辑列的逻辑矩阵。如图所示,针对每个管芯1308上的列子组中的每个后续行,将每行1304的列1306旋转一个列位置。例如,逻辑行0、逻辑列3存储在行地址0、分片号3中;以及逻辑行1、逻辑列3被旋转并存储在行地址1、分片号0中;以此类推。另外,在分区1310上旋转列子组。例如,将包括逻辑行4-7和逻辑列0-3的子块旋转到分片4-7,包括逻辑行8-11和逻辑列0-3的子块旋转到分片8-11,依此类推。

可以通过不超过两个列读取操作来读取数据集群的每一列。作为说明性示例,图1300将包含于逻辑列2中的数据示出为突出显示单元1312。对逻辑列2的说明性的列读取可以从行地址2、管芯0中的分片0开始。使用共享的命令/地址总线和每管芯偏移,可以在行地址6、管芯1中的分片4,行地址10、管芯2中的分片8,以及行地址14、管芯3中的分片12处同时执行读取。在读取当前位之后,每个管芯都会使受制于模数限制的一个或多个内部计数器递增,并且在行地址3、管芯0中的分片1;行地址7、管芯7中的分片5;行地址11、管芯2中的分片9;以及行地址15、管芯3中的分片13处继续列读取。管芯使内部计数器递增,并且由于模数限制为4,所以行计数器回绕。因此,在行地址0、管芯0中的分片2;行地址4、管芯1中的分片6;行地址8、管芯2中的分片10;以及行地址12、管芯3中的分片14处继续列读取。管芯递增内部计数器,并且在行地址1、管芯0中分片3;行地址5、管芯1中分片7;行地址9、管芯2中分片11;以及行地址13、管芯3中分片15处继续列读取。在读取分区1310中的所有分片上数据之后,列读取完成,并且计算设备已一次通过地从逻辑列1312读取了所有数据。计算设备100可以类似地一次通过地从逻辑列0-3(小于模数限制)中的任何一列读取数据。

作为另一示例,图1300将逻辑列8中包括的数据示出为突出显示单元1314。逻辑列8的说明性列读取可以在行地址8、管芯0中分片0处开始。使用共享的命令/地址总线和每管芯偏移,可以在行地址12、管芯1中分片4,行地址16、管芯2中分片8,以及行地址20、管芯3中分片12上同时执行读取。然而,行地址16和20延伸超过数据集群的末尾,并因此可被计算设备100丢弃。在读取当前位之后,每个管芯都会使受制于模数限制的一个或多个内部计数器递增,并且在行地址9、管芯0中分片1;以及行地址13、管芯1中分片5处继续列读取。管芯递增内部计数器,并且在行地址10、管芯0中分片2;以及行地址14、管芯1中分片6处继续列读取。管芯将内部计数器递增额外一次,并且在行地址11、管芯0中分片3;以及行地址15、管芯1中分片7处继续列读取。计算设备100在管芯0中图13所示的块之前在行地址8位置处(例如,地址为-8)开始执行额外的列读取。使用共享的命令/地址总线和每管芯偏移,可以在行地址-4、管芯1中分片4,行地址0、管芯2中分片8,以及行地址4、管芯3中分片12处同时执行读取。与以上讨论的列读取类似,行地址-8和-4延伸超过数据集群的开始,因此可以被计算设备100丢弃。在读取当前位之后,每个管芯使受制于模数限制的一个或多个内部计数器递增,并且在行地址1、管芯2中分片9;以及行地址5,管芯3中分片13处继续列读取。管芯递增内部计数器,并且在行地址2、管芯2中分片10;以及行地址6、管芯3中分片14处继续列读取。管芯将内部计数器递增额外一次,并且在行地址3、管芯2中分片11;以及行地址7、管芯3中分片15处继续列读取。在执行第二列读取操作之后,计算设备已经在二次读取操作中从逻辑列1314读取了所有数据。计算设备100可以类似地分二次通过地从逻辑列4-15中的任何一列(大于或等于模数限制)读取数据。因此,计算设备100可以通过在保持行读取/写入性能的同时基于模计数器避免重新读取来提供改进的列读取性能。

示例

下面提供本文公开的技术的说明性示例。技术的实施例可以包括以下描述的示例中的任何一个或多个以及它们的任意组合。

示例1包括一种设备,包括:列可寻址存储器;以及连接到存储器的电路,其中该电路用于:以基于列的格式将逻辑矩阵的数据集群存储在列可寻址存储器中;以及以列读取操作从列可寻址存储器中读取数据集群的逻辑列,其中列读取操作基于块地址和列号。

示例2包括示例1的主题,并且其中,读取逻辑列包括:根据块地址和列号来确定基地址;以及从基地址开始从列可寻址存储器中对角地读取逻辑列数据,其中,读取逻辑列数据包括从数据集群和从数据集群的复制副本中读取。

示例3包括示例1和2中任一项的主题,并且其中,所述电路还丢弃来自未包含于数据集群或数据集群的复制副本中的行地址的数据。

示例4包括示例1-3中任一项的主题,并且其中,存储数据集群包括:将数据集群存储在列可寻址存储器的第一行地址处;以及将数据集群的复制副本存储在列可寻址存储器中的第二行地址处,其中第一行地址和第二行地址被预定的行偏移隔开。

示例5包括示例1-4中任一项的主题,并且其中,所述电路还在列可寻址存储器的分区上旋转数据集群的每一行,其中存储数据集群包括响应于数据集群的每一行的旋转来存储数据集群。

示例6包括示例1-5中任一项的主题,并且其中,所述预定行偏移包括列可寻址存储器的分区的列宽。

示例7包括示例1-6中任一项的主题,并且其中,读取逻辑列包括:读取数据集群的多个互补逻辑列;以及响应于读取多个互补逻辑列而组装逻辑列。

示例8包括示例1-7中任一项的主题,并且其中,读取多个互补逻辑列包括:对每个互补逻辑列执行列读取操作,其中每个列读取操作具有不同的起始地址。

示例9包括示例1-8中任一项的主题,并且其中,组装逻辑列包括基于多个互补逻辑列来组装多位逻辑列。

示例10包括示例1-9中任一项的主题,并且其中,存储数据集群包括:在列可寻址存储器的分区上旋转数据集群的每个逻辑行以生成旋转行,其中分区包括列可寻址存储器的多个管芯,其中每个管芯包括预定数量的列,并且其中每个管芯被编程有预定的行偏移;以及在分区中的行地址处存储每个旋转行,其中分区的每个管芯将相关联的预定行偏移添加到行地址。

示例11包括示例1-10中任一项的主题,并且其中,读取逻辑列包括:根据列号选择列可寻址存储器的第一分区,其中列可寻址存储器包括多个分区,其中每个分区包括列可寻址存储器的多个管芯,并且其中每个管芯包括预定数量的列;根据列号和列可寻址存储器的模数限制来确定基地址;以及从第一分区的基地址开始,从列可寻址存储器对角地读取逻辑列数据。

示例12包括示例1-11中任一项的主题,并且其中,模数限制包括预定数量的列。

示例13包括示例1-12中任一项的主题,并且其中,从基地址开始从列可寻址存储器对角地读取逻辑列数据包括:对于第一分区的每个管芯,在基地址加上与对应管芯相关联的管芯偏移处读取列;以及递增受制于模数限制的内部地址计数器。

示例14包括示例1-13中任一项的主题,并且其中,存储数据集群包括:在每个逻辑行内旋转逻辑列的每个子组,其中逻辑列的每个子组包括预定数量的列;基于每个逻辑行的行地址,来确定多个管芯的管芯号;以及将每个逻辑行的逻辑列的每个子组存储在管芯中,该管芯具有针对基于逻辑列的子组的逻辑列号选择的多个分区中的分区内的逻辑行确定的管芯号。

示例15包括示例1-14中任一项的主题,并且其中,读取逻辑列包括:根据列号和列可寻址存储器的模数限制来确定基地址,其中列可寻址存储器包括多个管芯,其中每个管芯包括预定数量的列,并且其中模数限制包括列的预定数量;以及使用模数限制,从基地址开始从列可寻址存储器对角地读取逻辑列数据。

示例16包括示例1-15中任一项的主题,并且其中,读取逻辑列还包括:确定列号是否小于模数限制;响应于确定列号不小于模数限制,根据列号和模数限制来确定额外的基地址;以及使用模数限制,从额外基地址开始,从列可寻址存储器对角地读取逻辑列数据。

示例17包括示例1-16中任一项的主题,并且其中,读取逻辑列还包括:响应于从基地址开始对角地读取逻辑列数据,并且响应于从额外基地址开始对角地读取逻辑列数据,来组装逻辑列。

示例18包括示例1-17中任一项的主题,并且其中,存储数据集群包括:在每个逻辑行内旋转逻辑列的每个子组,其中逻辑列的每个子组包括预定数量的列;响应于每个子组的旋转,在列可寻址存储器的分区上旋转每个逻辑行的逻辑列的子组,其中分区包括多个管芯;以及响应于逻辑列的子组的旋转,来存储每个逻辑行。

示例19包括一种方法,包括:通过计算设备以基于列的格式将逻辑矩阵的数据集群存储在列可寻址存储器中;以及通过计算设备以列读取操作从列可寻址存储器中读取数据集群的逻辑列,其中列读取操作基于块地址和列号。

示例20包括示例19的主题,并且其中,读取逻辑列包括:根据块地址和列号来确定基地址;以及从基地址开始从列可寻址存储器中对角地读取逻辑列数据,其中,读取逻辑列数据包括从数据集群和从数据集群的复制副本中读取。

示例21包括示例19和20中任一项的主题,还包括:丢弃来自未包含于数据集群或数据集群的复制副本中的行地址的数据。

示例22包括示例19-21中任一项的主题,并且其中,存储数据集群包括:将数据集群存储在列可寻址存储器的第一行地址处;以及将数据集群的复制副本存储在列可寻址存储器中的第二行地址处,其中第一行地址和第二行地址被预定的行偏移隔开。

示例23包括示例19-22中任一项的主题,还包括:在列可寻址存储器的分区上旋转数据集群的每一行,其中存储数据集群包括响应于旋转数据集群的每一行来存储数据集群。

示例24包括示例19-23中任一项的主题,并且其中,所述预定行偏移包括列可寻址存储器的分区的列宽。

示例25包括示例19-24中任一项的主题,并且其中,读取逻辑列包括:读取数据集群的多个互补逻辑列;以及响应于读取多个互补逻辑列而组装逻辑列。

示例26包括示例19-25中任一项的主题,并且其中,读取多个互补逻辑列包括:对每个互补逻辑列执行列读取操作,其中每个列读取操作具有不同的起始地址。

示例27包括示例19-26中任一项的主题,并且其中,组装逻辑列包括基于多个互补逻辑列来组装多位逻辑列。

示例28包括示例19-27中任一项的主题,并且其中,存储数据集群包括:在列可寻址存储器的分区上旋转数据集群的每个逻辑行以生成旋转行,其中分区包括列可寻址存储器的多个管芯,其中每个管芯包括预定数量的列,并且其中每个管芯被编程有预定的行偏移;以及在分区中的行地址处存储每个旋转行,其中分区的每个管芯将相关联的预定行偏移添加到行地址。

示例29包括示例19-28中任一项的主题,并且其中,读取逻辑列包括:根据列号选择列可寻址存储器的第一分区,其中列可寻址存储器包括多个分区,其中每个分区包括列可寻址存储器的多个管芯,并且其中每个管芯包括预定数量的列;根据列号和列可寻址存储器的模数限制来确定基地址;以及从第一分区的基地址开始,从列可寻址存储器对角地读取逻辑列数据。

示例30包括示例19-29中任一项的主题,并且其中,模数限制包括列的预定数量。

示例31包括示例19-30中任一项的主题,并且其中,从基地址开始从列可寻址存储器对角地读取逻辑列数据包括:对于第一分区的每个管芯,在基地址加上与对应管芯相关联的管芯偏移处读取列;以及递增受制于模数限制的内部地址计数器。

示例32包括示例19-31中任一项的主题,并且其中,存储数据集群包括:在每个逻辑行内旋转逻辑列的每个子组,其中逻辑列的每个子组包括预定数量的列;基于每个逻辑行的行地址,确定多个管芯的管芯号;以及将每个逻辑行的逻辑列的每个子组存储在管芯中,该管芯具有针对基于逻辑列的子组的逻辑列号选择的多个分区中的分区内的逻辑行而确定的管芯号。

示例33包括示例19-32中任一项的主题,并且其中,读取逻辑列包括:根据列号和列可寻址存储器的模数限制来确定基地址,其中列可寻址存储器包括多个管芯,其中每个管芯包括预定数量的列,并且其中模数限制包括列的预定数量;以及使用模数限制,从基地址开始从列可寻址存储器对角地读取逻辑列数据。

示例34包括示例19-33中任一项的主题,并且其中,读取逻辑列还包括:确定列号是否小于模数限制;响应于确定列号不小于模数限制,根据列号和模数限制来确定额外的基地址;以及使用模数限制,从额外基地址开始,从列可寻址存储器对角地读取逻辑列数据。

示例35包括示例19-34中任一项的主题,并且其中,读取逻辑列还包括:响应于从基地址开始对角地读取逻辑列数据,并且响应于从额外基地址开始对角地读取逻辑列数据,来组装逻辑列。

示例36包括示例19-35中任一项的主题,并且其中,存储数据集群包括:在每个逻辑行内旋转逻辑列的每个子组,其中逻辑列的每个子组包括预定数量的列;响应于旋转每个子组,在列可寻址存储器的分区上旋转每个逻辑行的逻辑列的子组,其中分区包括多个管芯;以及响应于旋转逻辑列的子组,存储每个逻辑行。

示例37包括一种系统,包括:处理器;列可寻址存储器;以及连接到存储器的电路,其中该电路用于:以基于列的格式将逻辑矩阵的数据集群存储在列可寻址存储器中;以及以列读取操作从列可寻址存储器中读取数据集群的逻辑列,其中列读取操作基于块地址和列号。

示例38包括示例37的主题,并且其中,所述电路在数据存储设备中。

示例39包括示例37和38中任一项的主题,并且其中,所述电路在存储器设备中。

示例40包括示例37-39中任一项的主题,并且其中,读取逻辑列包括:读取数据集群的多个互补逻辑列;以及响应于读取多个互补逻辑列而组装逻辑列。

示例41包括示例37-40中任一项的主题,并且其中,读取逻辑列包括:根据列号选择列可寻址存储器的第一分区,其中列可寻址存储器包括多个分区,其中每个分区包括列可寻址存储器的多个管芯,并且其中每个管芯包括预定数量的列;根据列号和列可寻址存储器的模数限制来确定基地址;以及从第一分区的基地址开始,从列可寻址存储器对角地读取逻辑列数据。

示例42包括示例37-41中任一项的主题,并且其中,读取逻辑列包括:根据列号和列可寻址存储器的模数限制来确定基地址,其中列可寻址存储器包括多个管芯,其中每个管芯包括预定数量的列,并且其中模数限制包括列的预定数量;以及使用模数限制,从基地址开始从列可寻址存储器对角地读取逻辑列数据。

示例43包括示例37-42中任一项的主题,并且其中,存储数据集群包括:在每个逻辑行内旋转逻辑列的每个子组,其中逻辑列的每个子组包括预定数量的列;响应于旋转每个子组,在列可寻址存储器的分区上旋转每个逻辑行的逻辑列的子组,其中分区包括多个管芯;以及响应于逻辑列的子组的旋转,来存储每个逻辑行。

36页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:存储器系统及其存储器访问接口装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类