CN111459552B - 一种内存中并行化计算的方法及装置 - Google Patents

一种内存中并行化计算的方法及装置 Download PDF

Info

Publication number
CN111459552B
CN111459552B CN202010545142.1A CN202010545142A CN111459552B CN 111459552 B CN111459552 B CN 111459552B CN 202010545142 A CN202010545142 A CN 202010545142A CN 111459552 B CN111459552 B CN 111459552B
Authority
CN
China
Prior art keywords
row
calculation
memory
bit
shift
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.)
Active
Application number
CN202010545142.1A
Other languages
English (en)
Other versions
CN111459552A (zh
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.)
Zhejiang Lab
Original Assignee
Zhejiang Lab
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 Zhejiang Lab filed Critical Zhejiang Lab
Priority to CN202010545142.1A priority Critical patent/CN111459552B/zh
Publication of CN111459552A publication Critical patent/CN111459552A/zh
Application granted granted Critical
Publication of CN111459552B publication Critical patent/CN111459552B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Dram (AREA)

Abstract

本发明公开了一种并行化存内计算的方法及装置,该方法利用现有DRAM内存存储电路的充放电特性实现了并行化的加法计算,并且通过优化数据存储及计算流程,进一步提高了数据并行计算的效率。本发明使得数据存储与计算都可以在DRAM中实现,可大大地缓解内存墙问题,同时不需要依赖新型非易失存储器件,可降低内存计算的复杂度和成本。

Description

一种内存中并行化计算的方法及装置
技术领域
本发明涉及计算机技术领域尤其是内存计算领域,具体涉及一种内存中并行化计算的方法及装置。
背景技术
现代计算机系统中,数据在计算单元与内存中的搬移在系统功耗和程序运行时间上都占据了很大的比例。随着多核处理器的出现,越来越多的核被集成进同一芯片中,内存总带宽却并没有成比例的增长,造成了算力与数据传输间的不匹配,因而导致了所谓的“内存墙”问题。与此同时,计算资源虽然在增加,计算资源与动态随机存取存储器(以下简称“DRAM”)之间的通信延迟并没有改善,使得数据的搬移成为系统瓶颈之一。
为了解决这些挑战,业界近年来陆续提出了多种新型计算方式。其中包括近内存计算,存内处理器,存内计算等。典型的存内计算主要基于新型存储介质材料如忆阻器,或者是修改随机存取存储器(以下简称“RAM”)的电路结构。例如,Shubham Jain等人(ShubhamJain, Ashish Ranjan, Kaushik Roy and Anand Raghunathan. Computing in memorywith spin-transfer torque magnetic RAM. IEEE Transactions on Very Large ScaleIntegration (VLSI) Systems. Volume: 26, Issue: 3, March 2018.)提到了利用一种新型非易失性磁随机存储器(以下简称“STT_MRAM”)作为基本单元实现存内计算。这些方法需要修改RAM的结构或者采用新的RAM材料。对于现有的数据中心而言,可能大规模部署还需要花费一定的时间与资金。普林斯顿大学的fei gao等人(Fei Gao,GeorgiosTziantzioulis and David Wentzlaf. ComputeDRAM: In-Memory Compute Using Off-the-Shelf DRAMs. 52nd Annual IEEE/ACM International Symposium onMicroarchitecture, MICRO 2019) 提出了一种利用现有DRAM实现存内计算的方法。它通过修改内存控制器对内存单元的操作时序,实现了普通内存的存内计算。但该方法采用的是比特列式串行(bit-serial)方法进行计算,需要将数据额外的转换成串行存储的方式。
发明内容
针对现有技术的不足,本发明提出一种内存中并行化计算的方法及装置,具体技术方案如下:
一种内存中并行化计算的方法,内存中有多个子阵列,每个子阵列包含多行多列的基本存储单元,参与计算的行地址包括计算数据输入地址、中间结果存放地址和预留计算地址,所述的预留计算地址为连续的三行;
所述的方法具体包括如下步骤:
S1:将位宽都为N比特的数据A、B以及相应的反码
Figure 100002_DEST_PATH_IMAGE001
Figure 967245DEST_PATH_IMAGE002
写入计算数据输入地址中,其中数据格式按照并行方式存放,即同一数据的每一比特位对应相同的行地址,根据数据位宽的不同,占用一个或多个不同列地址;
S2:利用内存按位与操作分别计算中间结果P1和P2,其中P1=
Figure 790844DEST_PATH_IMAGE001
AND B, P2= AAND
Figure 179100DEST_PATH_IMAGE002
S3:分别利用内存按位或操作计算求和S、利用内存按位与操作计算进位C,其中S=P1 OR P2,C=A AND B;
S4:内存控制器读取C,并将C左移得C_shift,假设C位宽为N 比特,则C_shift位宽为(N+1) 比特;
如果C_shift最高位为1,则进位标记carry_flag 置1,否则保持不变;
如果C_shift次高位至C_shift最低位均等于0,则结束计算,将carry_flag作为进位标记输出,S作为和结果输出;否则,则将C_shift次高位至C_shift最低位和S作为输入值重新进入S1计算。
进一步地,设当前子阵列的预留计算地址分别为第i行、第i+1行、第i+2行, 所述的S2中P1的计算过程如下:
(1)分别将
Figure 404545DEST_PATH_IMAGE001
、B用行拷贝命令拷贝至第i行和第i+2行中的任意一行,且
Figure 587265DEST_PATH_IMAGE001
、B不同行,将辅助常数N比特0用行拷贝命令拷贝至第i+1行中,辅助常数N比特0的位宽与A、B相同,每一比特位都为0;
(2)对当前子阵列发送预充电命令;
(3)对预留计算地址第i+1行发送激活命令;
(4)减少激活至预充电时间T1至0,发送当前子阵列预充电命令;
(5)减少预充电至激活时间T2至0,发送预留计算地址第i+2行的激活命令;
(6)等待第i行、第i+1行、第i+2行三行数据同时充放电,第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,实现P1计算;
(7)将P1结果用行拷贝命令拷贝至P1的存放地址中;
所述的S2中P2的计算过程如下:
(1)分别将A、
Figure 163740DEST_PATH_IMAGE002
用行拷贝命令拷贝至当前子阵列的预留计算地址第i行和第i+2行中的任意一行,且A、
Figure 90107DEST_PATH_IMAGE002
不同行,将辅助常数N比特 0用行拷贝命令拷贝至当前子阵列的预留计算地址第i+1中;
后续的步骤(2)~(5)与P1的计算过程的(2)~(5)相同;
(6)等待第i行、第i+1行、第i+2行三行数据同时充放电,第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,实现P2计算;
(7)将P2结果用行拷贝命令拷贝至P2的存放地址中。
进一步地,所述的S2中,将
Figure 170059DEST_PATH_IMAGE001
用行拷贝命令拷贝至第i行和第i+2行中的任意一行的具体过程如下:
①对数据
Figure 789259DEST_PATH_IMAGE001
所在子阵列发送预充电命令;
②对数据
Figure 587451DEST_PATH_IMAGE001
所在行发送激活命令;
③对数据
Figure 51930DEST_PATH_IMAGE001
所在子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对第i行和第i+2行中的任意一行发送激活命令;
⑤等待放大器放大
Figure 251967DEST_PATH_IMAGE001
信号,完成数据拷贝。
进一步地,所述的S2中,将B用行拷贝命令拷贝至第i行和第i+2行中的任意一行的具体过程如下:
①对数据B所在子阵列发送预充电命令;
②对数据B所在行发送激活命令;
③对数据B所在子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对第i行和第i+2行中的任意一行发送激活命令;
⑤等待放大器放大B信号,完成数据拷贝。
进一步地,所述的S2中,将辅助常数N比特0用行拷贝命令拷贝至第i+1行中的具体过程如下:
①对辅助常数N比特0所在子阵列发送预充电命令;
②对辅助常数N比特0所在行发送激活命令;
③对辅助常数N比特0所在子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对第i+1行发送激活命令;
⑤等待放大器放大N比特0信号,完成数据拷贝。
进一步地,所述的S2的步骤(7)通过如下步骤实现:
①在第i行、第i+1行、第i+2行中任选一行,发送预充电命令;
②对第i行、第i+1行、第i+2行任选一行发送激活命令;
③对子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对P1的存放地址发送激活命令;
⑤等待放大器放大信号,完成数据拷贝。
进一步地,所述的利用内存或操作计算求和S的具体过程如下:
1)分别将P1、P2用行拷贝命令拷贝至当前子阵列的预留计算地址第i+1行和第i+2行中的任意一行,且P1、P2不同行,将辅助常数N比特1用行拷贝命令拷贝至当前子阵列的预留计算地址第i行,辅助常数N比特1位宽与A、B相同,每一比特位都为1;
2)对当前子阵列发送预充电命令;
3)对第i+1行发送激活命令;
4)减少激活至预充电时间T1至0,发送当前子阵列预充电命令;
5)减少预充电至激活时间T2至0,发送第i+2行的激活命令;
6)等待第i行、第i+1行、第i+2行三行数据同时充放电;第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,完成P1 OR P2计算;
7)将结果S用行拷贝命令拷贝至S的存放地址中。
进一步地,所述的利用内存与操作计算进位C的具体过程如下:
1)分别将A、B用行拷贝命令拷贝至当前子阵列的预留计算地址第i行和第i+2行中的任意一行,且A、B不同行,将辅助常数N比特0用行拷贝命令拷贝至当前子阵列的预留计算地址第i+1行中,且A、B位宽一致;
2)对当前子阵列发送预充电命令;
3)对第i+1行发送激活命令;
4)减少激活至预充电时间T1至0,发送当前子阵列预充电命令;
5)减少预充电至激活时间T2至0,发送地址2激活命令;
6)等待第i行、第i+1行、第i+2行三行数据同时充放电;第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,完成A AND B计算;
7)将结果C用行拷贝命令拷贝至C的存放地址中。
一种内存中并行化计算的方法,该方法具体包括如下步骤:
S1:将数据A、B以及相应的反码
Figure 872147DEST_PATH_IMAGE001
Figure 892055DEST_PATH_IMAGE002
均写入同一个子阵列的两列,且满足如下条件:
(1)其中一列中的A与另一列中的
Figure 629067DEST_PATH_IMAGE001
在同一行;
(2)其中一列中的B与另一列中的
Figure 480349DEST_PATH_IMAGE002
在同一行;
(3)其中一列中的
Figure 175772DEST_PATH_IMAGE001
与另一列中的A在同一行;
(4)其中一列中的
Figure 948556DEST_PATH_IMAGE002
与另一列中的B在同一行;
(5)其中一列预留空间存放P1,另一列预留空间存放P2;
(6)存放P1的一列中增加一行存放辅助常数,存放P2的一列中对应存放辅助常数同一行的位置存放A或B;
S2:利用内存与操作,其中一列计算中间结果P1,另一列计算中间结果P2,其中,P1=
Figure 20417DEST_PATH_IMAGE001
AND B, P2= A AND
Figure 929467DEST_PATH_IMAGE002
S3:将中间结果P2从其所在列读出并缓存到数据缓冲器,
当存放P2的一列中与存放辅助常数同一行的位置存放A时,将中间结果P2写入存放P1的一列中
Figure 795792DEST_PATH_IMAGE002
所在行;
当存放P2的一列中与存放辅助常数同一行的位置存放B时,将中间结果P2写入存放P1的一列中
Figure 587031DEST_PATH_IMAGE001
所在行;
同时将原来存放P2所在的位置写为N比特0;
S4:在其中一列利用内存或操作计算求和S,在另一列利用内存与操作计算进位C;其中S= P1 OR P2,C=A AND B;
S5:内存控制器读取C,并将C左移得C_shift,假设C位宽N 比特,则C_shift位宽(N+1)比特;
如果C_shift最高位为1,则进位标记carry_flag 置1,否则保持不变;
如果C_shift次高位至C_shift最低位均等于0,则结束计算,将carry_flag作为进位标记输出,S作为和结果输出;否则,则将C_shift次高位至C_shift最低位和S作为输入值重新进入S1计算。
一种内存控制器,该内存控制器包括:
移位控制器,用于读取移位结果,并将计算进位结果进行移位,判断是否有进位以及是否需要下一轮计算;
数据缓冲器,用于读取中间结果和写回内存特定地址;
取反控制器,用于数据的按位取反运算;
计算结果缓冲器,保留计算的结果及进位信息,用于后续计算或者输出结果;
计算控制器,用于管理参与计算地址,控制计算流程完成数据复制及计算。
本发明的有益效果如下:
(1)本发明的计算方法不需要对数据进行额外的转换,因此,对同一数据来说,计算效率高;
(2)本发明将数据存储与计算都在DRAM中实现,可大大地缓解内存墙问题;
(3)本发明直接利用当前通用DRAM存储单元进行逻辑计算,不需要依赖新型非易失存储器件,可降低内存计算的复杂度和成本。
附图说明
图1为现有的内存芯片的结构图;
图2为本发明的内存中并行化计算的方法一的流程图;
图3a、3b、3c为本发明的计算方法一对应的实施例一的计算过程示意图;
图4为本发明的计算方法一对应的实施例二的计算过程示意图;
图5为本发明的内存中并行化计算的方法二的流程图;
图6为本发明的计算方法二对应的其中一个实施例的计算过程示意图;
图7为本发明的内存控制器的架构图;
图8为预充电时间与激活时间示意图。
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
通常来说,内存芯片内部存在一个层次化的结构,如图1所示,每个内存芯片内部通常包含有多个库(bank),每个库中又包含多个子阵列(sub_array),每个子阵列内部包含大量的多行多列的存储单元,参与计算的行地址包括计算数据输入地址、中间结果存放地址和预留计算地址。通过行列地址可以对存储单元进行寻址。当读取数据时,某一行存储单元被选中,通过共享的位线(bit-line)将数据送至放大器(SA)和行缓冲器(row buffer)输出。
图1中的左侧图中A和B分别为需要计算的两个操作数3和1,它们的二进制码分别为0011和0001(
Figure 462583DEST_PATH_IMAGE001
Figure 226139DEST_PATH_IMAGE002
分别为对应的反码1100和1110,可以通过取反模块得到)。A和B存储在同一库的同一个子阵列(sub_array)的其中某一个列中。
对A和B进行并行加法操作,可利用内存与操作和内存或操作的组合来实现。
本发明针对上述操作提出两种计算的方法,下面分别对两种方法进行说明。
一、对于计算方法一
一种内存中并行化计算的方法,其计算流程具体如下,参考图2:
S1:将位宽都为N比特的数据A、B以及相应的反码
Figure 263366DEST_PATH_IMAGE001
Figure 10742DEST_PATH_IMAGE002
写入计算数据输入地址中,其中数据格式按照并行方式存放,即同一数据的每一比特位对应相同的行地址,根据数据位宽的不同,占用一个或多个不同列地址;
S2:利用内存按位与操作分别计算中间结果P1和P2,其中P1=
Figure 424406DEST_PATH_IMAGE001
AND B, P2= AAND
Figure 104786DEST_PATH_IMAGE002
这里以P1为例,设当前子阵列的预留计算地址分别为第i行、第i+1行、第i+2行,所述的S2中P1的计算过程如下:
(1)分别将
Figure 47334DEST_PATH_IMAGE001
、B用行拷贝命令拷贝至第i行和第i+2行中的任意一行,且
Figure 813165DEST_PATH_IMAGE001
、B不同行,将辅助常数N比特0用行拷贝命令拷贝至第i+1行中,辅助常数N比特0的位宽与A、B相同,每一比特位都为0;
其中,将
Figure 30519DEST_PATH_IMAGE001
用行拷贝命令拷贝至第i行和第i+2行中的任意一行的具体过程如下:
①对数据
Figure 768668DEST_PATH_IMAGE001
所在子阵列发送预充电命令;
②对数据
Figure 413276DEST_PATH_IMAGE001
所在行发送激活命令;
③对数据
Figure 869665DEST_PATH_IMAGE001
所在子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对第i行和第i+2行中的任意一行发送激活命令;
⑤等待放大器放大
Figure 625132DEST_PATH_IMAGE001
信号,完成数据拷贝。
其中,将B用行拷贝命令拷贝至第i行和第i+2行中的任意一行的具体过程如下:
①对数据B所在子阵列发送预充电命令;
②对数据B所在行发送激活命令;
③对数据B所在子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对第i行和第i+2行中的任意一行发送激活命令;
⑤等待放大器放大B信号,完成数据拷贝。
其中,将辅助常数N比特0用行拷贝命令拷贝至第i+1行中的具体过程如下:
①对辅助常数N比特0所在子阵列发送预充电命令;
②对辅助常数N比特0所在行发送激活命令;
③对辅助常数N比特0所在子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对第i+1行发送激活命令;
⑤等待放大器放大N比特0信号,完成数据拷贝。
(2)对当前子阵列发送预充电命令;
(3)对预留计算地址第i+1行发送激活命令;
(4)减少激活至预充电时间T1至0,发送当前子阵列预充电命令;
(5)减少预充电至激活时间T2至0,发送预留计算地址第i+2行的激活命令;
(6)等待第i行、第i+1行、第i+2行三行数据同时充放电,第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,实现P1计算;
(7)将P1结果用行拷贝命令拷贝至P1的存放地址中,通过如下步骤实现:
①在第i行、第i+1行、第i+2行中任选一行,发送预充电命令;
②对第i行、第i+1行、第i+2行任选一行发送激活命令;
③对子阵列发送预充电命令;
④减少预充电与激活之间间隔时间T2,对P1的存放地址发送激活命令;
⑤等待放大器放大信号,完成数据拷贝。
所述的S2中P2的计算过程如下:
(1)分别将A、
Figure 483366DEST_PATH_IMAGE002
用行拷贝命令拷贝至当前子阵列的预留计算地址第i行和第i+2行中的任意一行,且A、
Figure 298875DEST_PATH_IMAGE002
不同行,将辅助常数N比特 0用行拷贝命令拷贝至当前子阵列的预留计算地址第i+1中;
后续的步骤(2)~(5)与P1的计算过程的(2)~(5)相同;
(6)等待第i行、第i+1行、第i+2行三行数据同时充放电,第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,实现P2计算;
(7)将P2结果用行拷贝命令拷贝至P2的存放地址中。
S3:分别利用内存按位或操作计算求和S、利用内存按位与操作计算进位C,其中S=P1 OR P2,C=A AND B;
其中,利用内存或操作计算求和S的具体过程如下:
1)分别将P1、P2用行拷贝命令拷贝至当前子阵列的预留计算地址第i+1行和第i+2行中的任意一行,且P1、P2不同行,将辅助常数N比特1用行拷贝命令拷贝至当前子阵列的预留计算地址第i行,辅助常数N比特1位宽与A、B相同,每一比特位都为1;
2)对当前子阵列发送预充电命令;
3)对第i+1行发送激活命令;
4)减少激活至预充电时间T1至0,发送当前子阵列预充电命令;
5)减少预充电至激活时间T2至0,发送第i+2行的激活命令;
6)等待第i行、第i+1行、第i+2行三行数据同时充放电;第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,完成P1 OR P2计算;
7)将结果S用行拷贝命令拷贝至S的存放地址中。
其中,利用内存与操作计算进位C的具体过程如下:
1)分别将A、B用行拷贝命令拷贝至当前子阵列的预留计算地址第i行和第i+2行中的任意一行,且A、B不同行,将辅助常数N比特0用行拷贝命令拷贝至当前子阵列的预留计算地址第i+1行中,且A、B位宽一致;
2)对当前子阵列发送预充电命令;
3)对第i+1行发送激活命令;
4)减少激活至预充电时间T1至0,发送当前子阵列预充电命令;
5)减少预充电至激活时间T2至0,发送地址2激活命令;
6)等待第i行、第i+1行、第i+2行三行数据同时充放电;第i行、第i+1行、第i+2行结果相同,放大器完成信号放大,完成A AND B计算;
7)将结果C用行拷贝命令拷贝至C的存放地址中。
S4:内存控制器读取C,并将C左移得C_shift,假设C位宽为N 比特,则C_shift位宽为(N+1) 比特;
如果C_shift最高位为1,则进位标记carry_flag 置1,否则保持不变;
如果C_shift次高位至C_shift最低位均等于0,则结束计算,将carry_flag作为进位标记输出,S作为和结果输出;否则,则将C_shift次高位至C_shift最低位和S作为输入值重新进入S1计算。
下面给出两个实施例对上述的内存中并行化计算的计算方法进行解释说明。
实施例一
以4bit位宽数据为例,计算3+1,如图3a、3b、3c所示。
其中,地址第0行、1行、2行作为预留计算地址,用作计算;
第1步数据预存放:A(4’b0011)和它的反码(4’b1100)分别保存在第4、5行,B(4’b0001)和它的反码(4’b1110)分别保存在第6、7行,
第2步计算P1和P2,P1为4’b0000,P2为4’b0010,结果保存于第8,9行;
第3步计算S,S为4’b0010,保存于第11行;
第4步计算C,C为4’b0001,保存于第10行;
第5步内存控制器读取C,得C_shift为5’b00010;因此需要将S和C_shift(5’b00010)的低四位C_shift[3:0] (4’b0010)作为新的输入计算;
第6步数据预存放:
假设S作为新的A,C作为新的B;
A和它的反码保存在第4,5行;
B和它的反码保存在第6,7行;
第7步计算P1和P2,P1为4’b0000,P2为4’b0000,结果保存于第8,9行;
第8步计算S,S为4’b0000,保存于第11行;
第9步计算C,C为4’b0010,保存于第10行;
第10步内存控制器读取C,得C_shift为5’b00100;C_shift低4bit不为0,因此需要将S和C_shift的低四位 C_shift[3:0](4’b0100)作为输入继续计算。
第11步数据预存放:
假设S作为新的A,C_shift[3:0]作为新的B;
A和它的反码保存在第4,5行;
B和它的反码保存在第6,7行;
第12步计算P1和P2,得P1为4’b0100,P2为4’b0000,结果保存于第8,9行;
第13步计算S,S为4’b0100,保存于第11行;
第14步计算C,C为4’b0000,保存于第10行;
第15步内存控制器读取C,得C_shift为5’b00000,C_shift低4bit为0,因此计算结束,得和S为4’b0100,进位为0。
实施例二
以4bit位宽数据为例,计算15+1,如图4所示,计算顺序在图中从左往右。第一次计算得S为4’b1110,C为4’b0001,C_shift为5’b00010判断需要下一轮计算;第二次计算S为4’b1100,C为4’b0010,C_shift为5’b00100判断需要下一轮计算;第三次计算S为4’b1000,C为4’b0100,C_shift为5’b01000;第四次计算S为4’b0000,C为4’b1000, C_shift为5’b10000,最终得结果,和S为0000,进位carry_flag为1。
在上述的内存中并行化计算的方法一的基础上,通过对存储位置的适当调整,进一步提高系统计算的并行程度,本发明提出另一种内存中并行化计算的方法。
二、计算方法二
一种内存中并行化计算的方法,该方法具体包括如下步骤(具体流程详见图5):
S1:将数据A、B以及相应的反码
Figure 976981DEST_PATH_IMAGE001
Figure 536139DEST_PATH_IMAGE002
均写入同一个子阵列的两列,且满足如下条件:
(1)其中一列中的A与另一列中的
Figure 452142DEST_PATH_IMAGE001
在同一行;
(2)其中一列中的B与另一列中的
Figure 438553DEST_PATH_IMAGE002
在同一行;
(3)其中一列中的
Figure 135113DEST_PATH_IMAGE001
与另一列中的A在同一行;
(4)其中一列中的
Figure 238242DEST_PATH_IMAGE002
与另一列中的B在同一行;
(5)其中一列预留空间存放P1,另一列预留空间存放P2;
(6)存放P1的一列中增加一行存放辅助常数,存放P2的一列中对应存放辅助常数同一行的位置存放A或B;
S2:利用内存与操作,其中一列计算中间结果P1,另一列计算中间结果P2,其中,P1=
Figure 805489DEST_PATH_IMAGE001
AND B, P2= A AND
Figure 962801DEST_PATH_IMAGE002
S3:将中间结果P2从其所在列读出并缓存到数据缓冲器,
当存放P2的一列中与存放辅助常数同一行的位置存放A时,将中间结果P2写入存放P1的一列中
Figure 818762DEST_PATH_IMAGE002
所在行;
当存放P2的一列中与存放辅助常数同一行的位置存放B时,将中间结果P2写入存放P1的一列中
Figure 719722DEST_PATH_IMAGE001
所在行;
同时将原来存放P2所在的位置写为N比特0;
S4:在其中一列利用内存或操作计算求和S,在另一列利用内存与操作计算进位C;其中S= P1 OR P2,C=A AND B;
S5:内存控制器读取C,并将C左移得C_shift,假设C位宽N 比特,则C_shift位宽(N+1)比特;
如果C_shift最高位为1,则进位标记carry_flag 置1,否则保持不变;
如果C_shift次高位至C_shift最低位均等于0,则结束计算,将carry_flag作为进位标记输出,S作为和结果输出;否则,则将C_shift次高位至C_shift最低位和S作为输入值重新进入S1计算。
实施例三
如图6所示,首先在同一子阵列中,增加一列存储空间存放相同数据,称之为右列;原来的存储空间称为左列,右列中A、B存放的位置与原来不同,见图6的(1)部分。
其中左列A与右列
Figure 672634DEST_PATH_IMAGE001
同一行,左列B与右列
Figure 847DEST_PATH_IMAGE002
同一行;
左列
Figure 140842DEST_PATH_IMAGE001
与右列A同一行,左列
Figure 783175DEST_PATH_IMAGE002
与右列B同一行;
左列预留空间存放P1,右列预留空间存放P2;
左列增加一行N比特1,对应的同一行右列增加A;
通过这样的地址排布,可以在对左列做拷贝/AND/OR操作时,也同时对右列做相同操作。
例如图6中(2)所示,要计算P1,则需要把左列中的
Figure 325015DEST_PATH_IMAGE001
和B分别拷贝到第0行和第2行,由于行选信号对整行有效,右列中的A和
Figure 89709DEST_PATH_IMAGE002
也将拷贝到相同位置。当在计算P1的时候,P2也可以并行地得到,如(3)所示。
为同时计算S和C,需要先将右列的P2通过内存读命令读出,再写入左列
Figure 716999DEST_PATH_IMAGE002
所在位置。同时将右列P2所在位置写成N比特0,如(4)所示。左列将N比特1拷贝到第0行的同时,右列将A也拷贝到第0行;左列将P1拷贝到第1行的同时,右列将N比特 0拷贝到第1行;左列将P2拷贝到第2行的同时;右列将B拷贝到第2行。这样可以在完成左列或运算的同时,右列完成与运算,如(5)(6)所示。这样就同时得到了S和C。
另外,本发明还提出一种实现上述两种方法的内存控制器,如图7所示,该内存控制器包括:
移位控制器,用于读取移位结果,并将计算进位结果进行移位,判断是否有进位以及是否需要下一轮计算;
数据缓冲器,用于读取中间结果和写回内存特定地址;
取反控制器,用于数据的按位取反运算;
计算结果缓冲器,保留计算的结果及进位标记信息,用于后续计算或者输出结果。
计算控制器,用于管理参与计算的地址,控制计算流程完成数据复制及计算。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。

Claims (2)

1.一种内存中并行化计算的方法,其特征在于,该方法具体包括如下步骤:
S1:将数据A、B以及相应的反码
Figure DEST_PATH_IMAGE001
Figure 143198DEST_PATH_IMAGE002
均写入同一个子阵列的两列,且满足如下条件:
(1)其中一列中的A与另一列中的
Figure 78793DEST_PATH_IMAGE001
在同一行;
(2)其中一列中的B与另一列中的
Figure 193380DEST_PATH_IMAGE002
在同一行;
(3)其中一列中的
Figure 974254DEST_PATH_IMAGE001
与另一列中的A在同一行;
(4)其中一列中的
Figure 693948DEST_PATH_IMAGE002
与另一列中的B在同一行;
(5)其中一列预留空间存放P1,另一列预留空间存放P2;
(6)存放P1的一列中增加一行存放辅助常数,存放P2的一列中对应存放辅助常数同一行的位置存放A或B;
S2:利用内存与操作,其中一列计算中间结果P1,另一列计算中间结果P2,其中,P1=
Figure 534865DEST_PATH_IMAGE001
AND B, P2= A AND
Figure 402327DEST_PATH_IMAGE002
S3:将中间结果P2从其所在列读出并缓存到数据缓冲器,
当存放P2的一列中与存放辅助常数同一行的位置存放A时,将中间结果P2写入存放P1的一列中
Figure 986892DEST_PATH_IMAGE002
所在行;
当存放P2的一列中与存放辅助常数同一行的位置存放B时,将中间结果P2写入存放P1的一列中
Figure 561093DEST_PATH_IMAGE001
所在行;
同时将原来存放P2所在的位置写为N比特0;
S4:在其中一列利用内存或操作计算求和S,在另一列利用内存与操作计算进位C;其中S= P1 OR P2,C=A AND B;
S5:内存控制器读取C,并将C左移得C_shift,假设C位宽N 比特,则C_shift位宽(N+1)比特;
如果C_shift最高位为1,则进位标记carry_flag 置1,否则保持不变;
如果C_shift次高位至C_shift最低位均等于0,则结束计算,将carry_flag作为进位标记输出,S作为和结果输出;否则,则将C_shift次高位至C_shift最低位和S作为输入值重新进入S1计算。
2.一种内存控制器,其特征在于,该内存控制器包括:
移位控制器,用于读取移位结果,并将计算进位结果进行移位,判断是否有进位以及是否需要下一轮计算;
数据缓冲器,用于读取中间结果和写回内存特定地址;
取反控制器,用于数据的按位取反运算;
计算结果缓冲器,保留计算的结果及进位信息,用于后续计算或者输出结果;
计算控制器,用于管理参与计算地址,控制计算流程完成数据复制及计算。
CN202010545142.1A 2020-06-16 2020-06-16 一种内存中并行化计算的方法及装置 Active CN111459552B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010545142.1A CN111459552B (zh) 2020-06-16 2020-06-16 一种内存中并行化计算的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010545142.1A CN111459552B (zh) 2020-06-16 2020-06-16 一种内存中并行化计算的方法及装置

Publications (2)

Publication Number Publication Date
CN111459552A CN111459552A (zh) 2020-07-28
CN111459552B true CN111459552B (zh) 2020-10-13

Family

ID=71681439

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010545142.1A Active CN111459552B (zh) 2020-06-16 2020-06-16 一种内存中并行化计算的方法及装置

Country Status (1)

Country Link
CN (1) CN111459552B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022061803A1 (zh) * 2020-09-27 2022-03-31 华为技术有限公司 存储库和动态随机存取存储器
CN114300015A (zh) * 2021-12-30 2022-04-08 厦门半导体工业技术研发有限公司 存内数据处理电路及阻变存储器
CN117334234A (zh) * 2022-06-24 2024-01-02 长鑫存储技术有限公司 一种存内计算电路、方法以及半导体存储器

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5313586B2 (ja) * 2008-07-31 2013-10-09 エルジー ディスプレイ カンパニー リミテッド 演算装置、画像表示装置、および演算方法
CN109841242A (zh) * 2019-01-08 2019-06-04 华中科技大学 一种基于相变存储器实现二进制并行加法的方法及系统
CN110674462B (zh) * 2019-12-04 2020-06-02 深圳芯英科技有限公司 一种矩阵运算装置、方法、处理器和计算机可读存储介质
CN111158635B (zh) * 2019-12-27 2021-11-19 浙江大学 一种基于FeFET的非易失性低功耗乘法器及其运行方法
CN111341363B (zh) * 2020-02-19 2021-11-23 中山大学 基于stt-mtj的存算一体系统、芯片及控制方法
CN111128279A (zh) * 2020-02-25 2020-05-08 杭州知存智能科技有限公司 基于NAND Flash的存内计算芯片及其控制方法

Also Published As

Publication number Publication date
CN111459552A (zh) 2020-07-28

Similar Documents

Publication Publication Date Title
CN111459552B (zh) 一种内存中并行化计算的方法及装置
US11614878B2 (en) Apparatuses and methods for data movement
US11693657B2 (en) Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems
CN109147842B (zh) 同时进行数据路径中计算操作的设备及方法
US11194579B2 (en) Memory device supporting skip calculation mode and method of operating the same
US11934824B2 (en) Methods for performing processing-in-memory operations, and related memory devices and systems
US20190196831A1 (en) Memory apparatus and method for controlling the same
JP2023527324A (ja) ニアメモリアドレス生成を伴うメモリアクセスコマンド
JP2020187747A (ja) 高帯域幅メモリシステム及びメモリアドレス方法
US11500629B2 (en) Processing-in-memory (PIM) system including multiplying-and-accumulating (MAC) circuit
US20230305804A1 (en) In-memory bit-serial addition system
US20220351765A1 (en) Processing-in-memory (pim) device for performing a burst multiplication and accumulation (mac) operation
US20040236921A1 (en) Method to improve bandwidth on a cache data bus
US11494121B2 (en) Memory device for performing in-memory processing
WO2023245757A1 (zh) 一种存内计算电路、方法以及半导体存储器
US20230153067A1 (en) In-memory computing method and circuit, semiconductor memory, and memory structure
TWI721660B (zh) 控制資料讀寫裝置與方法
US20220283806A1 (en) Processing-in-memory device having a plurality of global buffers and processing-in-memory system including the same
US11422804B2 (en) Processing-in-memory (PIM) device
US20230420035A1 (en) In-memory computing circuit and method, and semiconductor memory
US20230033179A1 (en) Accumulator and processing-in-memory (pim) device including the accumulator
US20210373852A1 (en) Processing-in-memory (pim) devices
CN118262761A (zh) 一种基于sram的内部存算逻辑电路、阵列和sram
신현승 McDRAM: Low Latency and Energy-Efficient Matrix Computation in DRAM
CN115965067A (zh) 一种针对ReRAM的神经网络加速器

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
GR01 Patent grant
GR01 Patent grant