CN113287098A - 多精度存储器系统 - Google Patents
多精度存储器系统 Download PDFInfo
- Publication number
- CN113287098A CN113287098A CN202080006598.9A CN202080006598A CN113287098A CN 113287098 A CN113287098 A CN 113287098A CN 202080006598 A CN202080006598 A CN 202080006598A CN 113287098 A CN113287098 A CN 113287098A
- Authority
- CN
- China
- Prior art keywords
- floating point
- precision
- memory
- memory device
- byte
- 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
- 238000000034 method Methods 0.000 claims description 36
- 230000004044 response Effects 0.000 claims description 20
- 238000003491 array Methods 0.000 abstract description 20
- 238000012545 processing Methods 0.000 description 38
- 238000010586 diagram Methods 0.000 description 21
- 238000012546 transfer Methods 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000003542 behavioural effect Effects 0.000 description 4
- 230000001427 coherent effect Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 238000011960 computer-aided design Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- 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
-
- 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/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Nonlinear Science (AREA)
- Read Only Memory (AREA)
- Logic Circuits (AREA)
Abstract
存储器中的空间基于最高使用精度来分配。当最大使用精度未被使用时,该特定精度级别(例如,浮点格式)所需的位在处理器和存储器之间传递,而其余的则不。给定浮点数分布在不连续的地址之上。给定浮点数的每个部分在存取单元、组和/或存储器阵列内位于相同的偏移处。这允许存储器设备中的定序器相继地存取精度相关数目个存取单元、组和/或存储器阵列,而无需通过存储器通道接收附加请求。
Description
附图说明
图1A至图1D是图示了具有不同精度的浮点数的示例存储格式的图。
图2是图示了处理多个浮点数格式的系统的框图。
图3是图示了存取具有不同精度的浮点数的方法的流程图。
图4是图示了在存储器设备中以不同的精度存储和取回浮点数的方法的流程图。
图5是图示了从存储器设备取回浮点数、以及将浮点数存储到存储器设备的方法的流程图。
图6A至图6F是图示了使用列偏移来高效地存取具有不同精度的浮点数的图。
图7A至图7E图示了存储器设备的配置。
图8A至图8C是图示了用于存储/取回具有不同精度的浮点数的功能层级的图。
图9是图示了对存取具有不同精度的浮点数进行配置的方法的流程图。
图10是处理系统的框图,该处理系统使用存储器设备堆栈来存储具有不同精度的浮点数。
图11是处理系统的框图,该处理系统使用存储器模块来存储具有不同精度的浮点数。
图12是处理系统的框图,该处理系统使用直接附接的存储器设备来存储具有不同精度的浮点数。
图13是处理系统的框图。
具体实施方式
机器学习期间的不同步骤和/或操作可以使用不同级别的精度。如本文所使用的,精度是数中的数位的数目(例如,二进制数中的位数目-定点或浮点)。各种数格式可以具有各种位数目。数的精度的示例包括:单个位(例如,仅一个符号位)、五个或六个位(例如,仅指数或具有符号位的指数)、32位(例如,23个有效位、一个符号位以及8个指数位(IEEE 754标准单精度))、64位(例如,52个有效位、一个符号位和11个指数位(IEEE 754标准双精度))以及其他(例如,任意数目的符号、指数和/或有效位或其组合)。
在一个示例中,与用于使用经训练的网络来进行推理计算的精度相比,训练神经网络可以在针对网络的训练计算期间使用较高精度的数(整数或浮点数)。同样,例如,在对较低精度的输入进行阈值处理(thresholding)之后,矩阵乘法计算可以创建较高精度的输出。最后,例如,与用于前向传播计算相比,较高精度的数可以被用于反向传播计算。
在一个实施例中,存储器中的空间基于最高使用精度来分配。当最大使用精度未被使用时,该特定精度级别(例如,浮点格式)所需的位在处理器和存储器之间传递,而其余的位则不传递。这节省了存储器带宽、功率和处理器资源。
在一个实施例中,针对各种精度级别的存储格式被选择以被高效地存储、以及从存储器设备中取回。具体地,给定浮点数及其组成部分分布在不连续的地址上。针对给定浮点数的非连续地址位于多于一个的存储器存取单元、组和/或存储器阵列中。在一个实施例中,给定浮点数的每个部分位于存取单元、组和/或存储器阵列内的相同偏移处。这允许存储器设备中的定序器相继(或同时)存取精度相关数目的存取单元、组和/或存储器阵列,而无需通过存储器通道接收附加请求。在一个实施例中,浮点数的最高有效位(MSB)被存储,使得MSB在较低有效度的位之前被存取。
图1A至图1D是图示了针对具有不同精度的浮点数的示例存储格式的图。在图1A中,针对32位浮点数的示例格式被示出。该示例格式被标记为FLOAT32*110。32位浮点数包括被存储在4个字节中的32位。最高有效字节包括针对指数符号的一位SE、指数的6位(E5-E0)以及针对尾数符号的一位SM。下一最高有效字节包括尾数的最高有效8位(不包括符号)(M23-M16)。下一最高有效字节包括尾数的M15至M8位。最后,32位浮点数的最低有效字节包括尾数的M7-M0位。
应当理解,符号位、指数位和尾数位的选择和放置仅是示例,可以设想其他数目的位和这些位的放置。例如,最高有效字节可以包括更少(例如,4)的指数位并且包括更多(例如,2)的尾数位。
在一个实施例中,FLOAT32*格式浮点数110的字节中的每个字节被存储在存储器120的不同存取单元(access unit)中。这在图1A中由箭头150、箭头151、箭头152和箭头153示出,箭头150从浮点数110的最高有效字节延伸到存储器120的组P中的位置A1;箭头151从数110的第二最高有效字节延伸到存储器120的组P+1的位置A1;箭头152从数110的第三最高有效字节延伸到存储器120的组P+2的位置A1;并且箭头153从数110的最低有效字节延伸到存储器120的组P+3的位置A1。
存储器120的存取单元(组)可以例如被选择以用于高效地传递FLOAT32*格式数和/或其组成子字节。例如,如果存储器120具有64字节的突发大小,则将64个FLOAT32*格式的浮点数110的相应字节中的每个字节定位在不同的64个字节组中将允许相应字节由不同的突发取回/存储。这允许32位浮点数的64个最高有效字节(即,指数和尾数的符号)由第一突发来取回,以进行处理。尾数的M23-M16位由第二突发取回/存储,依此类推。如果不需要这64个浮点数的尾数的数个剩余字节(例如,对于确定数是正数、负数或者不是数-NaN,仅最高有效字节是需要的),则随后的突发不需要被执行。
其他组的大小(例如,2k-1)可以根据存储器120的架构来选择。例如,存取单元组可以被选择为对应于存储器120的阵列的列存取宽度或页大小,或者对其乘以或除以2的幂。例如,对于2kB的页大小,所选择的存取单元(组)大小可以为2kB/32=64B,由此将第一组64个浮点数的指数部分存储在页的前64个字节中,将下一最高有效字节存储在第二64个字节中,等等,其中第二组64个浮点数从页的字节64*4=256开始,并且对于存储器120的每页存储的8组64个浮点数120依此类推。
在图1B中,示出了24位浮点数的示例格式。该示例数被标记为FLOAT24*111。24位浮点数包括3个字节。最高有效字节包括针对指数符号的一位SE、指数的6位(E5-E0)和针对尾数符号的一位SM。下一最高有效字节包括尾数的最高有效8位(不包括符号)(M23-M16)。最后,最低有效字节包括尾数的M15至M8位。因此,应当理解,FLOAT24*格式与以下等同:其中尾数的最低有效字节(M7-M0)被截断(例如,设置为0x00h)的FLOAT32*格式。
在一个实施例中,FLOAT24*格式浮点数111的字节中的每个字节被存储在存储器120的不同存取单元中。这些字节/位被存储在与FLOAT32*数中的它们的(未被截断的)对应部分将被存储的相同的存取组和位置中。这在图1B中由箭头150、箭头151和箭头152图示,箭头150从浮点数111的最高有效字节延伸到存储器120的组P中的位置A1;箭头151从数111的第二最高有效字节延伸到存储器120的组P+1的位置A1;并且箭头152从数111的第三最高有效字节延伸到存储器120的组P+2的位置A1。在其中FLOAT32*数的最低有效字节将被存储的组P+3中的位置A1可以可选地被设置为0x00h。这在图1B中由组P+3的位置A1中的“0”来图示。
将FLOAT24*数的每个字节放置在与FLOAT32*数相同的位置和存取组中允许对于FLOAT32*数和较低精度的FLOAT24*数使用相同的存取模式——除了最后存取/突发(即,用以取回/存储最低有效字节)无需被执行。这允许FLOAT24*数使用3个突发、而不是针对浮点数32*数所需要的4个突发来取回。因此,24位浮点数中的64个最高有效字节可以由第一突发来取回/存储;尾数的M23-M16位由第二突发来取回/存储;并且,M15-M8位由第三突发来取回/存储。第四突发无需针对FLOAT24*格式数来执行——由此节省了存储器通道带宽/周期。
在图1C中,示出了针对16位浮点数的示例格式。该示例数被标记为FLOAT16*112。16位浮点数包括2个字节。类似于FLOAT32*和FLOAT24*格式,最高有效字节包括针对指数符号的1位SE、指数的6位(E5-E0)以及针对尾数符号的一位SM。FLOAT16*格式的另一字节包括尾数的最高有效8位(不包括符号)(M23-M16)。因此,应当理解,FLOAT16*格式与以下等同:其中尾数的2个最低有效字节(即,M15-M0)被截断(例如,被设置为0x00h)的FLOAT32*格式,以及其中尾数的最低有效字节(即,M15-M8)被截断(例如,被设置为0x00h)的FLOAT24*格式。
在一个实施例中,FLOAT16*格式浮点数112的字节中的每个字节被存储在存储器120的不同存取单元中。这些字节/位被存储与在FLOAT32*或FLOAT24*数中,它们的(未被截断的)对应部分将被存储的相同的存取组和位置中。这在图1C中由箭头150和箭头151示出,箭头150从浮点数112的最高有效字节延伸到存储器120的组P中的位置A1;并且箭头151从数112的第二最高有效字节延伸到存储器120的组P+1的位置A1;FLOAT32*数的最低有效两个字节可以被存储在其中的组P+2中的位置A1、以及组P+3中的位置A1可以被可选地设置为0x00h。这在图1C中通过组P+2和P+3的位置A1中的“0”来图示。
将FLOAT16*数的每个字节放置在与FLOAT32*和FLOAT24*数相同的位置和存取组中允许对于FLOAT32*数、FLOAT24*数、以及较低精度的FLOAT16*数使用相同的存取模式——除了最后一个或两个存取/突发(即,根据需要,用以取回或存储1个或两个最低有效字节)不需要被执行。这允许FLOAT16*数使用2个突发、而不是针对FLOAT32*数所需要的4个突发来取回。因此,16位浮点数中的64个最高有效字节可以通过第一突发来取回/存储,而尾数的其余位M23-M16通过第二突发来取回/存储。第三突发或第四突发无需针对FLOAT16*格式数来执行——由此节省了存储器通道带宽/周期。
在图1D中,示出了8位浮点数的示例格式。该示例数被标记为FLOAT8*113。8位浮点数包括1个字节。类似于FLOAT32*、FLOAT24*和FLOAT16*格式,FLOAT8*格式的一个字节包括针对指数符号的一位SE、指数的6位(E5-E0)和针对尾数符号的一位SM。因此,应理解,FLOAT8*格式与以下等同:其中尾数的3个最低有效字节(即,M23-M0)被截断(例如,被设置为0x00h)的FLOAT32*格式;其中尾数的2个最低有效字节(即,M23-M8)被截断(例如,被设置为0x00h)FLOAT24*格式;以及尾数的最低有效字节(即,M23-M16)被截断(例如,被设置为0x00h)的FLOAT16*格式。
在一个实施例中,FLOAT8*格式的浮点数113的字节被存储在于在FLOAT32*、FLOAT24*和/或FLOAT16*数中,它们的(未被截断的)对应部分将被存储的相同的存取组和位置中。这在图1D中通过箭头150来图示,箭头150从浮点数113的最高有效字节延伸到存储器120的组P中的位置A1。FLOAT32*数的3个最低有效字节将被存储在其中的组P+1中的位置A1、组P+2中的位置A1和组P+3中的位置A1可以被可选地设置为0x00h。这在图1D中通过组P+1、组P+2和组P+3的位置A1中的“0”来图示。
将FLOAT8*数的字节放置在与FLOAT32*、FLOAT24*和FLOAT16*数相同的位置和存取组中允许将相同的存取模式用于FLOAT32*数、FLOAT24*数、FLOAT16*数、以及较低精度的FLOAT8*数——除了最后一个、两个或三个存取/突发(即,根据需要,用以取回/存储一个、两个或三个最低有效字节)不需要被执行。这允许FLOAT8*数使用1个突发,而不是针对FLOAT32*数所需的4个突发来取回。因此,8位浮点数的64个最高有效字节可以通过单个突发来取回/存储。第二、第三或第四突发无需针对FLOAT8*格式数来执行——由此节省了存储器通道带宽/周期。
图2是图示了处理多个浮点数格式的系统的框图。在图2中,处理系统200包括处理器210和存储器设备220。处理器210包括一个或多个处理器核心211、浮点格式处理装置215、控制器212、命令地址接口213和数据接口214。存储器设备220包括一个或多个存储器核心221、命令地址接口223、数据接口224、控制电路装置222和数据路径电路装置226。控制电路装置222包括列定序器225。
处理器核心211被可操作地耦合到浮点格式处理装置215和控制器212。浮点格式处理装置215被可操作地耦合到处理器核心211和控制器212。控制器212被可操作地耦合到处理器核心211、浮点格式处理装置215、命令地址接口213和数据接口214。
存储器设备220的命令接口223被可操作地耦合到控制电路装置222。控制电路装置222被可操作地耦合到存储器核心221。存储器核心221被可操作地耦合到数据路径电路装置226。数据路径电路装置226被可操作地耦合到数据接口224。处理器210的命令地址接口213被可操作地耦合到存储器设备220的命令地址接口223。存储器设备220的数据接口224被可操作地耦合到处理器210的数据接口214。
处理器210和存储器设备220可以是或包括集成电路类型的设备,诸如通常被称为“芯片”。诸如控制器212的存储器控制器管理去往和来自存储器设备和/或存储器模块的数据流。存储器设备220可以是独立设备,或者可以是存储器模块或其部件。例如,存储器控制器可以是北桥芯片、专用集成电路(ASIC)设备、图形处理器单元(GPU)、片上系统(SoC)或者包括许多电路块(诸如,选自图形核心、处理器核心以及MPEG编码器/解码器等)的集成电路设备。例如,如图2所描绘的,存储器控制器212可以被包括在具有一个或多个处理器核心211的单个裸片上,或者可以被包括作为较复杂的集成电路系统的一部分,诸如片上系统(SOC)的块。存储器设备220可以包括动态随机存取存储器(DRAM)核心或其他类型的存储器核心,例如,静态随机存取存储器(SRAM)核心或者诸如闪存的非易失性存储器核心。
控制器212经由至少一个命令地址接口213而被可操作地耦合到存储器220。控制器212被可操作地耦合到存储器220来将命令发送给存储器220。存储器220经由对应的命令地址接口223来接收命令(和地址)。存储器220经由至少一个数据接口224来与处理器210传达数据。处理器210(特别地,以及控制器212)经由对应的数据接口214来与存储器220传达数据。
浮点格式处理装置215从处理器核心211接收浮点数。这些浮点数可以具有不同的格式和/或不同的精度。浮点格式处理装置根据它们的精度来处理(例如,解组装,disassembly)这些浮点数。例如,浮点格式处理可以处理具有第一精度(例如,32位)的浮点数,使得这些数可以(例如,由控制器212)被存储在非连续寻址位置中的多个位块中。例如,具有第一精度的这些浮点数的最高有效字节被存储在存储器220中的第一地址范围中;第二最高有效字节被存储在第二地址范围中,以此类推。类似地,浮点格式处理装置可以处理具有第二精度的浮点数(例如,16位),使得这些数可以(例如,由控制器212)被存储在非连续寻址位置中的用于以第一精度存储数的位块的子集中。因此,用于存储给定第二精度数的块的子集对应于对应第一精度浮点数的第二精度版本。与以选定精度的浮点数的集合相对应的多个非连续寻址的位置可以通过浮点格式处理装置而被组装成连续寻址的数据块(例如,突发、页等),以由控制器212(使用命令地址(CA)接口213和CA接口223)而经由数据(DQ)接口214和DQ接口224存储到存储器设备220中。
例如,FLOAT32*格式的浮点数的字节中的每个字节可以被存储在存储器220的不同存取单元(例如,组和/或存储器地址范围)中。多个FLOAT32*数的集合可以被组装,使得第一事务(例如,突发)将FLOAT32*数的集合的所有相应最高有效字节在单个事务中存储到第一存取单元。第二事务然后可以将相应的第二最高有效字节存储到第二存取单元,依此类推。
在一个实施例中,存储器设备220(特别地,以及列定序器225)被配置(和/或命令)来接收第一事务,并且然后生成针对随后的较低有效字节的内部存取而无需接收附加事务。例如,控制器212可以利用精度的指示符(例如,字节的数目)来配置存储器设备220(和/或向存储器设备发送命令),每个浮点数由该精度组成。该指示符可以确定在新的事务地址被要求之前,存储器设备220要存储在存储器核心221中的存取单元的数目。换言之,存储器设备220可以被配置为(和/或命令为)存储FLOAT32*数的集合,其中单独FLOAT32*数的每个字节被存储在不同的存取单元中。因此,控制器212可以向存储器设备220传送第一地址,从而指示FLOAT32*浮点数的集合中的每个浮点数的第一字节(例如,最高有效的)将被存储的位置(例如,组P)。随后,浮点数的集合中的每个浮点数的(例如,下一最高有效的)第二字节可以经由DQ接口214来发送并且被存储,而无需经由CA接口223指定的新地址,这是因为存储器设备220已利用存取单元的大小(例如,突发大小)和FLOAT32*数中的字节数目(4)二者进行了配置(和/或命令)。列定序器225用作生成对存储器核心221的内部寻址,其将FLOAT32*格式数的各个字节存储在适当的存取单元(例如,P、P+1等)中而无需接收针对每个突发的新地址。在一些实施例中,定序器还能够执行其中存储器阵列的各部分同时接收唯一地址的地址修改,或者执行与控制器所请求的数据格式相关的地址偏移。
类似地,存储器设备220可以被配置(和/或命令)为存储FLOAT16*数的集合,其中单独FLOAT16*数的每个字节被存储在不同的存取单元中。因此,控制器212可以向存储器设备220传送第一地址,从而指示FLOAT16*浮点数的集合中的每个浮点数的(例如,最高有效的)第一字节将被存储在位置(例如,组P)。随后,浮点数的集合中的每个浮点数的(例如,最低有效的)第二字节位可以经由DQ接口214来发送并且被存储,而无需经由CA接口223指定的新地址,这是因为存储器设备220已利用存取单元的大小(例如,突发大小)和FLOAT16*数中的字节数(2)二者进行了配置(和/或命令)。列定序器225用作生成对存储器核心221的内部寻址,其将FLOAT16*格式数的各个字节存储在适当的存取单元(例如,P、P+1等)中而无需接收组针对每个突发的新地址。类似的过程可以被用来存储FLOAT8*和FLOAT24*数。
控制器212可以利用将被取回的精度(无论数和/或数的集合的精度如何)的指示符(例如,字节数目)来配置存储器设备220。该指示符可以确定在新的事务地址被要求之前,存储器设备220将从存储器核心221中取回的存取单元的数目。换言之,存储器设备220可以被配置(和/或命令)为取回最初被存储为FLOAT32*数的FLOAT24*数的集合。在单独数的每个字节被存储在不同的存取单元中的情况下,对比原始存储的精度低的数的取回可以通过传递较少的突发来完成。
例如,控制器212可以向存储器设备220传送第一地址,从而指示将从中取回FLOAT32*、FLOAT24*、FLOAT16*或FLOAT8*浮点数的集合中的每个浮点数的第一字节(例如,最高有效字节)的位置(例如,组P)。随后,浮点数的集合中的每个浮点数的(例如,下一最高有效的)第二字节(如果适用)可以经由DQ接口214来取回并发送而无需经由CA接口223指定的新地址,这是因为存储器设备220已利用存取单元的大小(例如,突发大小)和最大精度浮点数中的字节数目(例如,如果FLOAT32*是最高精度,则最大突发数目为4)二者进行了配置(和/或命令)。列定序器225用作生成对存储器核心221的内部寻址,其在适当的存取单元(例如,P、P+1等)中取回经配置(和/或命令)的格式的各个字节而无需接收针对每个突发的新地址。
例如,控制器212可以向存储器设备220传送第一地址,从而指示将被取回的例如FLOAT24*浮点数的集合中的每个浮点数的(例如,最高有效的)第一字节的位置(例如,组P)。随后,FLOAT24*的浮点数的集合中每个浮点数的(例如,下一最高有效的)第二字节可以经由DQ接口224来取回和发送而无需经由CA接口223指定的新地址,这是因为存储器设备220已利用存取单元的大小(例如,突发大小)和最大精度浮点数中的字节数目(例如,对于FLOAT24*为3)二者进行了配置(和/或命令)。列定序器225用作生成对存储器核心221的内部寻址,其在适当的存取单元(例如,P、P+1等)中取回FLOAT24*格式的各个字节而无需接收针对每个突发的新地址。
类似地,存储器设备220可以被配置(和/或命令)为取回FLOAT16*数的集合,其中单独FLOAT16*数的每个字节从不同的存取单元中取回。因此,控制器212可以向存储器设备220传送第一地址,从而指示FLOAT16*浮点数的集合中的每个浮点数的(例如,最高有效的)第一字节被存储的位置(例如,组P)。随后,浮点数的集合中每个浮点数的(例如,最低有效的)第二字节可以经由DQ接口224来取回和发送而无需经由CA接口223指定的新地址,这是因为存储器设备220已利用存取单元的大小(例如,突发大小)和FLOAT16*数中的字节数目(2)进行了配置(和/或命令)。列定序器225用作生成对存储器核心221的内部寻址,其在适当的存取单元(例如,P、P+1等)中取回FLOAT16*格式数的各个字节。类似的过程可以被用来取回其他大小/精度的数。
一旦被取回,浮点格式处理装置215就从控制器212接收数据突发,该数据突发包括浮点数的集合的各部分。浮点格式处理装置215根据浮点数的精度来对浮点数进行处理(例如,重新组装)。例如,浮点格式处理装置215可以从具有第一精度(例如,32位)的多个(例如,4个)字节(其先前被存储在非连续存储器220位置中)浮点数进行重组,使得这些数可以由处理器核心211来处理。例如,具有第一精度的这些浮点数的最高有效部分(例如,字节)可能已被存储在存储器220中的第一地址范围中;第二最高有效部分被存储在第二地址范围中,依此类推。因此,至少两个部分将从存储器220到达,而其他数据介入在这些部分之间(例如,其他浮点数的其他部分)。浮点数的多个非连续寻址部分可以通过浮点格式处理装置215而被组装为完整的浮点数,完整的浮点数被提供给处理器核心211。
在一个实施例中,为了将多个精度的浮点数解组装,浮点处理装置215可以在将浮点数存储到存储器设备220时,以第一顺序读取浮点寄存器的各部分或浮点高速缓存行的各部分。为了将多个精度的浮点数重新组装,浮点处理装置215可以在将浮点数取回到存储器设备220时,以第一顺序写入浮点寄存器的各部分或者浮点高速缓存行的各部分。
图3是图示了存取具有不同精度的浮点数的方法的流程图。图3中所示的步骤例如可以由系统200的一个或多个元件来执行。第一存取命令被接收(302),第一存取命令包括指示响应于第一存取命令而将被执行的连贯事务的第一数目的信息,第一数目的连贯事务与第一精度数格式相对应。例如,存储器设备220可以经由CA接口223来接收存取命令,存取命令包括指示第一数目(例如,4)的事务的信息(例如,位),该第一数目的事务响应于该命令而将被执行,而无需新地址被指定。在另一示例中,存储器设备220可以由控制器212(例如,在寄存器中)利用第一数目(例如,4)的事务进行预先配置(和/或命令),该第一数目(例如,4)响应于该命令而将被执行,而无需新地址被指定。然后,当可变精度类型的存取命令被接收时,经预先配置(和/或命令)数目的事务在无需指定新地址的情况下被执行。
第二存取命令被接收(304),第二存取命令包括指示响应于第二存取命令而将被执行的连贯事务的第二数目的信息,第二数目的连贯事务与第二精度数格式相对应。例如,存储器设备220可以经由CA接口223来接收存取命令,存取命令包括指示第二数目(例如,2)的事务的信息(例如,位),第二数目的事务响应于该命令而被执行而无需指定新地址。在另一示例中,存储器设备220可以由控制器212(例如,在寄存器中)利用第二数目(例如,2)的事务进行预先配置(和/或命令),第二数目的事务响应于该命令而被执行而无需指定新地址。然后,当可变精度类型的存取命令被接收时,经预先配置(和/或命令)的第二数目的事务在无需指定新地址的情况下被执行。
图4是图示了在存储器设备中以不同的精度存储和取回浮点数的方法的流程图。图4中所示的步骤例如可以通过系统200的一个或多个元件来执行。通过将第一多个位块存储在第一非连续寻址的位置中,第一浮点数以第一精度被存储,其中第一多个位块包括第一多个位块的第一子集,第一多个位块的第一子集与第一浮点数的第二精度版本相对应(402)。例如,在突发通过浮点格式处理装置215被格式化之后,控制器212可以例如以FLOAT32*格式来存储第一浮点数(作为集合的一部分)。如本文参考图1A至图1D所讨论的,FLOAT32*格式包括与FLOAT24*、FLOAT16*和FLOAT8*格式分别对应的位的各种子集。
通过取回第一多个位块的第一子集,从第二非连续寻址的位置中取回第二浮点数,第二浮点数是第一浮点数的第二精度版本(404)。例如,控制器212可以从FLOAT32*格式数被存储在其中的非连续寻址位置的子集,取回例如以FLOAT24*格式的第二浮点数(作为集合的一部分)。
图5是图示了从存储器设备取回浮点数、以及将浮点数存储到存储器设备的方法的流程图。例如,图5所示的步骤可以由系统200的一个或多个元件来执行。通过第一连贯存储器事务,浮点数的第一集合被接收,其中浮点数的第一集合的各第一部分均是从存储器设备中的非连续寻址的位置接收,其中第一部分中的每个第一部分响应于第一连贯存储器事务中的不同事务而被接收(502)。例如,处理器210(特别地,以及浮点(FP)格式处理器215)可以接收分散在从存储器设备220接收的多个数据突发之上的浮点数的集合。响应于经由CA接口213发送的单个命令,这些数据突发可以从存储器设备220接收,其中随后数据突发的地址由存储器设备220中的列定序器225来计算。
浮点数的第一集合的第一部分被布置到浮点数的第一集合中(504)。例如,浮点格式处理装置215可以接收由存储器设备220响应于“多精度”存储器存取命令而发送的数据突发。浮点格式处理器215可以将浮点数的各部分布置到完整的浮点数中。
浮点数的第二集合从处理器接收(506)。例如,浮点格式处理装置215可以从处理器核心211接收浮点数的集合。该集合中的浮点数的数目可以对应于存取单元和/或数据突发大小。
通过第二连贯存储器事务,浮点数的第二集合的第二部分被传送,以便被存储在存储器设备中的非连续寻址位置中,其中第二部分中的每个部分作为第二连贯存储器事务中的不同事务的部分进行传送(508)。例如,控制器212可以使用与存储器设备220的单独的事务,来传送从处理器核心211接收的集合中的浮点数的单独部分。换言之,例如,多个浮点数的集合可以被组装,使得第一事务(例如,突发)在单个事务中,将浮点数的集合的所有相应最高有效字节存储到第一地址范围。第二事务然后可以将相应第二最高有效字节存储到第二(不同)地址范围,依此类推。
图6A至图6F是图示了使用列偏移(column offset)来高效地存取具有不同精度的浮点数的图。列偏移(又被称为粒度存储器列存取)在Hampel等人的、题目为“GRANULARITYMEMORY COLUMN ACCESS”的美国专利号6,825,841(以下称为“Hampel”)中描述,出于所有目的,其整体通过引用并入本文。
在Hampel中描述的一个方面是一种存储器设备(例如,存储器设备220),该存储器设备同时存取不同存储器阵列,其中不同列可以针对每个存储器阵列来寻址。因此,例如,对于32位存取,32位中的第一字节可以被存储在第一阵列中/从第一阵列取回,第二字节被存储在第二阵列中/从第二阵列取回,第三字节被存储在第三阵列中/从第三阵列取回,并且第四字节被存储在第四阵列中/从第四阵列取回。但是,这些第一字节、第二字节、第三字节和第四字节中的每个字节可以被存储在不同的列地址中。该方面可以被用于高效地存储/取回具有不同精度的浮点数的各部分。
图6A图示了存储器设备中的示例浮点格式的各部分的布置,该存储器设备可以使用不同的列地址来存取多个阵列(例如,如Hampel中所述)。在图6A至图6D中,五个32位浮点数A、B、C、D和E被图示。这些在图6A至图6D中被标记为FLOAT32*-A、FLOAT32*-B、FLOAT32*-C、FLOAT32*-D、FLOAT32*-E。这些数中每个数的各部分(例如,字节)被表示如下:SX是符号和指数字节(例如,最高有效字节),MX2是尾数的最高有效字节,MX1是尾数的第三最高有效字节,并且MX0是尾数的最低有效字节,其中X是浮点标记(例如,SB是浮点数“B”的图示中的符号和指数字节)。
浮点数A、B、C、D和E例如被存储在四个存储器阵列W 651、X 652、Y 653和Z 654的单个行中。字节宽的成组的列感测放大器(或者与将行读取/写入到存储器阵列651-654中相关联的其他存储器元件)利用阵列标记(根据需要,W、X、Y或Z)、以及表示字节宽组的列地址的一数字来标记(例如,X0是在阵列X 652的行中寻址的一列组的第一字节的标签,X1是在阵列X 652的行中寻址的一列组的第二字节的标签,以此类推)。
每个阵列651至654为每个事务提供(或接收)去往(或来自)接口660的相同8位字节。因此,在图6A至图6D中,接口660的字节被标记为W-BYTE I/F(W字节接口)661、X-BYTEI/F(X字节接口)662、Y-BYTE I/F(Y字节接口)663、Z-BYTE I/F(Z字节接口)664。
在图6A至图6D中,浮点数A的各部分(例如,各字节)按如下方式存储:SA被存储在字节组W0中,MA2被存储在X0中,MA1被存储在Y0中,并且MA0被存储在Z0中。浮点数B按如下方式存储:SB被存储在字节组Y1中,MB2被存储在Z1中,MB1被存储在W1中并且MB0被存储在X1中。浮点数C按如下方式存储:SC被存储在字节组X2中,MC2被存储在W2中,MC1被存储在Z2中,MC0被存储在Y2中。浮点数D按如下方式存储:SD被存储在字节组Z3中,MD2被存储在Y3中,MD1被存储在X3中,MD0被存储在W3中。该模式然后重复,并且浮点数E使用与浮点数A相同的部分到列组指派方式来存储:SE被存储在字节组W0中,ME2被存储在X0中,ME1被存储在Y0中并且ME0被存储在Z0中。该模式针对附加浮点数(例如,F、G、H等,为简洁起见,在图6A至图6D中未示出)继续。
图6B图示了第一FLOAT32*格式数的存储和存取。该第一数(FLOAT32*-A)被存储在零(0)的列组地址处。因此,为了存取(读取或写入)FLOAT32*-A,W0、X0、Y0和Z0列组需要被存取。因此,在图6B中,SA被存储在阵列W 651的W0列组中;MA2被存储在阵列X 652的X0列组中;MA1被存储在阵列Y 653的Y0列组中;并且MA0被存储在阵列Y 654的Z0列组中。当第一FLOAT32*格式数被读取时,阵列W 651经由列组W0将所取回的SA值提供给W字节接口661;阵列X 652经由列组X0而将所取回的MA2值提供给X字节接口662;阵列Y 653经由列组Y0而将所取回的MA1值提供给Y字节接口663;并且阵列Z 654经由列组Z0而将所取回的MA0值提供给Z字节接口664。
图6C图示了第二FLOAT32*格式数的存储和存取。该第二数(FLOAT32*-B)被存储在一(1)的列组地址处。因此,为了存取(读取或写入)FLOAT32*-B,W1、X1、Y1和Z1列组被存取。因此,在图6C中,SB被存储在阵列Y 653的Y1列组中;MB2被存储在阵列Z 654的Z1列组中;MB1被存储在阵列W 651的W1列组中;并且MB0被存储在阵列X 652的X1列组中。当第二FLOAT32*格式数被读取时,阵列W 651经由列组W1而将所取回的MB1值提供给W字节接口661;阵列X652经由列组X1而将所取回的MB0值提供给X字节接口662;阵列Y 653经由列组Y1而将所取回的SB值提供给Y字节接口663;并且阵列Z 654经由列组Z1而将所取回的MB2值提供给Z字节接口664。因此,应理解,经由接口660接收的32位值的各字节在被处理器使用之前,需要被重新布置(例如,通过FP格式处理装置115)。
图6D图示了使用列偏移来存储和存取前两个FLOAT16*格式数。两个FLOAT16*数中的第一数(FLOAT16*-A)被存储在零(0)的列组地址处。两个FLOAT16*数中的第二数(FLOAT16*-B)被存储在一(1)的列组地址中。因此,为了存取(读取或写入)第一数(FLOAT16*-A),W0和X0列组被存取。为了存取第二数(FLOAT16*-B),Y1和Z1列组被存取。因此,当这两个FLOAT16*格式数被存取时,阵列W 651和X 652利用零(0)的列偏移进行配置(和/或命令)。阵列Y 653和Z 654利用一(1)的列偏移进行配置(和/或命令)。结果是,当被存取时,阵列W 651经由列组W0而将所取回的SA值提供给W字节接口661;阵列X 652经由列组X0而将所取回的MA2值提供给X字节接口662;阵列Y653经由列组Y1而将所取回的SB值提供给Y字节接口663;并且,阵列Z 654经由列组Z1而将所取回的MB2值提供给Z字节接口664。因此,通过为Y 653和Z 654阵列选择1的偏移,两个不同的FLOAT16*数(例如,FLOAT16*-A和FLOAT16*-B)可以使用相同的地址/事务来进行存取。
图6E图示了使用列偏移来存储和存取两个第二FLOAT16*格式数。两个第二FLOAT16*数中的第一数(FLOAT16*-C)被存储在二(2)的列组地址中。两个第二FLOAT16*数中的第二数(FLOAT16*-D)被存储在三(3)的列组地址中。因此,为了存取(读取或写入)第一数(FLOAT16*-C),W2和X2列组被存取。为了存取第二数(FLOAT16*-D),Y3和Z3列组被存取。因此,当两个第二FLOAT16*格式数被读取时,阵列W 651和X 652利用零(0)的列偏移进行配置(和/或命令),并且被提供给存储器设备的列地址被设置为二(2)(即,COL_ADDR=2——FLOAT16*-C的地址)。阵列Y 653和Z 654利用一(1)的列偏移进行配置(和/或命令)。因此,当被存取时,阵列W 651经由列组W2而将所取回的MC2值提供给W字节接口661;阵列X 652经由列组X2而将所取回的SC值提供给X字节接口662;阵列Y 653经由列组Y3而将所取回的MD2值提供给Y字节接口663;并且阵列Z 654经由列组Z3而将所取回的SD值提供给Z字节接口664。因此,通过为X和Y 653和Z 654阵列选择一个偏移,两个不同的FLOAT16*数(例如,FLOAT16*-C和FLOAT16*-D)可以使用相同的地址/事务来存取。但是,应当理解,经由接口660接收的两个16位值的字节将需要在被处理器使用之前,(例如,由FP格式处理装置215)进行重新布置。
图6F图示了使用列偏移来存储和存取四个FLOAT8*格式数。四个FLOAT8*数中的第一数(FLOAT8*-A)被存储在零(0)的列组地址处。四个FLOAT8*数中的第二数(FLOAT8*-B)被存储在一(1)的列组地址处。四个FLOAT8*数中的第三数(FLOAT8*-C)被存储在二(2)的列组地址处。四个FLOAT8*数中的第四数(FLOAT8*-D)被存储在三(3)的列组地址处。因此,为了存取(读取或写入)第一数(FLOAT8*-A),W0列组被存取。为了存取第二数(FLOAT16*-B),Y1列组被存取。为了存取第三数(FLOAT8*-C),X2列组被存取。为了存取第四数(FLOAT8*-D),Z3列组被存取。因此,当四个FLOAT8*格式数被存取时,阵列W 651利用零(0)的列偏移进行配置(和/或命令);阵列X 652利用二(2)列偏移进行配置(和/或命令);阵列Y 653利用一(1)的列偏移进行配置(和/或命令);并且,阵列Z利用三(3)的列偏移进行配置(和/或命令)。因此,当被存取时,阵列W 651经由列组W0而将所取回的SA值提供给W字节接口661;阵列X 652经由列组X2而将所取回的SC值提供给X字节接口662;阵列Y 653经由列组Y1而将所取回的SB值提供给Y字节接口663;并且阵列Z 654经由列组Z3而将所取回的SD值提供给Z字节接口664。因此,通过选择W 651、X 652、Y 653和Z 654阵列的适当偏移,四个不同的FLOAT8*数可以使用相同的地址/事务来存取。
表1示出了针对8个连贯的FLOAT32*存取的示例字节布置。
表2示出了针对4个连贯的FLOAT16*存取的示例字节布置。
表3示出了针对2个连贯的FLOAT8*存取的示例字节布置。
图7A至图7E图示了存储器设备的配置。在图7A至图7E中,存储器设备700包括行解码器765;存储器阵列W 751、X 752、Y 753和Z 754;精度配置电路装置727;列逻辑728;W阵列列存取块755;X阵列列存取块756;Y阵列列存取块757;Z阵列列存取块;W阵列字节761;X阵列字节762;Y阵列字节763;Z阵列字节764、混合(Swizzle)电路装置777;字节零(0)接口770;字节一(1)接口761;字节二(2)接口772和字节三(3)接口773。列逻辑728可以包括列序列逻辑729。列存取块755至758可以包括列解码器逻辑/电路装置。列存取块755至758可以包括数据路径逻辑/电路装置来对相应存储器阵列751至754的列进行存取/选择/写入等。
行地址(ROW_ADDR)被提供给行解码器765。行解码器在存储器阵列751至754的每个存储器阵列中选择行。存储器阵列751至754中所选择的行的内容被分别提供给列解码器755至758。
精度配置727被可操作地耦合到列逻辑728。如在本文中所引用的Hampel中所述的,精度配置可以利用来配置列逻辑728,偏移影响列解码器755至758的选择。精度配置727还可以为列逻辑提供精度信息,精度信息将列逻辑727配置(和/或命令)为接收第一事务,并且然后生成针对后续字节的内部存取而无需接收附加的事务。例如,参见系统200的讨论,为简洁起见,其在此将不再重复。
列地址(COL_ADDR)被提供给列逻辑728。列逻辑将列地址提供给列解码器755至758。这些列地址可以相同,也可以包括一个或多个偏移。对于存储器阵列751至754的读取,来自列解码器755至758的输出是字节761至764。字节761至764被提供给混合电路装置777。混合电路装置777的输出被提供给字节接口770至773。对于存储器阵列751至754的写入,经由字节接口770至773接收的值被提供给混合电路装置777。混合电路装置777的输出被提供给列解码器755至758。应当理解,使用四(4)个8位字节作为存储器设备700的存取和接口760的宽度仅是示例。每接口组和阵列存取宽度的其他数目(例如,4、16等)的位可以被选择,并且可以彼此不匹配。
如参考图6B和图6D所述,一些FLOAT32*和FLOAT16*存取不需要被重新布置。这在图7B中示出,其中混合电路装置777被配置(和/或命令)为不重新布置从列解码器755至758接收的字节/向列解码器755至758传送的字节。因此,精度配置电路装置727如下配置(和/或命令)混合电路装置777:字节0接口770从W列解码器755接收字节/向W列解码器755传送字节;字节1接口771从X列解码器756接收字节/向X列解码器756传送字节;字节2接口772从Y列解码器757接收字节/向Y列解码器757传送字节;字节3接口773从Z列解码器758接收字节/向Z列解码器758传送字节。
如参考图6C所述,一些FLOAT32*存取需要被重新布置。这在图7C中示出,其中混合电路装置777被配置(和/或命令)为重新布置从列解码器755至758接收的字节。因此,精度配置电路装置727如下配置(和/或命令)混合电路装置777:字节0接口770从Y列解码器757接收字节/向Y列解码器757传送字节;字节1接口771从Z列解码器758接收字节/向Z列解码器758传送字节;字节2接口772从W列解码器755接收字节/向W列解码器755传送字节;字节3接口773从X列解码器756接收字节/向X列解码器756传送字节。
如参考图6E所述,一些FLOAT16*存取需要被重新布置。这在图7D中示出,其中混合电路装置777被配置(和/或命令)为重新布置从列解码器755至758接收的字节。因此,精度配置电路装置727如下配置(和/或命令)混合电路装置777:字节0接口770从X列解码器756接收字节/向X列解码器756传送字节;字节1接口771从W列解码器755接收字节/向W列解码器755传送字节;字节2接口772从Z列解码器758接收字节/向Z列解码器758传送字节;字节3接口773从Y列解码器757接收字节/向Y列解码器757传送字节。
如参考图6F所述,一些FLOAT8*存取需要被重新布置。这在图7D中示出,其中混合电路装置777被配置(和/或命令)为重新布置从列解码器755至758接收的字节。因此,精度配置电路装置727如下配置(和/或命令)混合电路装置777:字节0接口770从W列解码器755接收字节/向W列解码器755传送字节;字节1接口771从Y列解码器757接收字节/向Y列解码器757传送字节;字节2接口772从Y列解码器757接收字节/向Y列解码器757传送字节;字节3接口773从Z列解码器758接收字节/向Z列解码器758传送字节。
应理解,混合电路装置777的配置是示例,其与存储器阵列751至754中所存储的浮点数的格式(例如,FLOAT32*、FLOAT16*等)以及阵列中的那些数的布置(例如,非连续的跨度、MSB第一与非第一或最后等)相关。混合电路装置777的其他配置可以被想到。
在一个实施例中,存储器设备700可以传送/接收未经混合的W字节、X字节、Y字节和Z字节。在这样的实施例中,混合电路装置777的功能可以在主机系统中(例如,在FP格式处理块215或软件中)实现。
图8A是图示了用于存储/取回具有不同精度的浮点数的第一示例功能层级的图。应用软件801选择用于其计算的精度(例如,FLOAT32*、FLOAT16*等)并且将精度配置信息传给操作系统802a。操作系统802a将存储器控制器803a动态地配置(和/或命令)为使用所指定的精度进行操作。存储器控制器803a将精度控制装置804a和/或存储器列电路装置805(例如,利用偏移)动态地配置(和/或命令)为使用所指定的精度进行操作。在一个实施例中,存储器控制器803a或处理器(图8A中未示出)可以包括浮点格式处理器,浮点格式处理器由操作系统802a动态地配置(和/或命令)为使用所指定的精度进行操作。
图8B是图示了用于存储/取回具有不同精度的浮点数的第二示例功能层级的图。应用软件801选择用于其计算的精度(例如,FLOAT32*、FLOAT16*等),并且将精度配置信息传给操作系统802b。操作系统802b将存储器控制器803b动态地配置(和/或命令)为使用所指定的精度进行操作。操作系统802b基于存储器分配/孔(aperture)(例如,存储器页、地址范围等)之间的关联性803b、以及在从那些相应的分配/孔(例如,表)存储/取回数据时将被使用的相关联精度,将存储器控制器803b动态地配置(和/或命令)为使用所指定的精度进行操作。基于从操作系统802b接收的精度信息,存储器控制器803b将精度控制装置804b和/或存储器列电路装置805(例如,利用偏移)动态地配置(和/或命令)为使用所指定的精度进行操作(例如,直到被重新配置和/或被命令使用其他精度)。
图8C是图示了用于存储/取回具有不同精度的浮点数的第三示例功能层级的图。应用软件801选择用于其计算的精度(例如,FLOAT32*、FLOAT16*等)并且将精度配置信息传给操作系统802c。操作系统802c将存储器控制器803c动态地配置(和/或命令)为使用所指定的精度进行操作。存储器控制器803c将精度控制装置804c和/或存储器列电路805(例如,利用偏移)动态地配置(和/或命令)为使用所指定的精度进行操作(例如,直到被重新配置和/或被命令使用不同的精度)。存储器控制器803c基于存储器分配/孔(例如,存储器页、地址范围等)之间的关联性、以及在从那些相应的分配/孔(例如,表)存储/取回数据时所使用的相关联精度,将精度控制装置804c动态地配置(和/或命令)为使用所指定的精度进行操作。
图9是图示了对具有不同精度的浮点数的存取进行配置的方法的流程图。图9所示的步骤可以由系统200、系统800a、系统800b和/或系统800c的一个或多个元件来执行。软件选择即将进行的操作的精度(902)。例如,应用软件801可以为其将要执行的操作选择精度。操作系统将精度传达给存储器控制器(904)。例如,操作系统802a可以利用与关联于存储器分配的精度有关的信息,来动态地配置(和/或命令)存储器控制器803a。
存储器控制器在精度控制块中设置当前精度(906)。例如,存储器控制器803a可以利用精度信息来动态地配置(和/或命令)精度控制装置804a。存储器控制器创建对物理地址的请求(908)。例如,存储器控制器803a可以创建用于以下的请求:从与给定精度相关联的存储器的分配/孔/范围,取回一个或多个浮点数。精度控制块基于精度配置来确定列地址和列偏移(910)。例如,精度控制装置804a可以基于根据表1、表2或表3所配置(和/或命令)的精度,确定列地址和偏移。存储器设备执行请求(912)。一旦请求被执行,存储器控制器就确定精度和/或精度配置是否已改变(914)。如果否,则流程进行到框908。如果精度已由操作系统改变,则流程进行到框906。
图10是处理系统的框图,该处理系统使用存储器设备堆栈来存储具有不同精度的浮点数。在图10中,系统1000包括处理器1010、存储器控制器1012和存储器1020。存储器1020包括基础层1026和存储器层1027。基础层1026包括精度控制块1029。处理器1010被可操作地耦合到存储器控制器1012。存储器控制器1012被可操作地耦合到存储器1020。具体地,存储器控制器1012被可操作地耦合到存储器层1027和精度控制块1029。精度控制块1029也被可操作地耦合到存储器层1027。精度控制块1029可以由存储器控制器1012利用精度信息(例如,偏移和地址跨度)来配置(和/或命令)。精度控制块1029可以利用偏移或其他精度配置信息来配置存储层1027。精度控制块1029可以基于精度配置信息,生成被发送给存储层1027的地址。
图11是处理系统的框图,该处理系统使用存储器模块来存储具有不同精度的浮点数。在图11中,系统1100包括处理器1110、存储器控制器1112和存储器模块1120。存储器模块1120包括存储器设备1121和缓冲器1126。缓冲器1126包括精度控制块1129。处理器1110被可操作地耦合到存储器控制器1112。存储器控制器1112被可操作地耦合到模块1120。具体地,存储器控制器1112被可操作地耦合到存储器设备1121和缓冲器1126。缓冲器1126分发命令并寻址到存储器设备1121。精度控制块1129可以由存储器控制器1112利用精度信息(例如,偏移和地址跨度)来配置(和/或命令)。精度控制块1129可以利用偏移或其他精度配置信息,配置存储器设备1121。精度控制块1129可以基于精度配置信息,生成被发送给存储器设备1121的地址。
图12是处理系统的框图,该处理系统使用直接附接的存储器设备来存储具有不同精度的浮点数。在图12中,系统1200包括处理器1210、存储器控制器1212和存储器设备1220。存储器设备1220包括精度控制块1229和存储器核心1221。处理器1210被可操作地耦合到存储器控制器1212。存储器控制器1212被可操作地耦合到存储器设备1220。精度控制块1229可以由存储器控制器1212利用精度信息(例如,偏移和地址跨度)来配置(和/或命令)。偏移或其他精度配置信息可以由精度控制块1229使用,可以基于精度配置信息生成被发送给存储器核心1221的列地址。
上述方法、系统和设备可以在计算机系统中实现,或者由计算机系统存储。上述方法也可以被存储在非暂态计算机可读介质上。本文描述的设备、电路和系统可以使用本领域中可用的计算机辅助设计工具来实现,并且通过包含此类电路的软件描述的计算机可读文件来体现。这包括但不限于系统200、设备700、系统800a、系统800b、系统800c、系统1000、系统1100和/或系统1200及其部件的一个或多个元素。这些软件描述可能是:行为、寄存器传递、逻辑部件、晶体管和布局几何级别的描述。此外,软件描述可以被存储在存储介质上或通过载波进行传达。
可以实现这样的描述的数据格式包括但不限于:支持行为语言的格式(例如,C)、支持寄存器传送级别(RTL)语言的格式(例如,Verilog和VHDL)、支持几何描述语言的格式(例如,GDSII、GDSIII、GDSIV、CIF和MEBES)以及其他合适的格式和语言。而且,这样的文件在机器可读介质上的数据传递可以在因特网上的各种介质上电子地或者例如经由电子邮件以电子方式来进行。请注意,物理文件可以在机器可读介质(诸如,4毫米磁带、8毫米磁带、3-1/2英寸软盘介质、CD、DVD等)上实现。
图13是图示了用于包括、处理或生成电路部件1320的表示的处理系统1300的一个实施例的框图。处理系统1300包括一个或多个处理器1302、存储器1304和一个或多个通信设备1306。处理器1302、存储器1304和通信设备1306使用任何合适的类型、数目和/或配置的有线和/或无线连接1308来进行通信。
处理器1302执行存储器1304中所存储的一个或多个过程1312的指令,以响应于用户输入1314和参数1316来处理和/或生成电路部件1320。过程1312可以是任何合适的电子设计自动化(EDA)工具或其被用于设计、模拟、分析和/或验证电子电路装置和/或生成用于电子电路装置的光掩模的一部分。如图所示,表示1320包括描述系统200、设备700、系统800a、系统800b、系统800c、系统1000、系统1100和/或系统1200以及它们的部件的全部或部分的数据。
表示1320可以包括行为、寄存器传递、逻辑部件、晶体管和布局几何级别描述中的一个或多个。此外,表示1320可以被存储在存储介质上或通过载波进行传达。
表示1320可以实现在其中的数据格式包括但不限于:支持行为语言的格式(例如,C)、支持寄存器传送级别(RTL)语言的格式(例如,Verilog和VHDL)、支持几何描述语言的格式(例如,GDSII、GDSIII、GDSIV、CIF和MEBES)以及其他合适的格式和语言。而且,这样的文件在机器可读介质上的数据传递可以通过因特网上的各种介质上、或者例如经由电子邮件以电子方式来进行。
用户输入1314可以包括来自键盘、鼠标、语音识别接口、麦克风和扬声器、图形显示器、触摸屏或其他类型的用户接口设备的输入参数。该用户接口可以分布在多个接口设备之间。参数1316可以包括被输入来帮助定义表示1320的规范和/或特性。例如,参数1316可以包括定义设备类型(例如,NFET、PFET等)、拓扑(例如,框图、电路描述、示意图)和/或设备描述(例如,设备性质、设备尺寸、电源电压、仿真温度、仿真模型等)的信息。
存储器1304包括存储过程1312、用户输入1314、参数1316和电路部件1320的任何适当类型、数目和/或配置的非暂态计算机可读存储介质。
通信设备1306包括任何合适的类型、数目和/或配置的有线和/或无线设备,通信设备1306将信息从处理系统1300传送给另一处理或存储系统(未示出)和/或从另一处理或存储系统(未示出)接收信息。例如,通信设备1306可以将电路部件1320传送到另一系统。通信设备1306可以接收过程1312、用户输入1314、参数1316和/或电路部件1320,并且使过程1312、用户输入1314、参数1316和/或电路部件1320存储在存储器1304中。
本文所讨论的实现方式包括但不限于以下示例:
示例1:一种存储器设备,包括:命令接口,用以接收存取命令,所述存取命令包括指示响应于相应存取命令而将被执行的连贯事务的数目的信息;并且连贯事务的数目可配置以至少对应于第一精度数格式和第二精度数格式。
示例2:根据示例1所述的存储器设备,其中与第二精度格式相比,针对第一精度数格式而被执行的连贯事务的所述数目更高。
示例3:根据示例1所述的存储器设备,其中所述存取命令包括读取命令和写入命令。
示例4:根据示例3所述的存储器设备,其中所述写入命令包括指示存储器位置的数目的信息,所述数目的存储器位置将被设置为选定值。
示例5:根据示例4所述的存储器设备,其中所述选定值响应于经由所述命令接口被接收的信息而可配置。
示例6:根据示例5所述的存储器设备,其中所述选定值被存储在存储器设备内部的至少一个寄存器中。
示例7:根据示例4所述的存储器设备,其中所述选定值对应于零。
示例8:一种在存储器设备中存取浮点数的方法,包括:通过将第一多个位块存储在第一非连续寻址的位置中,来以第一精度存储第一浮点数,所述第一多个位块包括所述第一多个位块的第一子集,所述第一多个位块的第一子集与所述第一浮点数的第二精度版本相对应;以及通过取回所述第一多个位块的所述第一子集,从第二非连续寻址的位置取回第二浮点数,所述第二浮点数是所述第一浮点数的所述第二精度版本。
示例9:根据示例8所述的方法,其中所述第二精度小于所述第一精度。
示例10:根据示例8所述的方法,还包括:通过将第二多个位块存储在第二非连续寻址的位置中,来以所述第一精度存储第三浮点数,所述第二多个位块包括所述第二多个位块的第二子集,所述第二多个位块的第二子集与所述第三浮点数的所述第二精度版本相对应;以及通过取回所述第二多个位块的所述第二子集,从第三非连续寻址的位置取回第四浮点数,所述第四浮点数是所述第二浮点数的所述第二精度版本。
示例11:根据示例10所述的方法,其中所述第二非连续寻址的位置相应地与所述第一非连续寻址的位置连续地被寻址。
示例12:根据示例8所述的方法,其中所述第一多个位块包括第一多个位块的第二子集,所述第一多个位块的所述第二子集被设置为选定值。
示例13:根据示例12所述的方法,其中所述选定值响应于经由命令接口被接收的信息而可配置。
示例14:根据示例12所述的方法,其中所述选定值对应于零。
示例15:一种控制器,包括:存取电路装置,用以从至少一个存储器设备并且通过第一多个连续的存储器事务来接收第一多个浮点数,相应的所述第一多个浮点数的第一多个部分将各自从非连续寻址的位置被接收,其中所述第一多个部分中的每个部分响应于所述第一多个连贯存储器事务中的不同存储器事务而被接收;以及浮点数组装电路装置,用以接收相应的所述第一多个浮点数的所述第一部分,并且将相应的所述第一多个浮点数的所述第一部分布置到所述第一多个浮点数中。
示例16:根据示例15所述的控制器,其中浮点数组装电路装置可配置为布置至少具有第一精度的浮点数、以及具有不同于所述第一精度的第二精度的浮点数。
示例17:根据示例15所述的控制器,还包括:浮点数解组装电路装置,用以接收第二多个浮点数,并且用以通过第二多个连贯存储器事务来传送相应的所述第二多个浮点数的第二多个部分,相应的所述第二多个浮点数的所述第二多个部分将各自被存储在非连续寻址的位置中,并且所述第二多个部分中的每个部分作为所述第二多个连贯存储器事务中的不同存储器事务的部分进行传送。
示例18:根据示例17所述的控制器,还包括:浮点数修约电路装置,用以将相应的所述第二多个浮点数的所述第二多个部分的子集设置为选定值。
示例19:根据示例18所述的控制器,其中所述选定值响应于经由命令接口被接收的信息而可配置。
示例20:根据示例18所述的控制器,其中所述选定值对应于零。
为了例示和描述的目的,已给出了本发明的前述描述。并不旨在穷举本发明或将本发明限制为所公开的精确形式,并且根据以上教导,其他修改和变型是可能的。选择和描述实施例是为了最好地解释本发明的原理及其实际应用,从而使得本领域的其他技术人员能够以各种实施例和适合于所设想的特定用途的各种修改来最好地利用本发明。除非受到现有技术的限制,否则所附权利要求旨在解释为包括本发明的其他备选实施例。
Claims (20)
1.一种存储器设备,包括:
命令接口,用以接收存取命令,所述存取命令包括指示响应于相应存取命令而将被执行的连贯事务的数目的信息;并且
连贯事务的所述数目可配置以至少对应于第一精度数格式和第二精度数格式。
2.根据权利要求1所述的存储器设备,其中与所述第二精度格式相比,针对所述第一精度数格式而执行的连贯事务的所述数目更高。
3.根据权利要求1所述的存储器设备,其中所述存取命令包括读取命令和写入命令。
4.根据权利要求3所述的存储器设备,其中所述写入命令包括指示存储器位置的数目的信息,所述数目的存储器位置将被设置为选定值。
5.根据权利要求4所述的存储器设备,其中所述选定值响应于经由所述命令接口被接收的信息而可配置。
6.根据权利要求5所述的存储器设备,其中所述选定值被存储在所述存储器设备内部的至少一个寄存器中。
7.根据权利要求4所述的存储器设备,其中所述选定值对应于零。
8.一种在存储器设备中存取浮点数的方法,包括:
通过将第一多个位块存储在第一非连续寻址的位置中,来以第一精度存储第一浮点数,所述第一多个位块包括所述第一多个位块的第一子集,所述第一多个位块的所述第一子集与所述第一浮点数的第二精度版本相对应;以及
通过取回所述第一多个位块的所述第一子集,从第二非连续寻址的位置取回第二浮点数,所述第二浮点数是所述第一浮点数的所述第二精度版本。
9.根据权利要求8所述的方法,其中所述第二精度小于所述第一精度。
10.根据权利要求8所述的方法,还包括:
通过将第二多个位块存储在第二非连续寻址的位置中,来以所述第一精度存储第三浮点数,所述第二多个位块包括所述第二多个位块的第二子集,所述第二多个位块的所述第二子集与所述第三浮点数的所述第二精度版本相对应;以及
通过取回所述第二多个位块的所述第二子集,从第三非连续寻址的位置取回第四浮点数,所述第四浮点数是所述第二浮点数的所述第二精度版本。
11.根据权利要求10所述的方法,其中所述第二非连续寻址的位置相应地与所述第一非连续寻址的位置被连续地寻址。
12.根据权利要求8所述的方法,其中所述第一多个位块包括所述第一多个位块的第二子集,所述第一多个位块的所述第二子集被设置为选定值。
13.根据权利要求12所述的方法,其中所述选定值响应于经由命令接口被接收的信息而可配置。
14.根据权利要求12所述的方法,其中所述选定值对应于零。
15.一种控制器,包括:
存取电路装置,用以从至少一个存储器设备并且通过第一多个连贯存储器事务来接收第一多个浮点数,相应的所述第一多个浮点数中的第一多个部分将各自从非连续寻址的位置而被接收,其中所述第一多个部分中的每个部分响应于所述第一多个连贯存储器事务中的不同存储器事务而被接收;以及
浮点数组装电路装置,用以接收相应的所述第一多个浮点数的所述第一部分,并且用以将相应的所述第一多个浮点数的所述第一部分布置到所述第一多个浮点数中。
16.根据权利要求15所述的控制器,其中浮点数组装电路装置可配置为布置至少具有第一精度的浮点数、以及具有不同于所述第一精度的第二精度的浮点数。
17.根据权利要求15所述的控制器,还包括:
浮点数解组装电路装置,用以接收第二多个浮点数,并且用以通过第二多个连贯存储器事务来传送相应的所述第二多个浮点数的第二多个部分,相应的所述第二多个浮点数的所述第二多个部分将各自被存储在非连续寻址的位置中,其中所述第二多个部分中的每个部分作为所述第二多个连贯存储器事务中的不同存储器事务的部分而被传送。
18.根据权利要求17所述的控制器,还包括:
浮点数修约电路装置,用以将相应的所述第二多个浮点数的所述第二多个部分的子集设置为选定值。
19.根据权利要求18所述的控制器,其中所述选定值响应于经由命令接口而被接收的信息而可配置。
20.根据权利要求18所述的控制器,其中所述选定值对应于零。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962824049P | 2019-03-26 | 2019-03-26 | |
US62/824,049 | 2019-03-26 | ||
US201962875176P | 2019-07-17 | 2019-07-17 | |
US62/875,176 | 2019-07-17 | ||
PCT/US2020/023584 WO2020197925A1 (en) | 2019-03-26 | 2020-03-19 | Multiple precision memory system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113287098A true CN113287098A (zh) | 2021-08-20 |
Family
ID=72611648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080006598.9A Pending CN113287098A (zh) | 2019-03-26 | 2020-03-19 | 多精度存储器系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220147468A1 (zh) |
CN (1) | CN113287098A (zh) |
WO (1) | WO2020197925A1 (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226737B1 (en) * | 1998-07-15 | 2001-05-01 | Ip-First, L.L.C. | Apparatus and method for single precision multiplication |
US20090089540A1 (en) * | 1998-08-24 | 2009-04-02 | Microunity Systems Engineering, Inc. | Processor architecture for executing transfers between wide operand memories |
CN104145245A (zh) * | 2011-12-30 | 2014-11-12 | 英特尔公司 | 浮点舍入量确定处理器、方法、系统和指令 |
CN105453030A (zh) * | 2013-06-28 | 2016-03-30 | 英特尔公司 | 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统 |
CN107667403A (zh) * | 2015-06-24 | 2018-02-06 | 英特尔公司 | 长突发长度的内部连续行存取 |
US20180107591A1 (en) * | 2011-04-06 | 2018-04-19 | P4tents1, LLC | System, method and computer program product for fetching data between an execution of a plurality of threads |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
USRE33629E (en) * | 1980-02-13 | 1991-07-02 | Intel Corporation | Numeric data processor |
US6122189A (en) * | 1998-10-02 | 2000-09-19 | Rambus Inc. | Data packet with embedded mask |
US6954204B2 (en) * | 2002-07-18 | 2005-10-11 | Nvidia Corporation | Programmable graphics system and method using flexible, high-precision data formats |
DE102004050037B4 (de) * | 2003-10-09 | 2015-01-08 | Samsung Electronics Co., Ltd. | Speicherbauelement, Speichersystem und Betriebsmodussetzverfahren |
US7280428B2 (en) * | 2004-09-30 | 2007-10-09 | Rambus Inc. | Multi-column addressing mode memory system including an integrated circuit memory device |
JP6387711B2 (ja) * | 2014-07-04 | 2018-09-12 | 株式会社ソシオネクスト | データ転送装置及びデータ転送方法 |
US10417218B2 (en) * | 2015-12-23 | 2019-09-17 | Intel Corporation | Techniques to achieve ordering among storage device transactions |
US10997492B2 (en) * | 2017-01-20 | 2021-05-04 | Nvidia Corporation | Automated methods for conversions to a lower precision data format |
US10644721B2 (en) * | 2018-06-11 | 2020-05-05 | Tenstorrent Inc. | Processing core data compression and storage system |
CN110502579A (zh) * | 2019-08-26 | 2019-11-26 | 第四范式(北京)技术有限公司 | 用于批量和实时特征计算的系统和方法 |
-
2020
- 2020-03-19 WO PCT/US2020/023584 patent/WO2020197925A1/en active Application Filing
- 2020-03-19 CN CN202080006598.9A patent/CN113287098A/zh active Pending
- 2020-03-19 US US17/438,844 patent/US20220147468A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226737B1 (en) * | 1998-07-15 | 2001-05-01 | Ip-First, L.L.C. | Apparatus and method for single precision multiplication |
US20090089540A1 (en) * | 1998-08-24 | 2009-04-02 | Microunity Systems Engineering, Inc. | Processor architecture for executing transfers between wide operand memories |
US20180107591A1 (en) * | 2011-04-06 | 2018-04-19 | P4tents1, LLC | System, method and computer program product for fetching data between an execution of a plurality of threads |
CN104145245A (zh) * | 2011-12-30 | 2014-11-12 | 英特尔公司 | 浮点舍入量确定处理器、方法、系统和指令 |
CN105453030A (zh) * | 2013-06-28 | 2016-03-30 | 英特尔公司 | 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统 |
CN107667403A (zh) * | 2015-06-24 | 2018-02-06 | 英特尔公司 | 长突发长度的内部连续行存取 |
Also Published As
Publication number | Publication date |
---|---|
WO2020197925A1 (en) | 2020-10-01 |
US20220147468A1 (en) | 2022-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1977336B (zh) | 改善支持多存储器访问延迟的计算机存储器系统的性能的系统和方法 | |
CN110582745B (zh) | 存储器装置及可促进张量存储器存取的方法 | |
US11862236B1 (en) | Memory component for deployment in a dynamic stripe width memory system | |
US20110029723A1 (en) | Non-Volatile Memory Based Computer Systems | |
CN104503707A (zh) | 读取数据的方法以及装置 | |
US11132124B2 (en) | Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle | |
US20080195798A1 (en) | Non-Volatile Memory Based Computer Systems and Methods Thereof | |
US20230297474A1 (en) | Energy efficient storage of error-correction-detection information | |
KR20170041616A (ko) | Nvdimm을 포함하는 장치 및 그것의 엑세스 방법 | |
US20170255565A1 (en) | Method and apparatus for providing a contiguously addressable memory region by remapping an address space | |
CN114924997A (zh) | 异步正向缓存存储器系统和方法 | |
US9047329B1 (en) | Method and system for an algorithm and circuit for a high performance exact match lookup function | |
KR20040106302A (ko) | 컨트롤러 프로그래밍에 의한 하드웨어에서의 데이터마스크 매핑 | |
CN113287098A (zh) | 多精度存储器系统 | |
US11335430B2 (en) | Error remapping | |
US11836044B2 (en) | Error coalescing | |
CN111694513A (zh) | 包括循环指令存储器队列的存储器器件和方法 | |
Therdsteerasukdi et al. | Utilizing radio-frequency interconnect for a many-DIMM DRAM system | |
US11645212B2 (en) | Dynamic processing speed | |
US10108377B2 (en) | Storage processing unit arrays and methods of use | |
US7636817B1 (en) | Methods and apparatus for allowing simultaneous memory accesses in a programmable chip system | |
US11699468B2 (en) | Memory device, semiconductor system, and data processing system | |
US6834334B2 (en) | Method and apparatus for address decoding of embedded DRAM devices | |
US7760577B1 (en) | Programmable power down scheme for embedded memory block | |
TWI780697B (zh) | 用以管理快閃記憶體模組的方法、快閃記憶體控制器與電子裝置 |
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 |