CN113495851A - 分配存储空间的***和方法、架构及存储介质 - Google Patents
分配存储空间的***和方法、架构及存储介质 Download PDFInfo
- Publication number
- CN113495851A CN113495851A CN202110370700.XA CN202110370700A CN113495851A CN 113495851 A CN113495851 A CN 113495851A CN 202110370700 A CN202110370700 A CN 202110370700A CN 113495851 A CN113495851 A CN 113495851A
- Authority
- CN
- China
- Prior art keywords
- data
- data elements
- memory
- storage device
- storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开提供一种分配存储空间的***和方法、架构及存储介质。本公开的实施方式提供用于在存储设备中分配存储空间的***和方法。所述***可以包括:存储设备,该存储设备用于提供存储空间;以及编译器部件,该编译器部件被配置为:接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
Description
技术领域
本公开涉及一种用于分配存储空间的存储***、一种用于在存储设备中分配存储空间的方法、一种用于分配存储空间的***、一种在存储器内实现处理的架构以及一种非暂时性计算机可读存储介质。
背景技术
存储设备(例如,动态随机存取存储器(DRAM))提供可以由外部设备(例如,计算机处理器或输入/输出(I/O)设备)访问的临时存储空间。对存储设备的访问可以包括对存储设备的写或读。为了访问存储设备,必须在存储设备中分配用于数据阵列(data array)的存储空间。在分配期间,数据阵列中的数据元素的逻辑地址可以映射到存储设备的设备地址。
常规地,逻辑地址与设备地址之间的映射关系是在存储设备的存储器控制器内构造的。因此,编译器(compiler)无法访问映射关系,更不用说更改了。另外,这在存储设备内需要很大的搜索空间。由于对存储设备的存储器访问是随机进行的,因此很大的搜索空间可能会进一步增大所有存储器访问中未命中访问的未命中率。
发明内容
本公开的实施方式提供了一种用于分配存储空间的存储***。所述存储***可以包括:存储设备,所述存储设备用于提供所述存储空间;以及编译器部件,所述编译器部件被配置为:接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
本公开的实施方式还提供了一种用于在存储设备中分配存储空间的方法。所述方法可以包括以下步骤:接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
本公开的实施方式还提供了一种用于分配存储空间的***。所述***可以包括:存储器,所述存储器存储有指令集;以及一个或更多个处理器,所述一个或更多个处理器被配置为执行所述指令集以使所述***执行以下操作:接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
本公开的实施方式还提供了一种在存储器内实现处理的架构。所述在存储器内实现处理的架构可以包括:第一部分,所述第一部分存储有指令集;以及第二部分,所述第二部分被配置为执行所述指令集以使所述架构执行以下操作:接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
本公开的实施方式还提供了一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质存储有指令集,所述指令集可由存储***的一个或更多个处理器执行,以使所述存储***执行用于在所述存储***的存储设备中分配存储空间的方法。所述方法可以包括以下步骤:接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
应当理解,前面的总体描述和下面的详细描述都仅仅是示例性和解释性的,并且不限制所要求保护的公开实施方式。
附图说明
在下面的详细描述和附图中例示了本公开的实施方式和各个方面。附图中所示的各种特征未按比例绘制。
图1例示了根据本公开的一些实施方式的示例性存储***。
图2例示了根据本公开的一些实施方式的将数据组映射到存储体的示例的示意图。
图3A例示了根据本公开的一些实施方式的将数据组打包在可用行中的示例的示意图。
图3B例示了根据本公开的一些实施方式的将数据组分布(distribute)在可用行中的示例的示意图。
图4例示了根据本公开的一些实施方式的另一示例性存储***。
图5例示了根据本公开的一些实施方式的用于在存储设备中分配存储空间的示例性方法。
图6A例示了根据本公开的一些实施方式的用于将数据组打包到存储设备的存储体的可用行的示例性方法的流程图。
图6B例示了根据本公开的一些实施方式的用于将数据组分布到存储设备的存储体的可用行的示例性方法的流程图。
图7例示了根据本公开的一些实施方式的用于调整用于在存储设备中分配存储空间的参数的示例性方法的流程图。
图8例示了根据本公开的一些实施方式的示例性PIM架构的示意图。
具体实施方式
现在将详细参照示例性实施方式,在附图中例示了所述示例性实施方式的示例。以下描述参照附图,在附图中,除非另外表示,否则不同附图中的相同附图标记表示相同或相似元素。在示例性实施方式的以下描述中阐述的实现方式并不表示所有实现方式。相反,它们仅是与关于所附权利要求书中所述的所公开实施方式的方面一致的装置和方法的示例。
为了解决由逻辑地址与设备地址之间的不可更改的映射关系以及增大的未命中率引起的上述问题,本公开的实施方式提供了一种用于在存储设备中分配存储空间的方法和存储***。根据本公开的一些实施方式,存储***的编译器可以将用于在存储设备中分配存储空间的请求编译成指令、生成存储设备中的存储空间的设备地址并将指令和设备地址发送给存储设备以供执行。结果,编译器可以访问设备地址,并且编译器可以在执行期间对设备地址和指令进行调节,以优化存储设备的性能。例如,由于编译器可以知道设备地址,因此可以在存储器操作期间减小搜索空间和未命中率。此外,可以在编译器中提供调整器(tuner),并且可以在多个调整参数集下评估性能度量,以确定用于分配存储空间的最佳参数。调整器还可以通过将硬件配置确定为调整参数的一部分来辅助硬件的设计。
图1例示了根据本公开的一些实施方式的示例性存储***100。如图1所示,存储***100可以包括存储器控制器101以及以通信的方式与存储器控制器101联接的存储设备102。
存储器控制器101可以是用于生成用于存储设备102的执行的存储器命令的计算处理器。在一些实施方式中,存储器控制器101可以包括命令调度器,该命令调度器用于根据从编译器接收到的指令来调度存储器命令。
存储设备102可以是DRAM设备,并且可以提供用于存储数据和指令的存储空间。指令可以是访问存储在存储设备102中的数据的计算程序的一部分。存储设备102可以包括多个存储体(例如,存储体102a、102b、…和102n),各个存储体具有用于存储数据的多个行,取决于数据元素的大小,存储体的各个行可以存储一个或更多个数据元素。
存储***100可以进一步包括编译器103。编译器103可以在处理单元上运行。处理单元可以是外部处理单元(例如,主机CPU)或存储***100的部件。编译器103可以将计算程序(例如,机器学习程序)编译成指令集(诸如“读”指令、“写”指令、“复制”指令、“分配”指令等)。应理解,“复制”指令可以包括“读”指令和“写”指令,这两者都可以与用于在存储设备102中分配存储空间的请求相关联。“分配”指令本身可以是在存储设备102中分配存储空间的请求。作为示例,指令可以是用于在存储设备102中分配数据阵列(例如,阵列[])的“分配”指令(例如“分配内存(malloc)”)。所分配的存储空间可以用于读或写存储设备102。在读存储设备102时,可以使用所分配的存储空间来存储根据“读”指令从存储设备102读取的数据。在写存储设备102时,可以使用所分配的存储空间来保存根据“写”指令被写入到存储设备102中的数据。
所生成的指令(例如,“写”指令、“复制”指令、“分配”指令)然后可以由存储器控制器101处理。存储器控制器101可以包括处理流水线104、指令缓冲部106、执行管理单元108和存储器管理单元(MMU)110。各个单元和缓冲部可以包括基于例如金属氧化物半导体场效应晶体管(MOSFET)构造的组合和时序逻辑电路集。执行管理单元108可以控制和管理通过处理流水线104执行指令。例如,在执行管理单元108接收到(例如,来自操作***的)执行计算程序的指示(该指示包括例如分配存储空间的请求)之后,执行管理单元108可以创建计算过程,该计算过程可以提供通过处理流水线104执行计算程序的状态的指示。在创建计算过程之后,执行管理单元108可以将计算程序从辅助存储设备(例如,硬盘驱动器)加载到存储设备102,并控制指令缓冲部106从存储设备102获取与该计算程序相关联的指令集。
可以根据在计算程序中反映的顺序来存储和执行指令集。例如,如图1所示,指令缓冲部106包括缓冲部头指针和缓冲部尾指针。在执行管理单元108的控制下,指令缓冲部106可以将存储在与缓冲部头指针相关联的缓冲部位置处的指令取出(fetch)给处理流水线104,以供执行。当执行指令时,处理流水线104可以访问存储设备102,以根据指令来发送或接收数据。在取出指令之后,指令缓冲部106可以从缓冲部移除指令,并且将缓冲部头指针移动至下一缓冲部位置,以取出下一指令,以供执行。
执行管理单元108可以基于各种准则来控制指令缓冲部106对指令的取出。例如,执行管理单元108可以确定指令是否引起异常。当指令的执行可能导致计算机处理器的反常或异常操作状况时,可能发生异常。作为例示性示例,计算程序的“分配”指令可以使存储器控制器101访问存储设备102内的不存在的存储器位置,或者存储器控制器101没有访问许可的存储器位置。
MMU 110为不同计算过程分配并管理存储空间。在执行管理单元108创建用于执行计算程序的计算过程之后,MMU 110可以在存储设备102中指派设备存储器位置集,各个存储器位置与设备地址相关联。MMU 110还可以创建虚拟存储空间并将该虚拟存储空间作为物理存储器位置集的别名提供给计算过程。虚拟存储空间可以包括页面集,该页面集中的各个页面可以包括蔓延(contagious)虚拟存储器位置集。各个虚拟存储器位置可以与虚拟存储器地址相关联并且可以映射到由MMU 110指派的设备存储器位置。页面通常包括4096个字节的存储空间。通常,数据阵列可以包括多个数据元素,诸如阵列[0]、阵列[1]、阵列[2]、…、和阵列[8]。应理解,数据阵列可以是一行数据或数据矩阵。换句话说,数据元素可以包括一位数据或一行数据。多个数据元素中的各个数据元素可以具有逻辑地址。从正在执行的计算程序的角度来看,逻辑地址是数据元素似乎驻留的地址。例如,逻辑地址可以包括段地址和偏移。更具体地,例如,阵列[8]的逻辑地址可以包括阵列[]的段地址和偏移“8”。
除了在存储器控制器101的端部管理指令之外,编译器103还可以在将所生成的指令发送到存储器控制器101之前对所生成的指令进行处理。
在一些实施方式中,编译器103可以对指令执行特殊处理(例如,改变计算程序的执行的正常流程、将另一指令***到指令队列中等)。例如,编译器103可以确定改变指令的执行流程(例如,跳过“分配”指令、终止计算程序的执行等)。更具体地,如果指令对某些计算资源具有数据依赖性,则编译器103还可以对指令的执行进行重新排序。可以将后续指令排序到计算资源可用的执行顺序的位置。例如,指令“$R3=dst[5]+1”需要存储在标记为“dst”的存储器位置中的数据,并且该数据还可以通过先前的“复制”指令而被修改。基于对这种数据依赖性的确定,编译器103可以暂停(withhold)执行指令“$R3=dst[5]+1”,直到先前的“复制”指令的执行完成为止,而不具有数据依赖性的另一指令可以***到指令“$R3=dst[5]+1”之前的执行顺序中。可以基于计算资源、存储设备102的存储体冲突等来确定指令的调度。
除了生成指令之外,编译器103还可以基于逻辑地址来生成多个数据元素在存储设备102中的设备地址。设备地址可以反映数据元素位于存储设备102中的实际地址。例如,参照图1,阵列[0]和阵列[7]的设备地址可以反映阵列[0]存储在存储体102a的第二行,而阵列[7]存储在存储体102b的第五行。尽管存储体102a的第二行和存储体102b的第五行被例示为仅具有阵列[0]和阵列[7],但是存储体102a的第二行和存储体102b的第五行可以保存其它数据元素。应理解,可以将具有连续的逻辑地址的元素分配给非连续设备地址。因为存储设备102中数据元素的分配可以影响这些数据元素的访问速度,所以可以通过改善逻辑地址到设备地址的映射来改善存储设备102的等待时间。
为了生成设备地址,编译器103可以基于逻辑地址来生成多个数据元素的物理地址,然后基于该物理地址来生成设备地址。在一些实施方式中,数据元素的物理地址与其对应逻辑地址具有线性映射关系。因此,可以通过查找表来生成数据元素的物理地址,该查找表存储逻辑地址与物理地址之间的映射。
在计算程序的执行期间,可能无法连续访问连续的逻辑地址。例如,在计算程序的执行期间,计算程序可以以阵列[4]、阵列[0]、阵列[5]、阵列[8]、阵列[2]、阵列[3]、阵列[6]、阵列[1]和阵列[7]的顺序访问阵列[]。在执行期间被访问的这些数据元素的顺序{4,0,5,8,2,3,6,1,7}可以称为访问轨迹。
为了确定访问轨迹,可以首先将为阵列[]分配存储空间的请求转换为与多个数据元素相关联的一个或更多个循环。例如,用于访问10×10数据元素的数据矩阵的请求可以转换为25个循环,各个循环在两层中迭代4次。因此,各个循环可以访问2×2数据元素块。然后,可以确定一个或更多个循环的循环轨迹。例如,编译器103可以确定第一循环访问第一2×2数据元素块,第二循环访问第二2×2数据元素块,依此类推。可以组合一个或更多个循环的访问信息以形成循环轨迹。因此,循环轨迹可以反映要基于循环被访问的数据元素的顺序。因此,可以基于循环轨迹来确定多个数据元素的逻辑地址的访问轨迹。
通过将被连续访问的数据元素分配在具有连续设备地址的同一存储体中,可以改善存储设备102的等待时间和未命中率。因此,编译器103可以基于计算程序来确定多个数据元素的逻辑地址的访问轨迹,并将多个数据元素分组为多个数据组。访问轨迹可以反映要在计算程序的执行期间连续访问的数据元素的顺序。
图2例示了根据本公开的一些实施方式的将数据组分别映射到存储体的示意图。
如图2所示,例如,可以根据数据元素的逻辑地址的访问轨迹,将具有顺序为{0,1,2,3,4,5,6,7,8}的阵列[0]、阵列[1]、阵列[2]、…、和阵列[8]的数据元素的数据阵列202重新排序为顺序为{4,5,0,8,2,3,6,1,7}的经重新排序的数据阵列204。应理解,数据阵列202的阵列元素(例如,阵列[0])也可以是阵列。在那种情况下,数据阵列202可以是数据矩阵。
然后,可以将经重新排序的数据阵列204分组为多个数据组(例如,三个组206a、206b和206c)。在一些实施方式中,可以基于存储设备102中存储体的行长度来确定数据组的长度。例如,数据组的长度可以等于存储设备102中的存储体的行长度。因此,如图2所示,数据组206a和206b中的每一者具有四个数据元素的长度,该长度也是存储体的行长度。应理解,可以填充分组数据阵列的其余部分(例如,阵列[7])来形成数据组,以满足长度要求。例如,数据组206c仅具有一个数据元素并填充有三个空元素,以满足四元素长度要求。
多个数据组(例如,数据组206a、206b和206c)可以进一步映射到存储设备102的存储体102a和102b的可用行,并且可用行的设备地址可以被确定为多个数据元素在存储设备102中的设备地址。在映射多个数据组时,本公开的一些实施方式提供了将数据组打包在可用行中的方法和将数据组分布在可用行中的方法。在一些实施方式中,数据阵列202和多个数据组可以与用于指示用于映射多个数据组的方法的变量相关联。应理解,数据阵列202和多个数据组也可以与其它一个或更多个变量相关联。例如,数据阵列202和多个数据组还可以与用于指示数据阵列202在要被处理的多个数据阵列中的位置的另一参数相关联。
图3A例示了根据本公开的一些实施方式的将数据组打包在可用行中的示意图。当用于指示用于映射多个数据组的方法的变量满足给定条件时,编译器103可以将数据组打包在可用行中。例如,当变量等于“0”时,可以通知编译器103将数据组打包在存储体的可用行中。
应理解,在打包之前,存储设备的存储体的一些行可能已被占用。因此,在打包数据组时,编译器103可以确定存储设备102的存储体(例如,存储体102a和102b)的可用空间,这可以通过各个存储体中的可用行的数量来测量。可用空间也可以称为空闲度(spaciousness)。在图3A中,存储体的已用行用斜线块指示。然后,编译器103可以基于存储体的可用空间的用于接收数据组的降序来对存储设备102的存储体进行排序。例如,如图3A所示,存储体102a具有从第二行开始的两个可用行,并且存储体102b具有一个可用行(即,第五行)。因此,基于存储体102a和102b的可用空间,可以确定用于接收数据组206a至206c的降序。
然后,编译器103可以根据降序来将多个数据组206a至206c顺序地打包到存储体102a和102b的可用行。例如,如图3A所示,在302,数据组206a可以映射到最空闲的存储体中的第一可用行,该第一可用行是图3A中的存储体102a的第二行。在304,数据组206b可以顺序地映射到下一可用行(例如,图3A中的存储体102a的第三行)。在最空闲的存储体102a的可用行完全填充有数据组之后,可以将数据组进一步映射到第二最空闲的存储体102b的可用行。例如,在306,数据组206c可以映射到存储体102b的第五行。
因此,当访问数据元素时,可以最大程度地确保数据元素的连续性。
图3B例示了根据本公开的一些实施方式的将数据组分布在可用行中的示意图。当用于指示用于映射多个数据组的方法的变量满足另一给定条件时,编译器103可以将数据组分布在可用行中。例如,当变量等于“1”时,可以通知编译器103将数据组分布在存储体的可用行中。
在图3B中,作为示例,八个数据组A1至A8将被映射到存储体的可用行。在分布数据组时,编译器103还可以确定存储设备102的存储体(例如,存储体102a和102b)的可用空间。如图3B所示,存储体312具有六个可用行,存储体314具有五个可用行,存储体316具有四个可用行,并且存储体318具有三个可用行。
编译器103可以选择具有最大可用空间的K个存储体。例如,编译器103可以选择具有最大可用空间的三个存储体(例如,K=3)来接收数据组。在图3B中,具有最大可用空间的三个存储体包括用虚线框起来的存储体312、314和316。因此,数据组只能跨所选择的存储体分布。
然后,编译器103可以根据存储体跨度V和数据跨度U以交错的方式将多个数据组分布到所述数量的存储体。数据跨度U可以反映编译器每次可以分布多少个数据组,并且存储体跨度V可以反映要与数据组映射的第一存储体与第二存储体之间的跨度。例如,图3B中的数据跨度和存储体跨度两者都可以设定为二。因此,可以将第一两个数据组(即,A1和A2)映射到最空闲的存储体(即,存储体312),而可以将第二两个数据组(即,A3和A4)映射到距存储体312一存储体跨度(即,两个存储体)的存储体。因此,如图3B所示,A3和A4可以映射到存储体316。类似地,第三两个数据组(即,A5和A6)可以映射到距存储体316一存储体跨度的存储体。应理解,距存储体316一存储体跨度的存储体是存储体314,因为仅在所选择的三个存储体内执行分布。因此,A5和A6可以映射到存储体314。相应地,A7和A8可以映射到存储体312。
通过在存储体之间交错数据组,数据的访问可以避免存储体冲突,这可以改善存储***的等待时间。
因此,可以根据变量的值来将多个数据组映射到存储体中的可用行。应理解,变量可以具有比“0”和“1”多的值,并且可以根据除如上所述的打包和分布以外的方法来将多个数据组映射到存储体中的可用行。
在将多个数据组映射到存储体的行之后,编译器103可以将可用行的设备地址确定为构成数据组的多个数据元素的设备地址。
然后,返回参照图1,编译器103可以将设备地址和指令(例如,“分配”指令)发送到存储器控制器101。相应地,存储器控制器101可以执行指令并基于设备地址和指令来为数据阵列(例如,图2的数据阵列202)分配存储空间。
图4例示了根据本公开的一些实施方式的另一示例性存储***400。
相比于图1的存储***100,存储***400进一步包括调整器402,该调整器402被配置为确定用于编译计算程序的调整参数。调整器402可以是在处理单元(例如,主机CPU)上执行的独立程序/部件或编译器103的一部分。出于例示的目的,在图4中,调整器402被示为独立于编译器103。
调整器402可以向编译器103提供一个或更多个调整参数集。所述一个或更多个调整参数集的各个调整参数集可以具有多个调整参数。例如,所述多个调整参数可以包括与数据阵列(例如,数据阵列202)相关联的至少一个变量、被选择以分布有数据组的存储体的数量K、存储体跨度V和数据跨度U。更具体地,与数据阵列202相关联的至少一个变量可以包括用于指示用于映射数据组的方法(例如,打包、分布等)的变量。应理解,各个调整参数集可以包括更多参数,诸如与分配存储空间的请求的转换(也称为循环的分区/平铺)有关的参数、与指令的调度有关的参数、硬件配置、存储器轨迹等。此外,可以使用硬件配置来生成用于模拟/仿真的架构规范语言。
然后,编译器103可以执行上述过程,以模拟存储设备102中的存储空间分配(诸如转换用于分配存储空间的请求、生成循环轨迹、确定逻辑地址轨迹、映射逻辑地址、生成设备地址),并根据模拟获取性能度量。应理解,可以测量实际硬件的性能度量,而不是通过模拟生成。基于由编译器103返回的性能度量,调整器402然后可以在多个调整参数集中的各个调整参数集下评估存储设备102的性能。例如,可以将各个调整参数集的性能度量进行比较,以确定适合数据阵列202的调整参数集。
因此,调整器402还可以基于评估来确定一个或更多个调整参数集中的用于在存储设备102中分配存储空间的调整参数集。在一些实施方式中,可以将用于在存储设备102中分配存储空间的所确定的调整参数集发送回编译器103,使得编译器103可以根据所确定的调整参数集来在存储设备102中实际分配存储空间。在一些实施方式中,可以基于所确定的调整参数集来进一步生成用于分配存储空间的模板,如图4所示。例如,模板可以被集成到编译器103中,并且编译器103可以根据模板来分配存储空间,而无需再次运行调整器402。
如上所述,硬件配置也是调整参数集的一部分。例如,硬件配置可以包括时钟频率、数据总线的带宽、附接至数据总线的存储体的数量等。在一些实施方式中,可以使用所确定的硬件配置来实现存储***(例如,图1的存储***100)。
因此,调整器402不仅可以改善存储空间的分配,而且可以改善存储***的设计。
图5例示了根据本公开的一些实施方式的在存储设备中分配存储空间的方法500。例如,方法500可以由用于存储设备的编译器执行。编译器(例如,编译器103)可以在包括存储设备的存储***的处理器上运行。方法500可以包括如下步骤。
在步骤502,编译器可以接收请求,所述请求用于在存储设备(例如,存储设备102)中分配数据阵列,所述数据阵列具有多个数据元素。所述多个数据元素中的各个数据元素可以具有逻辑地址。
在步骤504,编译器可以基于所述请求,生成用于在存储设备中为数据阵列分配存储空间的指令。应理解,由于用于分配存储空间的请求可能仅仅是计算程序的一部分,所以所生成的指令可以是多个指令中的一个指令。在执行期间,编译器还可以对指令执行特殊处理(例如,改变计算程序的执行的正常流程、将另一指令***到指令队列中等),以改善存储设备的性能。
在步骤506,编译器可以基于多个数据元素的逻辑地址,生成多个数据元素在存储设备中的设备地址。
在一些实施方式中,可以基于所述请求来确定多个数据元素的逻辑地址的访问轨迹。基于所述请求,编译器可以确定访问多个数据元素的顺序,从而可以确定对应逻辑地址的访问轨迹。例如,编译器可以将请求转换为与多个数据元素相关联的一个或更多个循环。所述一个或更多个循环中的各个循环可以顺序地访问数据阵列中的数据元素块。然后,编译器可以例如基于被访问的这些块的顺序来确定所述一个或更多个循环的循环轨迹。可以基于循环轨迹来确定多个数据元素的逻辑地址的访问轨迹。
在一些实施方式中,可以基于逻辑地址来生成多个数据元素的物理地址,并且可以基于物理地址来进一步生成多个数据元素在存储设备中的设备地址。
然后,编译器可以基于访问轨迹将多个数据元素分组为多个数据组。各个数据组的长度可以等于存储设备的行长度,使得各个数据组的数据元素可以由存储设备的行托管。为了改善访问存储设备的效率,根据访问轨迹,各个组的数据元素具有连续的逻辑地址。可以根据访问轨迹对多个数据组进行重新排序,使得数据阵列的经重新排序的数据组与访问轨迹一致。数据阵列还可以与关于映射多个数据组的变量相关联。
可以将多个数据组映射到存储设备的存储体的可用行,并且可以将可用行的设备地址确定为多个数据元素在存储设备中的设备地址。参照图6A至图6B描述用于将数据组映射到可用行的示例性方法。
图6A例示了根据本公开的一些实施方式的用于将数据组打包到存储设备的存储体的可用行的示例性方法600的流程图。方法600可以独立地实现或实现为方法500的一部分。当变量满足第一条件时,可以选择方法600来映射数据组。例如,第一条件可以包括变量为“0”。方法600可以包括如下步骤。
在步骤602,可以确定存储设备的存储体的可用空间。可用空间可以指示存储体具有多少可用行。
在步骤604,可以基于存储体的可用空间的降序,对存储设备的存储体进行排序。例如,根据降序,具有最多可用行的存储体可以是第一存储体,根据降序,具有第二最多可用行的存储体可以是第二存储体,依此类推。
在步骤606,可以根据降序,将多个数据组顺序地映射到存储体的可用行。例如,多个数据组可以首先映射到第一存储体。在第一存储体的可用行填充有数据组之后,多个数据组的其余部分可以映射到第二存储体的可用行。已经参照图3A进行了详细描述,因此这里省略了详细描述。
图6B例示了根据本公开的一些实施方式的用于将数据组分布到存储设备的存储体的可用行的示例性方法610的流程图。方法610可以独立地实现或实现为方法500的一部分。当变量满足第二条件时,可以选择方法610来映射数据组。例如,第二条件可以包括变量为“1”。方法610可以包括如下步骤。
在步骤612,类似地,可以确定存储设备的存储体的可用空间。
在步骤614,可以选择具有最大可用空间的第一数量的存储体。可以使用所选择的第一数量的存储体来托管多个数据组。即,没有数据组可以映射到除了所选择的第一数量的存储体之外的任何存储体。例如,如果第一数量等于三,则可以选择具有最大可用空间的三个存储体。
在步骤616,可以根据存储体跨度和数据跨度以交错的方式将多个数据组分布到第一数量的存储体。数据跨度可以反映每次可以分布多少个数据组,并且存储体跨度可以反映要与数据组进行映射的第一存储体与第二存储体之间的跨度。在一些实施方式中,存储体跨度可以等于第二数量,并且数据跨度可以等于第三数量,并且具有第三数量的数据组的第一批次可以分布到第一数量的存储体中的具有最大可用空间的第一存储体。然后,可以基于第一数量和第二数量来在第一数量的存储体中确定第二存储体,并且可以将具有另一第三数量的数据组的第二批次分布到第二存储体。应理解,在多个数据组中,第二批次与第一批次相邻,因为多个数据组是基于访问轨迹生成的。已经参照图3B进行了详细描述,因此这里省略了详细描述。
应理解,尽管数据组被映射到存储体的可用行,但是数据组还没有被分配给这些行。然而,在将数据组映射到存储体的可用行的情况下,可以将可用行的设备地址确定为多个数据元素在存储设备中的设备地址。
返回参照图5,在步骤508,编译器可以基于设备地址和指令,在存储设备中为数据阵列分配存储空间。
图7例示了根据本公开的一些实施方式的用于调整用于在存储设备中分配存储空间的参数的示例性方法700的流程图。方法700可以实现为方法500的一部分或独立地实现。方法700可以包括以下步骤。
在步骤702,可以向编译器提供一个或更多个调整参数集。所述一个或更多个调整参数集的各个调整参数集可以具有多个调整参数。例如,所述多个调整参数可以包括与映射多个数据组有关的变量、第一数量、存储体跨度和数据跨度。在一些实施方式中,所述多个调整参数还可以包括用于指示数据阵列在要被处理的多个数据阵列中的位置的另一参数。在一些实施方式中,所述多个调整参数还可以包括与用于分配存储空间的请求的转换(也称为循环的分区/平铺)有关的参数、与指令的调度有关的参数、硬件配置等。此外,可以使用硬件配置来生成用于模拟/仿真的架构规范语言。
在步骤704,可以在所述多个调整参数集中的各个调整参数集下评估存储设备的性能。例如,可以针对所述多个调整参数集中的每一者生成并评估性能度量。
在步骤706,可以基于评估来确定所述一个或更多个调整参数集中的用于在存储设备中分配存储空间的调整参数集。可以确定可以提供最佳性能的调整参数集。应理解,所确定的调整参数集可以立即用于分配存储空间,或者可以集成在编译器中以供将来使用。例如,当正在编译计算程序时,编译器可以根据所确定的调整参数集来分配存储空间。除了分配存储空间外,编译器还可以根据所确定的调整参数集对通过编译计算程序而生成的指令进行重新排序。
本公开的实施方式还提供用于分配存储空间的存储***。存储***(例如,存储***100或400)可以结合在存储器内实现处理(PIM)的设备中,并且包括用于存储指令集的存储器以及被配置为执行该指令集以使***执行图5至图7的方法500、600、610或700的一个或更多个处理器。图8例示了根据本公开的一些实施方式的示例性PIM架构800的示意图。
如图8所示,PIM架构800可以包括第一部分801、第二部分802以及以通信的方式连接第一部分801和第二部分802的导线接合部804。第一部分801可以包括堆叠在一起的一个或更多个管芯。第二部分802可以集成在第一部分801的表面上,并且包括堆叠在一起的至少两个管芯。在一些实施方式中,第一部分801的两个或更多个管芯或第二部分802的两个或更多个管芯可以通过各种技术联接或连接,诸如面对面集成、背对面集成、TSV、触点、金属层、片上网络(NoC)等。第一部分801或第二部分802中的管芯可以是任何类型的管芯,包括但不限于逻辑管芯、存储器管芯、存储管芯、PIM管芯等。另外,第一部分801或第二部分802中的管芯可以是任何二维(2D)管芯(例如,2D逻辑管芯、2D存储器管芯、2D存储管芯、2DPIM管芯等),或使用管芯堆叠技术制造的任何三维(3D)管芯(例如,3D片上硅(SiC)、单片3DIC等)。
在一些实施方式中,第一部分801可以用作用于存储指令集的存储器,并且第二部分802可以用作用于执行指令集以使架构800执行图5至图7的方法500、600、610或700的处理器。
如图8所示,第一部分801和第二部分802可以通过可以在第一部分801与第二部分802之间传送数据和指令的导线接合部804连接。导线接合部804可以包括各种拓扑(诸如单连接拓扑、总线拓扑、主从拓扑、多点拓扑等)中的一个或更多个导线连接。导线接合部804的一个或更多个导线连接可以以通信的方式将第一部分801的一个或更多个管芯与第二部分802的一个或更多个管芯连接。
可选地,PIM架构800还可以在第一部分801与第二部分802之间包括中间层803。在一些实施方式中,中间层803可以由绝缘材料形成,以使第一部分801与第二部分802绝缘。中间层803还可以在其中包括金属连接(诸如TSV、迹线等)。在一些实施方式中,中间层803可以包括粘合剂材料(诸如聚合物),以将第一部分801与第二部分802接合。
在一些实施方式中,PIM架构800可以包括更多的部分,诸如第三部分、第四部分、…等。这些部分可以集成在彼此之上。PIM设备还可以包括多个导线接合部。各个导线接合部以通信的方式连接两个或更多个部分,并支持它们之间的通信。
在一些实施方式中,一种计算机程序产品可以包括具有用于使一个或更多个处理器执行上述方法的计算机可读程序指令的非暂时性计算机可读存储介质。例如,计算***的一个或更多个处理器可以执行计算机可读程序指令,以编译用于使上述存储设备实现上述方法的指令。
计算机可读存储介质可以是可以存储指令以供指令执行设备使用的有形设备。例如,计算机可读存储介质可以是但不限于电子存储设备、磁存储设备、光学存储设备、电磁存储设备、半导体存储设备或前述项的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括以下项:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字通用盘(DVD)、记忆棒、软盘、机械编码设备(诸如在其上记录有指令的凹槽中的打孔卡或凸起结构)以及前述项的任何合适的组合。
用于执行上述方法的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设定数据或者用一种或更多种编程语言(包括面向对象的编程语言)和常规过程编程语言的任意组合编写的源代码或目标代码。所述计算机可读程序指令可以完全在作为独立软件包的计算设备上执行,或者部分在第一计算设备上并且部分在远离第一计算设备的第二计算设备上执行。在后一种场景中,第二远程计算设备可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接至第一计算设备。
可以将计算机可读程序指令提供给计算机或其它可编程数据处理装置的一个或更多个处理器,以产生机器,使得经由计算机或其它可编程数据处理装置的一个或更多个处理器执行的指令创建用于实现上述方法的装置。
附图中的流程图和示意图例示了根据说明书的各种实施方式的设备、方法和计算程序产品的可能实现方式的架构、功能和操作。就这一点而言,流程图或图中的框可以表示包括用于实现特定功能的一个或更多个可执行指令的软件程序、代码段或代码部分。还应注意,在一些另选实现方式中,框中指出的功能可以不按附图中指出的顺序发生。例如,取决于所涉及的功能,实际上可以基本上同时执行连续示出的两个框,或者有时可以以相反顺序执行这些框。还将注意,示意图或流程图的各个框以及示意图和流程图中的框的组合可以由执行指定功能或动作的基于专用硬件的***或专用硬件和计算机指令的组合来实现。
可以使用以下条款进一步描述实施方式:
1.一种用于分配存储空间的存储***,所述存储***包括:
存储设备,所述存储设备用于提供所述存储空间;
存储器控制器部件,所述存储器控制器部件以通信的方式与所述存储设备联接;以及
编译器部件,所述编译器部件被配置为:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成使所述存储器控制器部件在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
使所述存储器控制器部件基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
2.根据条款1所述的存储***,其中,在基于所述多个数据元素的所述逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述编译器部件进一步被配置为:
基于所述请求,确定所述多个数据元素的所述逻辑地址的访问轨迹;
基于所述访问轨迹,将所述多个数据元素分组为多个数据组,其中,各个数据组的数据元素根据所述访问轨迹具有连续的逻辑地址;
将所述多个数据组映射到所述存储设备的存储体的可用行;以及
将所述可用行的设备地址确定为所述多个数据元素在所述存储设备中的设备地址。
3.根据条款2所述的存储***,其中,在确定所述多个数据元素的所述逻辑地址的访问轨迹时,所述编译器部件进一步被配置为:
将所述请求转换为与所述多个数据元素相关联的一个或更多个循环;
确定所述一个或更多个循环的循环轨迹;以及
基于所述循环轨迹,确定所述多个数据元素的所述逻辑地址的所述访问轨迹。
4.根据条款2或3所述的存储***,其中,所述编译器部件进一步被配置为:
根据所述访问轨迹对所述多个数据组进行重新排序,其中,所述数据阵列与关于映射所述多个数据组的变量相关联。
5.根据条款4所述的存储***,其中,响应于所述变量满足第一条件,在将所述多个数据组映射到所述存储设备的所述存储体的可用行时,所述编译器部件进一步被配置为:
确定所述存储设备的所述存储体的可用空间;
基于所述存储体的所述可用空间的降序,对所述存储设备的所述存储体进行排序;以及
根据所述降序,将所述多个数据组顺序地映射到所述存储体的所述可用行。
6.根据条款4或5所述的存储***,其中,响应于所述变量满足第二条件,在将所述多个数据组映射到所述存储设备的存储体的可用行时,所述编译器部件进一步被配置为:
确定所述存储设备的所述存储体的可用空间;
选择具有最大可用空间的第一数量的存储体;以及
根据存储体跨度和数据跨度以交错的方式将所述多个数据组分布到所述第一数量的存储体。
7.根据条款4至6中任一项所述的存储***,所述存储***进一步包括调整器部件,所述调整器部件被配置为:
向所述编译器部件提供一个或更多个调整参数集,各个调整参数集具有多个调整参数,其中,所述多个调整参数包括所述变量、所述第一数量、所述存储体跨度和所述数据跨度;
在所述多个调整参数集中的各个调整参数集下评估所述存储设备的性能;以及
基于所述评估,确定所述一个或更多个调整参数集中的用于在所述存储设备中分配存储空间的调整参数集。
8.根据条款6或7所述的存储***,其中,所述存储体跨度等于第二数量,所述数据跨度等于第三数量,并且在根据存储体跨度和数据跨度将所述多个数据组分布到所述第一数量的存储体时,所述编译器部件进一步被配置为:
将具有所述第三数量的数据组的第一批次分布到具有所述最大可用空间的第一存储体;
基于所述第一数量和所述第二数量,在所述第一数量的存储体中确定第二存储体;
将具有另一第三数量的数据组的第二批次分布到所述第二存储体,其中,
在所述多个数据组中,所述第二批次与所述第一批次相邻。
9.根据条款7或8所述的存储***,其中,所述多个调整参数进一步包括硬件配置。
10.根据条款1至9中任一项所述的存储***,其中,在基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述编译器部件进一步被配置为:
基于所述逻辑地址,生成所述多个数据元素的物理地址;以及
基于所述物理地址,生成所述多个数据元素在所述存储设备中的所述设备地址。
11.一种用于在存储设备中分配存储空间的方法,所述方法包括以下步骤:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
12.根据条款11所述的方法,其中,基于所述多个数据元素的所述逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址的步骤进一步包括:
基于所述请求,确定所述多个数据元素的所述逻辑地址的访问轨迹;
基于所述访问轨迹,将所述多个数据元素分组为多个数据组,其中,各个数据组的数据元素根据所述访问轨迹具有连续的逻辑地址;
将所述多个数据组映射到所述存储设备的存储体的可用行;以及
将所述可用行的设备地址确定为所述多个数据元素在所述存储设备中的设备地址。
13.根据条款12所述的方法,其中,确定所述多个数据元素的所述逻辑地址的所述访问轨迹的步骤进一步包括:
将所述请求转换为与所述多个数据元素相关联的一个或更多个循环;
确定所述一个或更多个循环的循环轨迹;以及
基于所述循环轨迹,确定所述多个数据元素的所述逻辑地址的所述访问轨迹。
14.根据条款12或13所述的方法,所述方法进一步包括以下步骤:
根据所述访问轨迹对所述多个数据组进行重新排序,其中,所述数据阵列与关于映射所述多个数据组的变量相关联。
15.根据条款14所述的方法,其中,响应于所述变量满足第一条件,将所述多个数据组映射到所述存储设备的存储体的可用行的步骤进一步包括:
确定所述存储设备的所述存储体的可用空间;
基于所述存储体的所述可用空间的降序,对所述存储设备的所述存储体进行排序;以及
根据所述降序,将所述多个数据组顺序地映射到所述存储体的所述可用行。
16.根据条款14或15所述的方法,其中,响应于所述变量满足第二条件,将所述多个数据组映射到所述存储设备的存储体的可用行的步骤进一步包括:
确定所述存储设备的所述存储体的可用空间;
选择具有最大可用空间的第一数量的存储体;以及
根据存储体跨度和数据跨度以交错的方式将所述多个数据组分布到所述第一数量的存储体。
17.根据条款14至16中任一项所述的方法,所述方法进一步包括以下步骤:
提供一个或更多个调整参数集,各个调整参数集具有多个调整参数,其中,所述多个调整参数包括所述变量、所述第一数量、所述存储体跨度和所述数据跨度;
在所述多个调整参数集中的各个调整参数集下评估所述存储设备的性能;以及
基于所述评估,确定所述一个或更多个调整参数集中的用于在所述存储设备中分配存储空间的调整参数集。
18.根据条款16或17所述的方法,其中,其中,所述存储体跨度等于第二数量,所述数据跨度等于第三数量,并且根据存储体跨度和数据跨度将所述多个数据组分布到所述第一数量的存储体的步骤进一步包括:
将具有所述第三数量的数据组的第一批次分布到具有所述最大可用空间的第一存储体;
基于所述第一数量和所述第二数量,在所述第一数量的存储体中确定第二存储体;
将具有另一第三数量的数据组的第二批次分布到所述第二存储体,其中,
在所述多个数据组中,所述第二批次与所述第一批次相邻。
19.根据条款17或18所述的方法,其中,所述多个调整参数进一步包括硬件配置。
20.根据条款11至19中任一项所述的方法,其中,基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址的步骤进一步包括:
基于所述逻辑地址,生成所述多个数据元素的物理地址;以及
基于所述物理地址,生成所述多个数据元素在所述存储设备中的所述设备地址。
21.一种用于分配存储空间的***,所述***包括:
存储器,所述存储器存储有指令集;以及
一个或更多个处理器,所述一个或更多个处理器被配置为执行所述指令集以使所述***执行以下操作:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
22.根据条款21所述的***,其中,在基于所述多个数据元素的所述逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
基于所述请求,确定所述多个数据元素的所述逻辑地址的访问轨迹;
基于所述访问轨迹,将所述多个数据元素分组为多个数据组,其中,各个数据组的数据元素根据所述访问轨迹具有连续的逻辑地址;
将所述多个数据组映射到所述存储设备的存储体的可用行;以及
将所述可用行的设备地址确定为所述多个数据元素在所述存储设备中的设备地址。
23.根据条款22所述的***,其中,在确定所述多个数据元素的所述逻辑地址的访问轨迹时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
将所述请求转换为与所述多个数据元素相关联的一个或更多个循环;
确定所述一个或更多个循环的循环轨迹;以及
基于所述循环轨迹,确定所述多个数据元素的所述逻辑地址的所述访问轨迹。
24.根据条款22或23所述的***,其中,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
根据所述访问轨迹对所述多个数据组进行重新排序,其中,所述数据阵列与关于映射所述多个数据组的变量相关联。
25.根据条款24所述的***,其中,当所述变量满足第一条件时,在将所述多个数据组映射到所述存储设备的存储体的可用行时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
确定所述存储设备的所述存储体的可用空间;
基于所述存储体的所述可用空间的降序,对所述存储设备的所述存储体进行排序;以及
根据所述降序,将所述多个数据组顺序地映射到所述存储体的所述可用行。
26.根据条款24或25所述的***,其中,当所述变量满足第二条件时,在将所述多个数据组映射到所述存储设备的存储体的可用行时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
确定所述存储设备的所述存储体的可用空间;
选择具有最大可用空间的第一数量的存储体;以及
根据存储体跨度和数据跨度以交错的方式将所述多个数据组分布到所述第一数量的存储体。
27.根据条款24至26中任一项所述的***,其中,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
提供一个或更多个调整参数集,各个调整参数集具有多个调整参数,其中,所述多个调整参数包括所述变量、所述第一数量、所述存储体跨度和所述数据跨度;
在所述多个调整参数集中的各个调整参数集下评估所述存储设备的性能;以及
基于所述评估,确定所述一个或更多个调整参数集中的用于在所述存储设备中分配存储空间的调整参数集。
28.根据条款26或27所述的***,其中,所述存储体跨度等于第二数量,所述数据跨度等于第三数量,并且在根据存储体跨度和数据跨度将所述多个数据组分布到所述第一数量的存储体时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
将具有所述第三数量的数据组的第一批次分布到具有所述最大可用空间的第一存储体;
基于所述第一数量和所述第二数量,在所述第一数量的存储体中确定第二存储体;
将具有另一第三数量的数据组的第二批次分布到所述第二存储体,其中,
在所述多个数据组中,所述第二批次与所述第一批次相邻。
29.根据条款27或28所述的***,其中,所述多个调整参数进一步包括硬件配置。
30.根据条款21至29中任一项所述的***,其中,在基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
基于所述逻辑地址,生成所述多个数据元素的物理地址;以及
基于所述物理地址,生成所述多个数据元素在所述存储设备中的所述设备地址。
31.一种在存储器内实现处理的架构,所述架构包括:
第一部分,所述第一部分存储指令集;以及
第二部分,所述第二部分被配置为执行所述指令集以使所述架构执行以下操作:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
32.一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质存储有指令集,所述指令集能够由存储***的一个或更多个处理器执行,以使所述存储***执行用于在所述存储***的存储设备中分配存储空间的方法,所述方法包括以下步骤:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
如本文所使用的,术语“包括(comprises)”、“包括(comprising)”或其任何其它变型旨在涵盖非排他性包括,使得包括元素列表的过程、方法、组合物、物品或装置不仅包括那些元素,而且可以包括未明确列出的或这种过程、方法、组合物、物品或装置所固有的其它元素。术语“示例性”以“示例”而不是“理想”的意义使用。
应理解,说明书的为清楚起见而在单独的实施方式的上下文中描述的某些特征也可以在单个实施方式中组合地提供。相比之下,本说明书的为简洁起见而在单个实施方式的上下文中描述的各种特征也可以单独地或以任何合适的子组合或如在本说明书的任何其它描述的实施方式中那样适当地提供。在各种实施方式的上下文中描述的某些特征不应被认为是那些实施方式的必要特征,除非该实施方式在不具有那些元素的情况下是无法工作的。
Claims (32)
1.一种用于分配存储空间的存储***,所述存储***包括:
存储设备,所述存储设备用于提供所述存储空间;以及
编译器部件,所述编译器部件被配置为:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
2.根据权利要求1所述的存储***,其中,在基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述编译器部件进一步被配置为:
基于所述请求,确定所述多个数据元素的所述逻辑地址的访问轨迹;
基于所述访问轨迹,将所述多个数据元素分组为多个数据组,其中,各个数据组的数据元素根据所述访问轨迹具有连续的逻辑地址;
将所述多个数据组映射到所述存储设备的存储体的可用行;以及
将所述可用行的设备地址确定为所述多个数据元素在所述存储设备中的设备地址。
3.根据权利要求2所述的存储***,其中,在确定所述多个数据元素的所述逻辑地址的访问轨迹时,所述编译器部件进一步被配置为:
将所述请求转换为与所述多个数据元素相关联的一个或更多个循环;
确定所述一个或更多个循环的循环轨迹;以及
基于所述循环轨迹,确定所述多个数据元素的所述逻辑地址的所述访问轨迹。
4.根据权利要求2所述的存储***,其中,所述编译器部件进一步被配置为:
根据所述访问轨迹对所述多个数据组进行重新排序,其中,所述数据阵列与关于映射所述多个数据组的变量相关联。
5.根据权利要求4所述的存储***,其中,响应于所述变量满足第一条件,在将所述多个数据组映射到所述存储设备的所述存储体的可用行时,所述编译器部件进一步被配置为:
确定所述存储设备的所述存储体的可用空间;
基于所述存储体的所述可用空间的降序,对所述存储设备的所述存储体进行排序;以及
根据所述降序,将所述多个数据组顺序地映射到所述存储体的所述可用行。
6.根据权利要求4所述的存储***,其中,响应于所述变量满足第二条件,在将所述多个数据组映射到所述存储设备的存储体的可用行时,所述编译器部件进一步被配置为:
确定所述存储设备的所述存储体的可用空间;
选择具有最大可用空间的第一数量的存储体;以及
根据存储体跨度和数据跨度以交错的方式将所述多个数据组分布到所述第一数量的存储体。
7.根据权利要求6所述的存储***,所述存储***进一步包括调整器部件,所述调整器部件被配置为:
向所述编译器部件提供一个或更多个调整参数集,各个调整参数集具有多个调整参数,其中,所述多个调整参数包括所述变量、所述第一数量、所述存储体跨度和所述数据跨度;
在所述多个调整参数集中的各个调整参数集下评估所述存储设备的性能;以及
基于所述评估,确定所述一个或更多个调整参数集中的用于在所述存储设备中分配存储空间的调整参数集。
8.根据权利要求6所述的存储***,其中,所述存储体跨度等于第二数量,所述数据跨度等于第三数量,并且在根据存储体跨度和数据跨度将所述多个数据组分布到所述第一数量的存储体时,所述编译器部件进一步被配置为:
将具有所述第三数量的数据组的第一批次分布到具有所述最大可用空间的第一存储体;
基于所述第一数量和所述第二数量,在所述第一数量的存储体中确定第二存储体;
将具有另一第三数量的数据组的第二批次分布到所述第二存储体,其中,
在所述多个数据组中,所述第二批次与所述第一批次相邻。
9.根据权利要求7所述的存储***,其中,所述多个调整参数进一步包括硬件配置。
10.根据权利要求1所述的存储***,其中,在基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述编译器部件进一步被配置为:
基于所述逻辑地址,生成所述多个数据元素的物理地址;以及
基于所述物理地址,生成所述多个数据元素在所述存储设备中的所述设备地址。
11.一种用于在存储设备中分配存储空间的方法,所述方法包括以下步骤:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
12.根据权利要求11所述的方法,其中,基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址的步骤进一步包括:
基于所述请求,确定所述多个数据元素的所述逻辑地址的访问轨迹;
基于所述访问轨迹,将所述多个数据元素分组为多个数据组,其中,各个数据组的数据元素根据所述访问轨迹具有连续的逻辑地址;
将所述多个数据组映射到所述存储设备的存储体的可用行;以及
将所述可用行的设备地址确定为所述多个数据元素在所述存储设备中的设备地址。
13.根据权利要求12所述的方法,其中,确定所述多个数据元素的所述逻辑地址的所述访问轨迹的步骤进一步包括:
将所述请求转换为与所述多个数据元素相关联的一个或更多个循环;
确定所述一个或更多个循环的循环轨迹;以及
基于所述循环轨迹,确定所述多个数据元素的所述逻辑地址的所述访问轨迹。
14.根据权利要求12所述的方法,所述方法进一步包括以下步骤:
根据所述访问轨迹对所述多个数据组进行重新排序,其中,所述数据阵列与关于映射所述多个数据组的变量相关联。
15.根据权利要求14所述的方法,其中,响应于所述变量满足第一条件,将所述多个数据组映射到所述存储设备的存储体的可用行的步骤进一步包括:
确定所述存储设备的所述存储体的可用空间;
基于所述存储体的所述可用空间的降序,对所述存储设备的所述存储体进行排序;以及
根据所述降序,将所述多个数据组顺序地映射到所述存储体的所述可用行。
16.根据权利要求14所述的方法,其中,响应于所述变量满足第二条件,将所述多个数据组映射到所述存储设备的存储体的可用行的步骤进一步包括:
确定所述存储设备的所述存储体的可用空间;
选择具有最大可用空间的第一数量的存储体;以及
根据存储体跨度和数据跨度以交错的方式将所述多个数据组分布到所述第一数量的存储体。
17.根据权利要求16所述的方法,所述方法进一步包括以下步骤:
提供一个或更多个调整参数集,各个调整参数集具有多个调整参数,其中,所述多个调整参数包括所述变量、所述第一数量、所述存储体跨度和所述数据跨度;
在所述多个调整参数集中的各个调整参数集下评估所述存储设备的性能;以及
基于所述评估,确定所述一个或更多个调整参数集中的用于在所述存储设备中分配存储空间的调整参数集。
18.根据权利要求16所述的方法,其中,所述存储体跨度等于第二数量,所述数据跨度等于第三数量,并且根据存储体跨度和数据跨度将所述多个数据组分布到所述第一数量的存储体的步骤进一步包括:
将具有所述第三数量的数据组的第一批次分布到具有所述最大可用空间的第一存储体;
基于所述第一数量和所述第二数量,在所述第一数量的存储体中确定第二存储体;
将具有另一第三数量的数据组的第二批次分布到所述第二存储体,其中,
在所述多个数据组中,所述第二批次与所述第一批次相邻。
19.根据权利要求17所述的方法,其中,所述多个调整参数进一步包括硬件配置。
20.根据权利要求11所述的方法,其中,基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址的步骤进一步包括:
基于所述逻辑地址,生成所述多个数据元素的物理地址;以及
基于所述物理地址,生成所述多个数据元素在所述存储设备中的所述设备地址。
21.一种用于分配存储空间的***,所述***包括:
存储器,所述存储器存储有指令集;以及
一个或更多个处理器,所述一个或更多个处理器被配置为执行所述指令集以使所述***执行以下操作:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
22.根据权利要求21所述的***,其中,在基于所述多个数据元素的所述逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
基于所述请求,确定所述多个数据元素的所述逻辑地址的访问轨迹;
基于所述访问轨迹,将所述多个数据元素分组为多个数据组,其中,各个数据组的数据元素根据所述访问轨迹具有连续的逻辑地址;
将所述多个数据组映射到所述存储设备的存储体的可用行;以及
将所述可用行的设备地址确定为所述多个数据元素在所述存储设备中的设备地址。
23.根据权利要求22所述的***,其中,在确定所述多个数据元素的所述逻辑地址的访问轨迹时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
将所述请求转换为与所述多个数据元素相关联的一个或更多个循环;
确定所述一个或更多个循环的循环轨迹;以及
基于所述循环轨迹,确定所述多个数据元素的所述逻辑地址的所述访问轨迹。
24.根据权利要求22所述的***,其中,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
根据所述访问轨迹对所述多个数据组进行重新排序,其中,所述数据阵列与关于映射所述多个数据组的变量相关联。
25.根据权利要求24所述的***,其中,当所述变量满足第一条件时,在将所述多个数据组映射到所述存储设备的存储体的可用行时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
确定所述存储设备的所述存储体的可用空间;
基于所述存储体的所述可用空间的降序,对所述存储设备的所述存储体进行排序;以及
根据所述降序,将所述多个数据组顺序地映射到所述存储体的所述可用行。
26.根据权利要求24所述的***,其中,当所述变量满足第二条件时,在将所述多个数据组映射到所述存储设备的存储体的可用行时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
确定所述存储设备的所述存储体的可用空间;
选择具有最大可用空间的第一数量的存储体;以及
根据存储体跨度和数据跨度以交错的方式将所述多个数据组分布到所述第一数量的存储体。
27.根据权利要求26所述的***,其中,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
提供一个或更多个调整参数集,各个调整参数集具有多个调整参数,其中,所述多个调整参数包括所述变量、所述第一数量、所述存储体跨度和所述数据跨度;
在所述多个调整参数集中的各个调整参数集下评估所述存储设备的性能;以及
基于所述评估,确定所述一个或更多个调整参数集中的用于在所述存储设备中分配存储空间的调整参数集。
28.根据权利要求26所述的***,其中,所述存储体跨度等于第二数量,所述数据跨度等于第三数量,并且在根据存储体跨度和数据跨度将所述多个数据组分布到所述第一数量的存储体时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
将具有所述第三数量的数据组的第一批次分布到具有所述最大可用空间的第一存储体;
基于所述第一数量和所述第二数量,在所述第一数量的存储体中确定第二存储体;
将具有另一第三数量的数据组的第二批次分布到所述第二存储体,其中,
在所述多个数据组中,所述第二批次与所述第一批次相邻。
29.根据权利要求27所述的***,其中,所述多个调整参数进一步包括硬件配置。
30.根据权利要求21所述的***,其中,在基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址时,所述一个或更多个处理器进一步被配置为执行所述指令集以使所述***执行以下操作:
基于所述逻辑地址,生成所述多个数据元素的物理地址;以及
基于所述物理地址,生成所述多个数据元素在所述存储设备中的所述设备地址。
31.一种在存储器内实现处理的架构,所述架构包括:
第一部分,所述第一部分存储有指令集;以及
第二部分,所述第二部分被配置为执行所述指令集以使所述架构执行以下操作:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
32.一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质存储有指令集,所述指令集能够由存储***的一个或更多个处理器执行,以使所述存储***执行用于在所述存储***的存储设备中分配存储空间的方法,所述方法包括以下步骤:
接收请求,所述请求用于在所述存储设备中分配数据阵列,所述数据阵列具有多个数据元素,其中,所述多个数据元素中的各个数据元素具有逻辑地址;
基于所述请求,生成用于在所述存储设备中为所述数据阵列分配存储空间的指令;
基于所述多个数据元素的逻辑地址,生成所述多个数据元素在所述存储设备中的设备地址;以及
基于所述设备地址和所述指令,在所述存储设备中为所述数据阵列分配所述存储空间。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/843,293 | 2020-04-08 | ||
US16/843,293 US11263131B2 (en) | 2020-04-08 | 2020-04-08 | System and method for allocating memory space |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113495851A true CN113495851A (zh) | 2021-10-12 |
Family
ID=77997683
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110370700.XA Pending CN113495851A (zh) | 2020-04-08 | 2021-04-07 | 分配存储空间的***和方法、架构及存储介质 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11263131B2 (zh) |
CN (1) | CN113495851A (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11704271B2 (en) * | 2020-08-20 | 2023-07-18 | Alibaba Group Holding Limited | Scalable system-in-package architectures |
DE102021205958A1 (de) * | 2021-06-11 | 2022-12-15 | Robert Bosch Gesellschaft mit beschränkter Haftung | Computerimplementiertes Verfahren zum Erstellen eines Linker-Codes für einen Erstellungsprozess eines ausführbaren Codes für eine Recheneinheit aus einem Quellcode |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2757777B2 (ja) * | 1994-05-26 | 1998-05-25 | 住友金属工業株式会社 | メモリの不正アクセス検出方法及びシステム |
US9280347B2 (en) * | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US8863099B2 (en) * | 2012-11-05 | 2014-10-14 | International Business Machines Corporation | Compilation and placement of instructions in a memory system |
US10223260B2 (en) * | 2014-03-19 | 2019-03-05 | International Business Machines Corporation | Compiler-generated memory mapping hints |
US9910787B2 (en) * | 2014-06-05 | 2018-03-06 | Micron Technology, Inc. | Virtual address table |
US9448929B1 (en) * | 2014-07-10 | 2016-09-20 | Google Inc. | Memory allocation folding based on object dominance |
-
2020
- 2020-04-08 US US16/843,293 patent/US11263131B2/en active Active
-
2021
- 2021-04-07 CN CN202110370700.XA patent/CN113495851A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US11263131B2 (en) | 2022-03-01 |
US20210318955A1 (en) | 2021-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10817217B2 (en) | Data storage system with improved time-to-ready | |
KR102519019B1 (ko) | 액세스 효율에 기초한 메모리 요청의 순서화 | |
KR101025407B1 (ko) | 테스트 데이터 처리 디바이스 및 방법, 테스트 장치 및 컴퓨터 판독가능 매체 | |
US10740006B2 (en) | System and method for enabling high read rates to data element lists | |
US11656908B2 (en) | Allocation of memory resources to SIMD workgroups | |
CN107704194B (zh) | 无锁io处理方法及其装置 | |
CN113495851A (zh) | 分配存储空间的***和方法、架构及存储介质 | |
JP2008541217A (ja) | メモリーコントローラ、メモリーアクセスの制御方法、及びメモリーコントローラを具えたシステム | |
KR20190019203A (ko) | 가상 컨트롤러 모드를 가진 메모리 컨트롤러 | |
Guo et al. | A comparative study of predictable dram controllers | |
WO2010116431A1 (ja) | キャッシュ制御装置及びキャッシュ制御方法 | |
US20200409874A1 (en) | Data storage system data access arbitration | |
US11307768B2 (en) | Namespace auto-routing data storage system | |
US20200409561A1 (en) | Data storage system with i/o determinism latency optimization | |
TWI704488B (zh) | 網路裝置、用於網路裝置之記憶體系統及操作網路裝置之方法 | |
US11256621B2 (en) | Dual controller cache optimization in a deterministic data storage system | |
CN103577347A (zh) | 用于操作存储器设备的方法和用于存储器操作的*** | |
US20240037046A1 (en) | Tensor transfer though interleaved data transactions | |
CN106293491A (zh) | 写请求的处理方法和内存控制器 | |
US11816025B2 (en) | Hardware acceleration | |
GB2572248A (en) | Resource allocation | |
CN108241508B (zh) | 处理OpenCL内核的方法及用于该方法的计算设备 | |
US11599391B2 (en) | Memory transaction request management for an ordered unit of data items | |
US20220107754A1 (en) | Apparatus and method for data packing and ordering | |
EP3270295A1 (en) | Memory controller with virtual controller mode |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |