CN117742594A - 数据存储方法及装置、电子设备和存储介质 - Google Patents

数据存储方法及装置、电子设备和存储介质 Download PDF

Info

Publication number
CN117742594A
CN117742594A CN202311699252.3A CN202311699252A CN117742594A CN 117742594 A CN117742594 A CN 117742594A CN 202311699252 A CN202311699252 A CN 202311699252A CN 117742594 A CN117742594 A CN 117742594A
Authority
CN
China
Prior art keywords
data
target
memory
write data
address
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
Application number
CN202311699252.3A
Other languages
English (en)
Inventor
华芮
陈庆
袁庆
潘于
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202311699252.3A priority Critical patent/CN117742594A/zh
Publication of CN117742594A publication Critical patent/CN117742594A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Static Random-Access Memory (AREA)

Abstract

一种数据存储方法及装置、电子设备及介质。该方法包括获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,存储器包括M列存储体,每个存储体包括多个存储单元,M个写入数据包括第一写入数据和第二写入数据,M为正整数;获取M个写入数据各自的目标地址,M个写入数据各自的目标地址基于M个写入数据各自的初始地址和对应于目标行的偏移值得到;以及将M个写入数据分别写入目标行对应的目标地址;第二写入数据的第二初始地址高于第一写入数据的第一初始地址,第二写入数据的第二目标地址低于第一写入数据的第一目标地址。该方法在避免数据读出可能发生的拥堵问题同时,充分利用到了硬件空间节省了面积,有效提高了工作效率。

Description

数据存储方法及装置、电子设备和存储介质
技术领域
本公开的实施例涉及一种数据存储方法及装置、电子设备和存储介质。
背景技术
在矩阵运算中,两个输入矩阵(例如,矩阵A和矩阵B)的数据在运算过程中一般是先从外部存储器例如双倍速同步动态随机存取内存(Double-Data-Rate SynchronousDynamic Random-Access Memory,DDR)读入局部数据存储器(Local Share Memory,LSM,或者简称为“局部数据存储器”),然后从局部数据存储器中再读入通用寄存器,再送往矩阵运算单元进行运算,运算完成后把结果写回外部存储器DDR。
发明内容
本公开至少一个实施例提供一种数据存储方法,包括:获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,存储器包括M列存储体,每个存储体包括多个存储单元,M个写入数据包括第一写入数据和第二写入数据,M为正整数;获取M个写入数据各自的目标地址,M个写入数据各自的目标地址基于M个写入数据各自的初始地址和对应于目标行的偏移值得到;以及将M个写入数据分别写入目标行对应的目标地址;第二写入数据的第二初始地址高于第一写入数据的第一初始地址,第二写入数据的第二目标地址低于第一写入数据的第一目标地址。
例如,在本公开一实施例提供的方法中,第一目标地址为所述第一初始地址与所述偏移值之和,所述第二目标地址为所述第二初始地址与所述偏移值之和与M之差。
例如,在本公开一实施例提供的方法中,所述第一写入数据包括第一待读取数据,存储器中对象行包括第二待读取数据,所述第一待读取数据的目标地址和所述第二待读取数据的目标地址分别位于所述M列存储体中的不同存储体,使得第一待读取数据和第二待读取数据能够同时读取,所述对象行与所述目标行为所述存储器中不同的两行存储单元。
例如,在本公开一实施例提供的方法中,获取所述M个写入数据各自的目标地址,包括:取所述M个写入数据各自的偏移地址和指示信号,所述偏移地址为各自的初始地址与所述偏移值之和;根据所述指示信号,从所述M个写入数据中选择所述第二写入数据;以及计算所述第二写入数据的偏移地址与M的差值得到所述第二目标地址,所述第一目标地址为所述偏移地址。
例如,在本公开一实施例提供的方法中,指示信号用于指示所述第二写入数据的数量,根据所述指示信号,从所述M个写入数据中选择所述第二写入数据,包括:根据所述指示信号所指示的数量,从所述M个写入数据中选择所述第二写入数据。
例如,在本公开一实施例提供的方法中,所述第二写入数据为所述M个写入数据中连续的n个数据,并且所述n个数据的偏移地址高于所述M个写入数据中其他(M-n)个写入数据,其中,n为正整数。
例如,在本公开一实施例提供的方法中,偏移值基于所述写入数据的精度和多个存储单元每个的位宽确定。
本公开至少一个实施例提供一种数据存储装置,包括:写入数据获取单元,配置为获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,所述存储器包括M列存储体,每个存储体包括多个存储单元,M个写入数据包括第一写入数据和第二写入数据,M为正整数;目标地址获取单元,配置为获取所述M个写入数据各自的目标地址,所述M个写入数据各自的所述目标地址基于所述M个写入数据各自的初始地址和对应于所述目标行的偏移值得到;以及写入单元,配置为将所述M个写入数据分别写入所述目标行对应的所述目标地址;所述第二写入数据的第二初始地址高于所述第一写入数据的第一初始地址,所述第二写入数据的第二目标地址低于所述第一写入数据的第一目标地址。
本公开至少一个实施例提供一种电子设备,包括:处理器;存储器,包括一个或多个计算机程序指令;所述一个或多个计算机程序指令被存储在所述存储器中,并由所述处理器执行时实现本公开任一实施例提供的数据存储方法。
本公开至少一个实施例提供一种计算机可读存储介质,非暂时性存储有计算机可读指令,其中,当所述计算机可读指令由处理器执行时实现本公开任一实施例提供的的数据存储方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1A示出了一种矩阵乘法运算中矩阵A的行和矩阵B的列做点积的示意图;
图1B示出了一种矩阵运算数据流示意图;
图1C示出了一种从外部存储器的数据写入局部数据存储器的示意图;
图1D示出了本公开一些实施例提供的一种增加位移的方式的示意图;
图2示出了本公开至少一实施例提供的一种数据存储方法的流程图;
图3示出了本公开至少一个实施例提供的一种数据存储方法的示意图;
图4示出了本公开至少一个实施例提供的一种图2中步骤S20的方法流程图;
图5示出了本公开至少一个实施例提供的一种数据存储装置500的示意性框图;
图6为本公开一些实施例提供的一种电子设备的示意框图;
图7为本公开一些实施例提供的另一种电子设备的示意框图;以及
图8为本公开一些实施例提供的一种存储介质的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
图1A示出了一种矩阵乘法运算中矩阵A的行和矩阵B的列做点积的示意图。
矩阵运算所需的数据在外部存储器中一般是按照矩阵行方向或者矩阵列方向线性排列的,如图1A所示,矩阵乘法运算C=C+A*B中,需要把矩阵A中的每一行数据和矩阵B中的每一列数据做点积,然后更新矩阵C中对应位置的元素。因此,若矩阵A中的数据在外部存储器中是按列方向线性排列的,那么需要对矩阵A中的数据进行重排,从而使得矩阵A中每一行数据与矩阵B中的每一列数据点积。
图1B示出了一种矩阵运算数据流示意图。
如图1B所示,例如外部存储器DDR存储矩阵A,矩阵A从外部存储器DDR读入局部数据存储器,然后从局部数据存储器中再读入读取和数据重排单元,在读取和数据重排单元进行重新组织重排,例如将按列方向组织的数据重新按照行方向组织。将重新组合重排的数据送往向量通用寄存器(又称为“向量寄存器”)阵列,之后再送往矩阵运算单元进行运算,运算完成后把结果写回外部存储器DDR。局部数据存储器通常是一个使用多个存储体(bank)的静态随机存储器(Static Random Access Memory,SRAM)组成的RAM阵列,可以支持较大的读写数据位宽。
对于一些低精度矩阵运算,从局部数据存储器中读出数据时需要对多列数据同时读出进行重排。同时从局部数据存储器中读取运算矩阵中1列或多列数据,数据在读取阶段将无法避免存储体冲突的情况,严重影响了指令的执行效率。
地址映射一般指不同线程的内存访问请求地址与存储体之间的映射。假设将每一个数据将要访问的地址视为一个坐标,a表示数据位于并行存储范围中存储体的位置,b表示数据在这个存储体中具体的行数,那么每一个数据对应的存储位置可以表示为addr(a,b)。
在图形处理器(graphics processing unit,GPU)中,多个线程可以并行运行并执行同一条指令。对于一条指令,当同一组需要处理的线程中有多个线程请求的存储地址被映射到同一个存储体上,会发生存储体冲突,此时这些请求就会从之前的并行变成串行执行内存访问请求。对于一些8bit、16bit低精度指令,在矩阵运算时存在同时读取多列数据并重新组合的需求,需要读取的数据列数会成倍增长,就会导致非常严重的存储体冲突。
例如,矩阵运算使用数据装载指令从外部存储器把数据写入局部数据存储器,再通过读指令数据从局部数据存储器被读出到向量通用寄存器中进行运算,读出的数据有可能被重新组合。
一般局部数据存储器有32个存储体,每个存储体每1个周期只能指向一次操作,即对一个32bit整数或者1个单精度的浮点型数据的读或写操作,故在本公开的实施例中以32个存储体,每个位宽32bit为例来说明。
图1C示出了一种数据从外部存储器写入局部数据存储器的示意图。
如图1C所示,从外部存储器101读取数据时,线程以16个为一组。例如,先用4条数据装载指令(例如,指令BUF_LOAD_B32)将16×16的矩阵块载入局部数据存储器102。如图1C所示,16×16的矩阵块可以是指16×16个存储单元阵列排布形成的矩阵块,每个存储单元的位宽为32bit。在图1C中每个方块表示一个存储单元,外部存储器101和局部数据存储器102包括的存储单元的位宽均为32bit,即每个存储单元存储32bit的数据。若存储在存储单元中的矩阵元素的数据格式为4bit,那么每个存储单元可以存储8个矩阵元素。若存储在存储单元中的矩阵元素的数据格式为16bit,那么每个存储单元可以存储2个矩阵元素。
局部数据存储器102包括存储体0、存储体1、存储体2、…、存储体31,一共32个存储体。假设数据访问的起始位置是存储体bank0的第0行,对应的存储位置是addr(0,0),剩下连续的数据将被载入连续地址的对应位置。例如,第一个时钟周期(cycle)通过16个线程分别读取外部存储器101第一列中的16个32bit数据,并且依次写入局部数据存储器102的第一行中的前16个存储单元,即addr(0,0)、addr(1,0)、addr(2,0)、…、addr(15,0),第二个时钟周期通过16个线程分别读取第二列中的16个数据,并且依次写入局部数据存储器102的第一行中的后16个存储单元,即addr(16,0)、addr(17,0)、addr(18,0)、…、addr(31,0)。
例如,矩阵中元素的数据格式(即精度)为4bit的整型(即,int4),若在读出数据时需要将原矩阵块对应的数据data(0,0),data(2,0),data(4,0),data(6,0),data(8,0),data(10,0),data(12,0)和data(14,0)的低4bit重新组合再写入向量通用寄存器,这些数据在即有模式下被写入局部数据存储器时映射地址都在bank0中。如图1C所示,数据data(0,0)被载入存储单元addr(0,0),数据data(2,0)被载入存储单元addr(0,1),数据data(4,0)被载入存储单元addr(0,2),数据data(6,0)被载入存储单元addr(0,3),数据data(8,0)被载入存储单元addr(0,4),数据data(10,0)被载入存储单元addr(0,5),数据data(12,0)被载入存储单元addr(0,6),数据data(14,0)被载入存储单元addr(0,7)。想要同时从局部数据存储器102读出data(0,0),data(2,0),data(4,0),data(6,0),data(8,0),data(10,0),data(12,0)和data(14,0)的低4bit就会产生存储体冲突,只能串行进行读取操作,无法在一个时钟周期内完成。
在本公开的一些实施例中,可以以每行增加位移的方式避免bank冲突。图1D示出了本公开一些实施例提供的一种增加位移的方式的示意图。
如图1D所示,在局部数据存储器中采用增加位移的方式的数据存储格式。对于一个32×8的线程块,共有256个线程,例如可以同时并行读出的线程数为32,增加位移的方式就是在每32个线程后增加位移,使数据在硬件上实现错位,从而避免读出时的冲突。
例如,如图1D所示,存储于局部数据存储器第二行中的数据整体向右偏移了4个存储单元,最后4个32bit的数据被存储在第三行的存储单元中,每个存储单元用于存储32bit的数据。类似地,存储于局部数据存储器第三行中数据整体向右偏移了8个存储单元,依次类推。
该增加位移的方式能够避免存储体冲突,但是数据存储占用了更多的存储空间。基于此,本公开至少一个实施例提供了另一种存储器的数据存储方法。存储器包括M列存储体,该方法包括:获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,M个写入数据包括第一写入数据和第二写入数据;获取M个写入数据各自的目标地址,M个写入数据各自的目标地址基于M个写入数据各自的初始地址和对应于目标行的偏移值得到;以及将M个写入数据分别写入目标行对应的目标地址;第二写入数据的第二初始地址高于第一写入数据的第一初始地址,第二写入数据的第二目标地址低于第一写入数据的第一目标地址,M为正整数。该数据存储方法不仅能够避免存储体冲突,还能够避免占用更多的存储空间。
图2示出了本公开至少一实施例提供的一种数据存储方法的流程图。
如图2所示,该方法可以包括步骤S10~S30。该数据存储方法应用于存储器。该存储器包括M列存储体,每个存储体深度为N。
步骤S10:获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,M个写入数据包括第一写入数据和第二写入数据。
步骤S20:获取M个写入数据各自的目标地址,M个写入数据各自的目标地址基于M个写入数据各自的初始地址和对应于目标行的偏移值得到。
步骤S30:将M个写入数据分别写入目标行对应的目标地址;第二写入数据的第二初始地址高于第一写入数据的第一初始地址,第二写入数据的第二目标地址低于第一写入数据的第一目标地址,M为正整数。
该数据存储方法减少了数据从存储器中被读出时产生的存储体冲突,最大化利用了存储器的并行性,增加了执行效率。该方法在避免数据读出可能发生的拥堵问题同时,充分利用到了硬件空间节省了面积,有效提高了工作效率。
在本公开的一些实施例中,存储器例如可以是图1B所示的局部数据存储器。该局部数据存储器例如如图1C所示包括32列存储体(即,M=32),每个存储体深度为8。在本公开中,以M=32为例说明本公开的实施方式,但这对本公开没有限定作用。M可以是任何正整数,例如M=64,每个存储体的深度也可以是16等。
存储器例如包括阵列排布的多个存储单元,每列存储单元为一个存储体,位于同一行的多个存储单元分别属于不同的存储体。在存储器存储写入数据时,按照多个存储单元的行方向依次存储。如前述图1C所示,从外部存储器101读取数据时,若线程以16个为一组,数据访问的起始位置是bank0的第0行,对应的存储位置是addr(0,0),剩下连续的数据将被载入连续地址的对应位置。例如,第一个时钟周期(cycle)通过16个线程分别读取第一列中的16个数据,并且依次写入局部数据存储器102的第一行中的前16个存储单元,addr(0,0)、addr(1,0)、addr(2,0)、…、addr(15,0),第二个时钟周期通过16个线程分别读取第二列中的16个数据,并且依次写入局部数据存储器102的第一行中的后16个存储单元,即addr(16,0)、addr(17,0)、addr(18,0)、…、addr(31,0)。
对于步骤S10,可以通过多个时钟周期获取M个写入数据,例如如上所描述的,若线程是16个一组,则通过2个时钟周期获取32个写入数据,每个时钟周期获取16个写入数据。该写入数据是指写入到一个存储单元的数据。
目标行可以是局部数据存储器中用于存储M个写入数据的一行存储单元。写入数据可以来自外部存储器。例如,通过数据装载指令从外部存储器获取M个写入数据。
在本公开的一些实施例中,第一写入数据是指在进行位移后依然位于目标行的数据,第二写入数据是指在进行位移后导致从目标行溢出的数据,例如在图1D的示例中,第二写入数据是在进行位移后位于目标行下一行的数据。在图2示出的实施例中,第二写入数据依然被写入该目标行,例如将第二写入数据的目标地址定位于由于第一写入数据的位移而空出来的存储单元,从而将第二写入数据写入目标行中空出的存储单元。
对于步骤S20,例如对于第一写入数据,根据第一写入数据的初始地址和偏移值得到;对于第二写入数据,根据第二写入数据的初始地址、偏移值和M得到。
偏移值是指在上述图1D所示的增加位移的方式得到的写入数据的位移。在本公开的一些实施例中,偏移值基于写入数据的精度和存储单元的位宽确定。
例如,一个存储单元的位宽是32bit,能够存储8个int4的元素,如果要进行元素重组或重排,那么就需要读取分别位于不同的存储单元(32bit)中的8个元素。因为8个元素分别在8个不同的32bit中,如果不移位,这8个元素会存在同一bank的不同行,因此需要通过移位使得8个元素位于不同的bank中。即,对于int4的元素来说,需要读出8个32bit数据进行重排。局部数据存储器中的32个32bit数据被并行处理,即每个时钟周期可以对32个32bit数据进行读出重排,对于位宽是32bit的存储单元,能够存储8个int4的元素,那么需要读出8个32bit数据进行重排,局部存储器是32个bank,因此为了避免bank冲突,移位使得同一bank的8个32bit分别位于不同的bank即可,因此,对于数据格式为int4的元素来说,偏移值为32/8=4,即朝向存储地址大的方向偏移4个存储单元。这样就能够在一个周期读取32个32bit的数据,并且不会bank冲突。
类似地,每个时钟周期可以对32个32bit数据进行读出重排,一个存储单元的位宽是32bit,能够存储2个int16的元素,那么需要读出2个32bit数据进行重排,局部存储器是32个bank,为了避免bank冲突,移位32/2=16个存储单元就可以实现,这样就能够在一个周期读取32个32bit的数据,并且不会bank冲突。例如,在一个周期同时读取第一行的前16个存储单元,第二行的后16个存储单元。
例如,若矩阵元素的精度为a,存储单元的位宽为b,则一个存储单元能够存储b/a个矩阵元素,若局部数据存储器中C个存储单元中的数据并行处理,则偏移值为C/(b/a),其中,a、b和C均为正整数。
在本公开中,第二写入数据的第二初始地址高于第一写入数据的第一初始地址,第二写入数据的第二目标地址低于第一写入数据的第一目标地址。
例如,第二初始地址位于第一初始地址之后,而第二目标地址位于第一目标地址之前。即,第二初始地址大于第一初始地址,第二目标地址小于第一目标地址。
例如,第一目标地址为第一初始地址与偏移值之和,第二目标地址为第二初始地址与偏移值之和与M之差。
例如,第一目标地址=第一初始地址+偏移值,第二目标地址=第二初始地址+偏移值-M。
该实施例将第二写入数据的目标地址定位于由于第一写入数据的位移而空出来的存储单元,从而将第二写入数据写入目标行中空出的存储单元,从而避免了存储空间的浪费,节约存储空间。
对于步骤S30,将第二写入数据写入第二目标地址,第一写入数据写入第一目标地址,这样M个写入数据依然被写入同一行,不占用下一行的存储空间,从而节约存储空间。
在本公开的一些实施例中,第一写入数据包括第一待读取数据,所述存储器中对象行包括第二待读取数据,第一待读取数据的目标地址和第二待读取数据的目标地址分别位于M列存储体中的不同存储体,使得第一待读取数据和第二待读取数据能够同时读取,所述对象行与所述目标行为所述存储器中不同的两行存储单元。
第一待读取数据例如为第一写入数据中位于一个存储单元中的数据,第二待读取数据为对象行中一个存储单元中的数据。
例如,在图1C的示例中,需要将原矩阵块对应的数据data(0,0),data(2,0),data(4,0),data(6,0),data(8,0),data(10,0),data(12,0)和data(14,0)的低4bit重新组合再写入向量通用寄存器,例如,第一待读取数据为data(2,0),则第二待读取数据可以是data(0,0),data(4,0),data(6,0),data(8,0),data(10,0),data(12,0)和data(14,0)中的任一个。在本公开的实施例中,将data(2,0)的目标地址与data(0,0),data(4,0),data(6,0),data(8,0),data(10,0),data(12,0)和data(14,0)中的任一个分别位于不同的存储体。
下面结合图3对图2所描述的数据存储方法进行进一步地说明。图3示出了本公开至少一个实施例提供的一种数据存储方法的示意图。
如图3所示,存储器包括32个存储体(例如,存储体0、存储体1、…、存储体31),每个存储体为8个深度,即存储器包括8行32列的存储单元。例如,对于int4,若在读出数据时需要将原矩阵块(图1C所示)对应的数据data(0,0),data(2,0),data(4,0),data(6,0),data(8,0),data(10,0),data(12,0)和data(14,0)的低4bit重新组合再写入向量通用寄存器。
针对该情况,如果在从外部存储器将数据载入到局部数据存储器时,采用本公开实施例提供的数据存储方法,达到将矩阵各列在局部数据存储器上实现错位,就可以在一个时钟周期将需要重组的数据一起读出。
对于int4来说同时需要读取并进行重排(即,上述并行处理)的存储体是8,所以矩阵中同时读出的相邻两列数据需要错开的存储体数应该是4。
如图3所示,第二行中的写入数据相对于第一行中的写入数据的偏移量为4,第三行中的写入数据相对于第二行中的写入数据的偏移量为4,依次类推。
由于需要写入第二行存储单元的写入数据的目标地址向右偏移了4个存储单元。在对写入数据进行位移后,矩阵中的数据data(2,0)的存储单元的地址变成了addr(4,1),导致最后4个写入数据301溢出第二行,根据本公开的实施例,最后4个写入数据301的目标地址被确定为第二行中空出的前4个存储单元310,即最后4个写入数据301按照原始的排序写入到存储单元310。
由于需要写入第三行存储单元的写入数据的目标地址向右偏移了8个存储单元,在对写入数据进行位移后,矩阵中的数据data(4,0)的存储单元的地址变成了addr(8,2),导致最后8个写入数据302溢出第三行。根据本公开的实施例,最后8个写入数据302的目标地址被确定为第三行中空出的前8个存储单元320,即最后8个写入数据302按照原始的排序写入到存储单元320。
由于需要写入第四行存储单元的写入数据的目标地址向右偏移了12个存储单元,在对写入数据进行位移后,矩阵中的数据data(6,0)的存储单元的地址变成了addr(12,3),导致最后12个写入数据303溢出第四行。根据本公开的实施例,最后12个写入数据303的目标地址被确定为第四行中空出的前12个存储单元330,即最后12个写入数据303按照原始的排序写入到存储单元330。
由于需要写入第五行存储单元的写入数据的目标地址向右偏移了16个存储单元,在对写入数据进行位移后,矩阵中的数据data(8,0)的存储单元的地址变成了addr(16,4),导致最后16个写入数据304溢出第五行。根据本公开的实施例,最后16个写入数据304的目标地址被确定为第五行中空出的前16个存储单元340,即最后16个写入数据304按照原始的排序写入到存储单元340。
由于需要写入第六行存储单元的写入数据的目标地址向右偏移了20个存储单元,在对写入数据进行位移后,矩阵中的数据data(10,0)的存储单元的地址变成了addr(20,5),导致最后20个写入数据305溢出第六行。根据本公开的实施例,最后20个写入数据305的目标地址被确定为第三行中空出的前20个存储单元350,即最后20个写入数据305按照原始的排序写入到存储单元350。
由于需要写入第七行存储单元的写入数据的目标地址向右偏移了24个存储单元,在对写入数据进行位移后,矩阵中的数据data(12,0)的存储单元的地址变成了addr(24,6),导致最后24个写入数据306溢出第七行。根据本公开的实施例,最后24个写入数据307的目标地址被确定为第七行中空出的前24个存储单元360,即最后24个写入数据306按照原始的排序写入到存储单元360。
由于需要写入第八行存储单元的写入数据的目标地址向右偏移了28个存储单元,在对写入数据进行位移后,矩阵中的数据data(14,0)的存储单元的地址变成了addr(28,7),导致最后28个写入数据307溢出第八行。根据本公开的实施例,最后28个写入数据307的目标地址被确定为第八行中空出的前28个存储单元370,即最后24个写入数据307按照原始的排序写入到存储单元370。
因此,通过本公开的一些实施例提供的数据存储方法需要同时读出的8个数据在局部数据存储器中的存储地址变成了addr(0,0),addr(4,1),addr(8,2),addr(12,3),addr(16,4),addr(20,5),addr(24,6)和addr(28,7)。根据地址可以看出此时不会产生bank冲突,数据在一个时钟周期可以被一起读出。
图4示出了本公开至少一个实施例提供的一种图2中步骤S20的方法流程图。
如图4所示,该方法包括步骤S21~S23。
步骤S21:获取M个写入数据各自的偏移地址和指示信号,偏移地址为各自的初始地址与偏移值之和。
步骤S22:根据指示信号,从M个写入数据中选择第二写入数据。
步骤S23:计算第二写入数据的偏移地址与M的差值得到第二目标地址,第一目标地址为偏移地址。
该方法直接根据指示信号确定第二写入数据,便于第二写入数据的确定,并且不需要增加过多的硬件便能够将第二写入数据写入到第二目标地址。
对于步骤S21,例如外部存储器向局部数据存储器提供写入数据和写入数据的偏移地址。在本公开的实施例中,偏移地址又称为基地址。M个写入数据各自的基地址为各自的初始地址与偏移值之和。即,对于第一写入数据,基地址即为上述第一目标地址,对于第二写入数据的基地址即为第二初始地址与偏移值之和。外部存储器向局部数据存储器提供M个写入数据各自的基地址和指示信号。指示信号用于说明M个写入数据中的哪些是第二写入数据。
在本公开的一些实施例中,M个写入数据可以是分为多个时钟周期获取的。例如,外部存储器一个周期处理16个线程,对于包括32个存储体的存储器来说,每个时钟周期获取16个写入数据,那么32个写入数据需要通过2个时钟周期获取。
对于步骤S22,在本公开的一些实施例中,指示信号用于指示第二写入数据的数量。例如,指示信号等于0表示第二写入数据的数量为0,即当前线程传输的写入数据都属于第一写入数据。例如,指示信号等于4表示当前线程传输的写入数据中有4个第二写入数据。在本公开的一些实施例中,可以选择当前线程传输的写入数据中的最后n个写入数据为第二写入数据,n为指示信号所指示的数量,n为大于或等于0的整数。最后n个写入数据例如是当前线程传输的写入数据中基地址最大的n个写入数据。第二写入数据为M个写入数据中连续的n个数据,并且n个数据的偏移地址高于M个写入数据中其他(M-n)个写入数据,n为正整数。
例如,指示信号为4,则表示当前线程传输的写入数据中的最后4个写入数据为第二写入数据。
图5示出了本公开至少一个实施例提供的一种数据存储装置500的示意性框图。
例如,如图5所示,该数据存储装置500包括写入数据获取单元510、目标地址获取单元520和写入单元530。
写入数据获取单元510配置为获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,其中,存储器包括M列存储体,每个存储体包括多个存储单元,M个写入数据包括第一写入数据和第二写入数据,M为正整数。
写入数据获取单元510例如可以执行图2描述的步骤S10。
目标地址获取单元520配置为获取M个写入数据各自的目标地址,其中,M个写入数据各自的目标地址基于M个写入数据各自的初始地址和对应于目标行的偏移值得到。第二写入数据的第二初始地址高于第一写入数据的第一初始地址,第二写入数据的第二目标地址低于第一写入数据的第一目标地址。
目标地址获取单元520例如可以执行图2描述的步骤S20。
写入单元530配置为将M个写入数据分别写入目标行对应的目标地址。写入单元530例如可以执行图1A描述的步骤S30。
例如,在本公开一实施例提供的数据存储装置500中,第一目标地址为第一初始地址与偏移值之和,第二目标地址为第二初始地址与偏移值之和与M之差。
例如,在本公开一实施例提供的数据存储装置500中,第一写入数据包括第一待读取数据,存储器中对象行包括第二待读取数据,所述第一待读取数据的目标地址和所述第二待读取数据的目标地址分别位于M列存储体中的不同存储体,使得第一待读取数据和第二待读取数据能够同时读取,对象行与目标行为存储器中不同的两行存储单元。
例如,在本公开一实施例提供的数据存储装置500中,目标地址获取单元520包括获取子单元、选择子单元和计算子单元。获取子单元配置为获取M个写入数据各自的偏移地址和指示信号,其中,偏移地址为各自的初始地址与偏移值之和。选择子单元配置为根据指示信号,从M个写入数据中选择第二写入数据。计算子单元配置为计算第二写入数据的偏移地址与M的差值得到第二目标地址,第一目标地址为偏移地址。
例如,在本公开一实施例提供的数据存储装置500中,指示信号用于指示第二写入数据的数量,选择子单元配置为根据指示信号所指示的数量,从M个写入数据中选择第二写入数据。
例如,在本公开一实施例提供的数据存储装置500中,第二写入数据为M个写入数据中连续的n个数据,并且n个数据的偏移地址高于M个写入数据中其他(M-n)个写入数据,其中,n为正整数。
例如,在本公开一实施例提供的数据存储装置500中,偏移值基于写入数据的精度和存储单元的位宽确定。
例如,写入数据获取单元510、目标地址获取单元520和写入单元530可以为硬件、软件、固件以及它们的任意可行的组合。例如,写入数据获取单元510、目标地址获取单元520和写入单元530可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于上述各个单元的具体实现形式,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,数据存储装置500的各个单元与前述的存储方法的各个步骤对应,关于数据存储装置500的具体功能可以参考关于存储方法的相关描述,此处不再赘述。图5所示的数据存储装置500的组件和结构只是示例性的,而非限制性的,根据需要,该数据存储装置500还可以包括其他组件和结构。
本公开的至少一个实施例还提供了一种电子设备,该电子设备包括处理器和存储器,存储器包括一个或多个计算机程序指令。一个或多个计算机程序指令被存储在所述存储器中,并由所述处理器执行时实现上述的存储方法。该电子设备能够在避免数据读出可能发生的拥堵问题同时,充分利用到了硬件空间节省了面积,有效提高了工作效率。
图6为本公开一些实施例提供的一种电子设备的示意框图。如图6所示,该电子设备600包括处理器610和存储器620。存储器620用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器610用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器610运行时可以执行上文所述的总线装置的设计方法中的一个或多个步骤。存储器620和处理器610可以通过总线系统和/或其它形式的连接机构(未示出)互连。
例如,处理器610可以是中央处理单元(CPU)、图形处理单元(GPU)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器610可以为通用处理器或专用处理器,可以控制电子设备600中的其它组件以执行期望的功能。
例如,存储器620可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器610可以运行一个或多个计算机程序模块,以实现电子设备600的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
需要说明的是,本公开的实施例中,电子设备600的具体功能和技术效果可以参考上文中关于数据存储方法的描述,此处不再赘述。
图7为本公开一些实施例提供的另一种电子设备的示意框图。该电子设备700例如适于用来实施本公开实施例提供的数据存储方法。电子设备700可以是终端设备等。需要注意的是,图7示出的电子设备700仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
如图7所示,电子设备700可以包括处理装置(例如中央处理器、图形处理器等)710,其可以根据存储在只读存储器(ROM)720中的程序或者从存储装置780加载到随机访问存储器(RAM)730中的程序而执行各种适当的动作和处理。在RAM 730中,还存储有电子设备700操作所需的各种程序和数据。处理装置710、ROM 720以及RAM730通过总线740彼此相连。输入/输出(I/O)接口750也连接至总线740。
通常,以下装置可以连接至I/O接口750:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置760;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置770;包括例如磁带、硬盘等的存储装置780;以及通信装置790。通信装置790可以允许电子设备700与其他电子设备进行无线或有线通信以交换数据。虽然图7示出了具有各种装置的电子设备700,但应理解的是,并不要求实施或具备所有示出的装置,电子设备700可以替代地实施或具备更多或更少的装置。
例如,根据本公开的实施例,上述数据存储方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述总线装置的设计方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置790从网络上被下载和安装,或者从存储装置780安装,或者从ROM 720安装。在该计算机程序被处理装置710执行时,可以实现本公开实施例提供的数据存储方法中限定的功能。
本公开的至少一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质用于存储非暂时性计算机可读指令,当非暂时性计算机可读指令由计算机执行时可以实现上述的数据存储方法。利用该计算机可读存储介质能够在避免数据读出可能发生的拥堵问题同时,充分利用到了硬件空间节省了面积,有效提高了工作效率。
图8为本公开一些实施例提供的一种存储介质的示意图。如图8所示,存储介质800用于存储非暂时性计算机可读指令810。例如,当非暂时性计算机可读指令810由计算机执行时可以执行根据上文所述的数据存储方法中的一个或多个步骤。
例如,该存储介质800可以应用于上述电子设备600中。例如,存储介质800可以为图6所示的电子设备600中的存储器620。例如,关于存储介质800的相关说明可以参考图6所示的电子设备600中的存储器620的相应描述,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种数据存储方法,包括:
获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,其中,所述存储器包括M列存储体,每个存储体包括多个存储单元,M个写入数据包括第一写入数据和第二写入数据,M为正整数;
获取所述M个写入数据各自的目标地址,其中,所述M个写入数据各自的所述目标地址基于所述M个写入数据各自的初始地址和对应于所述目标行的偏移值得到;以及
将所述M个写入数据分别写入所述目标行对应的所述目标地址;
其中,所述第二写入数据的第二初始地址高于所述第一写入数据的第一初始地址,所述第二写入数据的第二目标地址低于所述第一写入数据的第一目标地址。
2.根据权利要求1所述的方法,其中,所述第一目标地址为所述第一初始地址与所述偏移值之和,所述第二目标地址为所述第二初始地址与所述偏移值之和与M之差。
3.根据权利要求1或2所述的方法,其中,所述第一写入数据包括第一待读取数据,所述存储器中对象行包括第二待读取数据,所述第一待读取数据的目标地址和所述第二待读取数据的目标地址分别位于所述M列存储体中的不同存储体,使得所述第一待读取数据和所述第二待读取数据能够同时读取,所述对象行与所述目标行为所述存储器中不同的两行存储单元。
4.根据权利要求1所述的方法,其中,获取所述M个写入数据各自的目标地址,包括:
获取所述M个写入数据各自的偏移地址和指示信号,其中,所述偏移地址为各自的初始地址与所述偏移值之和;
根据所述指示信号,从所述M个写入数据中选择所述第二写入数据;以及
计算所述第二写入数据的偏移地址与M的差值得到所述第二目标地址,所述第一目标地址为所述偏移地址。
5.根据权利要求4所述的方法,其中,所述指示信号用于指示所述第二写入数据的数量,
根据所述指示信号,从所述M个写入数据中选择所述第二写入数据,包括:
根据所述指示信号所指示的数量,从所述M个写入数据中选择所述第二写入数据。
6.根据权利要求4或5所述的方法,其中,所述第二写入数据为所述M个写入数据中连续的n个数据,并且所述n个数据的偏移地址高于所述M个写入数据中其他(M-n)个写入数据,其中,n为正整数。
7.根据权利要求1所述的方法,其中,所述偏移值基于所述写入数据的精度和所述多个存储单元每个的位宽确定。
8.一种数据存储装置,包括:
写入数据获取单元,配置为获取要写入存储器中目标行的连续的M个存储单元的M个写入数据,其中,所述存储器包括M列存储体,每个存储体包括多个存储单元,M个写入数据包括第一写入数据和第二写入数据,M为正整数;
目标地址获取单元,配置为获取所述M个写入数据各自的目标地址,其中,所述M个写入数据各自的所述目标地址基于所述M个写入数据各自的初始地址和对应于所述目标行的偏移值得到;以及
写入单元,配置为将所述M个写入数据分别写入所述目标行对应的所述目标地址;
其中,所述第二写入数据的第二初始地址高于所述第一写入数据的第一初始地址,所述第二写入数据的第二目标地址低于所述第一写入数据的第一目标地址。
9.一种电子设备,包括:
处理器;
存储器,包括一个或多个计算机程序指令;
其中,所述一个或多个计算机程序指令被存储在所述存储器中,并由所述处理器执行时实现权利要求1-7任一项所述的数据存储方法。
10.一种计算机可读存储介质,非暂时性存储有计算机可读指令,其中,当所述计算机可读指令由处理器执行时实现权利要求1-7任一项所述的数据存储方法。
CN202311699252.3A 2023-12-12 2023-12-12 数据存储方法及装置、电子设备和存储介质 Pending CN117742594A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311699252.3A CN117742594A (zh) 2023-12-12 2023-12-12 数据存储方法及装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311699252.3A CN117742594A (zh) 2023-12-12 2023-12-12 数据存储方法及装置、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN117742594A true CN117742594A (zh) 2024-03-22

Family

ID=90255590

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311699252.3A Pending CN117742594A (zh) 2023-12-12 2023-12-12 数据存储方法及装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN117742594A (zh)

Similar Documents

Publication Publication Date Title
US11392488B2 (en) Optimizing storage of application data in memory
US4300234A (en) Address pattern generator for testing a memory
US9146696B2 (en) Multi-granularity parallel storage system and storage
US9323774B2 (en) Compressed pointers for cell structures
CN212112470U (zh) 一种矩阵乘法计算电路
CN108139989B (zh) 配备有存储器中的处理和窄访问端口的计算机设备
CN113032007A (zh) 一种数据处理方法及装置
CN115906720A (zh) 存储器的设计方法、装置、电子设备和存储介质
CN111581595A (zh) 一种矩阵乘法计算方法及计算电路
US6684267B2 (en) Direct memory access controller, and direct memory access control method
CN107451070B (zh) 一种数据的处理方法和服务器
US9026747B2 (en) Memory device with a logical-to-physical bank mapping cache
CN112306420B (zh) 一种基于存储池的数据读写方法、装置、设备及存储介质
JP5917907B2 (ja) 画像処理装置
CN117742594A (zh) 数据存储方法及装置、电子设备和存储介质
KR101331738B1 (ko) 비휘발성 메모리를 위한 수정된 판독 동작
CN106326135B (zh) 一种平移非易失性存储器nvm的数据的方法及装置
CN111694513A (zh) 包括循环指令存储器队列的存储器器件和方法
JPH02260195A (ja) リフレッシュコントロール回路
CN111610933A (zh) 基于ram数据动态更新的数据存储方法、装置和系统
CN110705701A (zh) 一种高并行度的卷积运算方法和电路
US20010042155A1 (en) Instruction memory circuit
CN117891751B (zh) 内存数据访存方法及装置、电子设备与存储介质
US20150160867A1 (en) Multidimenstional storage array access
CN117725352A (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