CN111656339B - 存储器装置及其控制方法 - Google Patents
存储器装置及其控制方法 Download PDFInfo
- Publication number
- CN111656339B CN111656339B CN201880079719.5A CN201880079719A CN111656339B CN 111656339 B CN111656339 B CN 111656339B CN 201880079719 A CN201880079719 A CN 201880079719A CN 111656339 B CN111656339 B CN 111656339B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory blocks
- layer
- blocks
- write
- 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
Links
- 238000000034 method Methods 0.000 title claims description 43
- 230000015654 memory Effects 0.000 claims abstract description 518
- 238000012545 processing Methods 0.000 claims description 114
- 238000004364 calculation method Methods 0.000 claims description 83
- 230000036316 preload Effects 0.000 claims description 30
- 238000003860 storage Methods 0.000 claims description 18
- 230000003068 static effect Effects 0.000 claims description 3
- 238000013528 artificial neural network Methods 0.000 description 26
- 238000004891 communication Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 12
- 238000013135 deep learning Methods 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 239000000872 buffer Substances 0.000 description 6
- 238000013506 data mapping Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 239000011159 matrix material Substances 0.000 description 5
- 230000008520 organization Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000003638 chemical reducing agent Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008278 dynamic mechanism Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000003754 machining Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000946 synaptic effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0634—Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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
- G06N3/048—Activation functions
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Memory System (AREA)
- Advance Control (AREA)
- Semiconductor Memories (AREA)
- Multi Processors (AREA)
Abstract
本公开提供了一种存储器装置,包括第一组存储块,其在第一计算层中作为一组读存储块操作,并且在第二计算层中作为一组写存储块操作,其中,所述第二计算层在所述第一计算层之后。所述存储器装置还包括第二组存储块,其在所述第一计算层中作为一组写存储块操作,并且在所述第二计算层中作为一组读存储块操作。
Description
相关申请的交叉引用
本申请基于并要求2017年12月22日提交的题为“An Efficient SRAMOrganization to Enable a Wider Single Instruction Multiple Data Machine andSoftware Pipelining”的美国临时申请No.62/610,089的优先权,其全部内容通过引用合并于此。
背景技术
深度神经网络算法涉及大量矩阵计算,这通常会导致涉及非常宽的单指令多数据(SIMD)处理单元和大型片上存储的硬件架构。由于深度学习的性质,不同的SIMD通道需要不时交换数据。存在许多提供跨通道数据处理和计算的存储器架构,但是这些架构由于若干原因而存在缺陷,原因例如为存储器访问延迟、存储体(bank)冲突问题、性能问题等不可接受的增加。
发明内容
本公开提供了包括在具有SIMD架构的计算设备中的静态随机存取存储器(SRAM)装置。一些示例实施例针对核的存储器装置。所述存储器装置包括第一组存储块,其被配置为在第一计算层中作为一组读存储块操作,在第二计算层中作为一组写入块操作。所述第二计算层在所述第一计算层之后。第二组存储块被配置为在所述第一计算层中作为一组写存储块操作,在所述第二计算层中作为一组读存储块操作。
所述存储器装置还包括通信地耦合到第一组存储块和第二组存储块中的每个存储块的第一读端口。所述第一读端口被配置为从所述一组读存储块中的第一读存储块接收操作数,并将接收到的操作数提供给至少一个处理单元。所述存储器装置还包括通信地耦合到第一组存储块和第二组存储块中的每个存储块的第二读端口。所述第二读端口被配置为从所述一组读存储块中的第二读存储块接收一个或多个操作数,并将接收到的一个或多个操作数提供给至少一个处理单元。所述存储器装置还包括第一写端口,所述第一写端口通信地耦合到第一组存储块和第二组存储块中的每个存储块,并且被配置为向所述一组写存储块中的第一写存储块提供一个或多个操作数以进行存储。
一些示例实施例针对一种用于控制存储器装置的方法。所述方法包括:对于第一计算层,选择第一组存储块以作为一组读存储块操作,所述一组读存储块使得能够经由存储器装置的读端口向至少一个处理单元提供操作数,并选择第二组存储块以作为一组写存储块操作,所述一组写存储块使得能够经由存储器装置的写端口接收用于存储的操作数。所述方法进一步包括:在所述第一计算层之后的所述第二计算层中,选择所述第一组存储块以作为一组写存储块操作,并且选择所述第二组存储块以作为一组读存储块操作。
一些示例实施例针对一种系统,所述系统包括加速器,所述加速器包括与至少一个处理单元相关联的存储器装置。所述存储器装置包括第一组存储块、第二组存储块和一组读端口,每个读端口通信地耦合到第一组存储块和第二组存储块中的每个存储块。所述系统还包括一组写端口,每个写端口通信地耦合到第一组存储块和第二组存储块中的每个存储块。所述系统进一步包括主机单元,所述主机单元被配置为将代码编译成多个指令,对于第一计算层,所述指令选择所述第一组存储块以作为一组读存储块操作,所述一组读存储块使得能够经由所述一组读端口向至少一个处理单元提供操作数。所述指令还选择所述第二组存储块以作为一组写存储块操作,所述一组写存储块使得能够经由所述一组写端口接收操作数用于存储。
所述指令还对于第二计算层,选择所述第一组存储块以作为一组写存储块操作,并且所述选择第二组存储块以作为一组读存储块操作。
一些示例实施例针对一种非暂时性计算机可读介质,其存储指令集,所述指令集可由神经网络的处理元件内的存储器装置执行,所述神经网络包括用于执行计算的多个计算层。所述存储器装置包括第一读端口和第二读端口以及第一写端口和第二写端口,其中第一读端口和第一写端口通信地耦合到直接存储器访问(DMA)单元。所述存储器装置还包括通信地耦合到第一读端口和第二读端口以及第一写端口和第二写端口的第一、第二、第三和第四存储块,其中指令使所述存储器装置在每个计算层分别经由第一、第二、第三和第四存储块读或写与执行的计算相关联的至多一个计算值。
一些示例实施例针对一种用于控制存储器装置的方法。所述方法包括:对于第一计算层,将第一组存储块作为一组读存储块操作,所述一组读存储块使得能够经由存储器装置的读端口向至少一个处理单元提供操作数,并且将第二组存储块作为一组写存储块操作,所述一组写存储块使得能够经由存储器装置的写端口接收用于存储的操作数。
所述方法还包括:对于所述第一计算层之后的第二计算层,将第一组存储块操作为一组写存储块组操作,并且将第二组存储块作为一组读存储块操作。
附图说明
在以下详细描述和附图中示出了本公开的实施例和各个方面。图中所示的各种特征未按比例绘制。
图1A是示出示例性SRAM装置的示意图。
图1B是示出图1A的SRAM装置的示例性存储体单元的示意图。
图2是示出与本公开的实施例一致的示例性神经网络处理单元(NPU)架构的示意图。
图3A是示出与本公开的实施例一致的神经网络处理器的层的示例性功能的示意图。
图3B是示出与本公开的实施例一致的示例性硬件神经网络处理器的示意图。
图4是示出与本公开的实施例一致的多层网络中的示例性数据共享的示意图。
图5是示出与本公开的实施例一致的示例性SRAM装置的示意图。
图6是示出与本公开的实施例一致的图5的SRAM装置的示例性存储块的示意图。
图7示出与本公开的实施例一致的图5和图6的示例性装置的详细示意图。
图8示出与本公开的实施例一致的以用于图5-7的SRAM装置的数据映射和存储块分类的示例性方法为特征的表格。
图9示出与本公开的实施例一致的用于经由图5-8的SRAM装置进行数据映射的示例性方法的流程图。
图10是描绘可由图5-8的存储器装置执行的示例操作的流程图。
具体实施方式
以下描述参考附图,其中除非另外表示,否则不同附图中的相同数字表示相同或相似的元件。在示例性实施例的以下描述中阐述的实现并不代表与本发明一致的所有实现。相反,它们仅是与如所附权利要求中所述的本发明的相关方面一致的装置和方法的示例。
图1A和1B示出了单指令多数据(SIMD)架构的示例性常规实现的框图,其中每个计算单元具有2个操作数和1个结果。SIMD或矢量架构非常普遍用于支持具有数据并行性的计算,例如图形处理和深度学习。在图1A的常规架构中,存储器将两个操作数(例如,“op1”和“op2”)馈送到一个或多个处理单元,其执行计算以生成结果R。当K个处理单元并行运行时,这K个处理单元在每个流水线周期内消耗来自存储器的2K个操作数以生成K个结果。生成K个结果后,可以将这些结果写回到存储器中。
图1B示出了图1A的存储器的结构。在常规系统中,存储器使用1R/1W SRAM用于更高的晶体管密度,从而减小面积、降低成本并缩短延迟。在这样的系统中,SRAM阵列的单个存储体可以包括具有W个1位单元的D行。因此,为了支持更宽的存储器,使用多存储体设计。如图1B所示,常规系统可以通过增加存储体的数量(在这种情况下为N个存储体)来实现广泛的并行访问。每个存储体可以潜在地支持M个并行读和写,其中M=W/data_type_width。对于图1A的K个处理单元,在每个流水线周期中有2K次读(对应于K个处理单元中的每一个的2个操作数)和K次写。相应地,当常规系统使用1R/1W SRAM作为存储器存储体时,K=M*N/2,因为单个1R/1W SRAM将为每个周期提供两组操作数(例如,一组对应于操作数opl,第二组对应于操作数op2),其中每组操作数最多占用可用存储器的一半。
然而,在诸如深度学习的需要大量数据并行的应用中,期望K的数量非常大,例如512或1024个处理单元。图1A和1B的常规架构存在两个主要问题。
第一个问题是K的数量将被限制为较小的数量。该限制是因为每个存储体的存储器读端口与输出端口之间存在点对点连接。完全连接的交叉开关只能支持小宽度的端口。即使在存储器端口与存储体之间使用仲裁器控件进行一些更智能的连接,这种逻辑的延迟也会随着数据并行宽度的增长而快速增加。这种增长很快就阻止了更宽的并行访问存储器的扩展,因为相应的延迟增加对于流水线设计而言将变得无法接受。例如,在常规系统中,示例性设计通常将具有不超过16个存储体。如果每个存储体最多支持W=256位宽度,则对于16位数据类型,最大可能的K为K=[256/(16*2)]*16=128。对于深度学习中的预期数据并行宽度而言,K的此值被认为是相当小的。
常规系统的第二个问题涉及存储体冲突。当两个或更多处理单元彼此相距M/2并从同一存储体进行读时,具有单读端口的SRAM将无法在同一周期内提供对两个单元的访问。冲突的访问将被序列化。这种序列化是不可接受的,不仅因为它减慢计算程序,而且还使期望每条指令以固定延迟平稳进展的SIMD机的简单控制模式复杂化。此外,序列化还使用于处理数据依赖性的静态/动态机制复杂化。
所公开的实施例涉及神经网络中的改进的存储器装置及其控制方法。示例实施例中的一些针对存储器结构的组织和分类,其允许更宽的单指令多数据(SIMD)架构和软件流水线。SIMD是具有多个处理单元的计算机架构,这些处理单元同时对多个数据点执行相同的操作。这样的装置可以用于以软件流水线为特征的神经网络中。软件流水线是用于以使硬件流水线并行的方式优化循环的技术。软件流水线是一种乱序执行,不同在于重新排序id由编译器而不是处理器进行。
这里将使用神经网络作为示例描述示例性实施例。应当理解,尽管使用神经网络描述了本文提供的实施例,但是示例实施例可以应用于可以优化计算的任何其他系统。
图2示出了示例性神经网络处理单元(NPU)架构100。NPU架构100可以包括片上通信系统110、主机存储器120、存储器控制器130、直接存储器访问(DMA)单元140、联合测试动作组(JTAG)/测试访问端(TAP)控制器150、外围组件快速互连(PCIe)接口160、总线170、全局存储器126等。应当理解,片上通信系统110可以基于所传送的数据来执行算法操作。此外,NPU架构100可以包括具有片上存储器块(例如,8GB第二代高带宽存储器(HBM2)的4个块)用作主存储器的全局存储器126。
芯片通信系统110可以包括全局管理器112和多个核116。全局管理器112可以包括被配置为与一个或多个核116协调的一个或多个任务管理器114。每个任务管理器114可以与核116的阵列相关联,核116提供神经网络的突触/神经元电路。例如,图2的核的顶层可提供表示神经网络的输入层的电路,而核的第二层可提供表示神经网络的隐藏层的电路。如图2所示,全局管理器112可以包括被配置为与核116的两个阵列协调的两个任务管理器114。
核116可以包括一个或多个处理元件,每个处理元件包括单指令多数据(SIMD)架构,SIMD架构包括被配置为在全局管理器112的控制下对所传送的数据执行一个或多个操作(例如,乘法、加法、乘法累加等)的一个或多个处理单元。为了对所传送的数据分组执行操作,核116可以包括用于存储数据分组的至少一个缓冲器、用于存储指令的一个或多个缓冲器、用于存储数据分组中的信息的一个或多个存储器、以及用于处理数据分组中的信息的一个或多个处理元件。每个处理元件可以包括任何数量的处理单元。在一些实施例中,核116可以被认为是瓦片(tile)等。
主机存储器120可以是片外存储器,例如主机CPU的存储器。例如,主机存储器120可以是DDR存储器(例如,DDR SDRAM)等。与集成在一个或多个处理器内的片上存储器相比,主机存储器120可以被配置为以较低的访问速度存储大量数据,充当高级高速缓存。
存储器控制器130可以管理从全局存储器126内的存储器块(例如,HBM2)读数据以及向其写数据。例如,存储器控制器130可以管理来自芯片通信系统110外部(例如,来自DMA单元140或与另一个NPU相对应的DMA单元)或来自芯片通信系统110内部(例如,通过由全局管理器112的任务管理器控制的2D网格来自核116中的本地存储器)的读/写数据。此外,尽管在图1中示出了一个存储器控制器,但应当理解,在NPU架构100中可以提供一个以上的存储器控制器。例如,对于全局存储器126内的每个存储器块(例如,HBM2)可以存在一个存储器控制器。
存储器控制器130可以生成存储器地址并启动存储器读或写周期。存储器控制器130可包含能被一个或多个处理器写和读的若干硬件寄存器。寄存器可以包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器、以及其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从输入/输出(I/O)设备读或向I/O设备写)、传输单元的大小、一个突发中传输的字节数、和/或存储控制器的其他典型功能的某种组合。
DMA单元140可以辅助在主机存储器120与全局存储器126之间传输数据。另外,DMA单元140可以辅助在多个NPU之间传输数据。DMA单元140可以允许片外设备访问片上存储器和片外存储器两者而不会引起CPU中断。因此,DMA单元140还可生成存储器地址并启动存储器读或写周期。DMA单元140还可包含能被一个或多个处理器写和读的若干硬件寄存器,包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器、以及其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从输入/输出(I/O)设备读或向I/O设备写)、传输单元的大小、和/或一个突发中传输的字节数的某种组合。应当理解,NPU架构100可以包括第二DMA单元,该第二DMA单元可以用于在其他NPU架构之间传输数据,以允许多个NPU架构直接通信而不涉及主机CPU。
JTAG/TAP控制器150可以指定专用调试端口,该专用调试端口实现用于对NPU的低开销访问的串行通信接口(例如,JTAG接口),而无需直接外部访问系统地址和数据总线。JTAG/TAP控制器150还可以具有片上测试访问接口(例如,TAP接口),该片上测试访问接口实现协议以访问一组测试寄存器,该测试寄存器提供各个部分的芯片逻辑级别和设备能力。
外设接口160(例如PCIe接口)(如果存在)充当(并且通常是)芯片间总线,提供NPU与其他设备之间的通信。
总线170包括芯片内总线和芯片间总线两者。芯片内总线将所有内部组件相互连接,这是系统架构所要求的。尽管并非所有组件都与每个其他组件连接,但所有组件确实与它们需要与之通信的其他组件具有某种连接。芯片间总线将NPU与其他设备(例如片外存储器或外设)相连。通常,如果存在PCIe接口512,则总线170仅与芯片内总线有关,尽管在某些实现中,总线170仍可以与专用总线间通信有关。
虽然NPU架构100结合了本公开的实施例,但是应当理解,所公开的实施例可以应用于具有用于加速诸如深度学习的一些应用的架构的任何加速器芯片。这样的芯片可以是例如GPU、具有矢量处理能力的CPU、或用于深度学习的神经网络加速器。SIMD或矢量架构通常用于支持具有数据并行性的计算设备,例如图形处理和深度学习。SIMD架构可以包括多个处理元件,其中每个处理元件可以同时对多个数据点执行相同的操作。
在一些实施例中,神经网络处理器包括编译器(未示出)。编译器是将以一种编程语言编写的计算机代码转换为NPU指令以创建可执行程序的程序或计算机软件。在加工应用中,编译器可执行各种操作,例如,预处理、词法分析、解析、语义分析、输入程序到中间表示的转换、代码优化、以及代码生成、或其组合。
在一些实施例中,编译器可以在主机单元(例如,具有主机存储器104的CPU)上,该主机单元将命令推入NPU 100。基于这些命令,任务管理器1022可以将任意数量的任务分配给一个或多个核(例如,核1024)。命令中的一些可以指示DMA单元108将指令和数据从主机存储器104加载到全局存储器116中。然后可以将加载的指令分发到分配有相应任务的每个核,并且一个或多个核可以处理这些指令。
应当理解,由核接收的前几条指令可以指示核将数据从全局存储器116加载/存储到核的一个或多个本地存储器(例如,核的存储器或用于核的每个活动处理元件的本地存储器)。然后,每个核都可以启动指令流水线,这涉及从本地存储器获取指令(例如,通过获取单元)、解码指令(例如,通过指令解码器)以及生成本地存储器地址(例如,对应于操作数)、读取源数据、执行或加载/存储操作、然后写回结果。
图3A示出了包括软件算法210和硬件220的神经网络的层200的示例性功能。硬件220可以包括私有存储器模块230、处理单元阵列240中的一个或多个处理单元、共享(例如广播)存储器模块250、写缓冲器260、输入操作数270、输出操作数280等。在一些实施例中,硬件220可以位于核(例如,图2的核116)中。应当理解,也可以采用包括私有存储器模块230和共享存储器模块250的单个同质存储器模块。
在一些实施例中,处理单元阵列240的处理单元可以提供一个或多个操作,诸如乘法、加法、乘法累加等。处理单元阵列240可以包括多个处理单元242、244、246和248,例如,如图3B所示的处理单元阵列。
私有存储器模块230可以被划分成单独的私有存储器块,使得多个处理单元242、244、246和248中的每个具有对应的私有存储器部分232、234、236和238,如图3B所示。
输入操作数270可以是由处理单元阵列240操作的输入数据。在一些实施例中,图3A的输入操作数270可以包括一个或多个私有输入操作数272和一个或多个共享输入操作数274,如图3B所示。私有输入操作数272可以存储在私有存储器模块230中,共享输入操作数274可以存储在共享存储器模块250中。
在神经网络的应用中,软件算法210具有共享数据,该共享数据可以存储在共享存储器模块250中,并可以广播到处理单元阵列240的多个处理单元242、244、246和248中的每个,作为共享操作数274。例如,图3A所示的算法计算以下矢量运算:
A=sigmoid(b+X*W1)(等式1)
这是深度学习算法中经常调出的神经网络的层200中的代表运算。参考等式1,“b”可以包括常数值,“X”可以包括共享输入操作数274,“W1”可以包括私有输入操作数272。
参考图3A,矢量大小可以设置为任何自然数。这里,以4的矢量大小为例,并且使用4路SIMD硬件来计算矢量。处理单元242、244、246和248可以并行计算以下运算:
a1=sigmoid(b+x1*W111+x2*W121+x3*W131+x4*W141) (等式2)
a2=sigmoid(b+x1*W112+x2*W122+x3*W132+x4*W142) (等式3)
a3=sigmoid(b+x1*W113+x2*W123+x3*W133+x4*W143) (等式4)
a4=sigmoid(b+x1*W114+x2*W124+x3*W134+x4*W144) (等式5)
图3A中的阴影框和虚线表示如何计算“a1”。根据该计算,可以理解,“W1”阵列的每一列中的数据对于处理单元阵列240的相应处理单元而言是本地的,并且该数据可以相应地作为私有输入操作数272存储在私有存储器模块230的相应存储器部分中。例如,W1阵列的第一、第二、第三和第四列中的每一列中的数据都可以作为私有输入操作数存储在私有存储器模块230的相应存储器块232、234、236和238中。
参考图3A,W1阵列可以包括存储的数据的矩阵,其中矩阵的每个元素表示为Wlij或Wl_ij(如后所示),其中“i”表示矩阵中的行号,“j”表示列号。例如,在等式2中,W141表示存储在位于W1阵列的第4行和第1列的元素中的数据。也可以使用其他公知的符号来对矩阵中的元素寻址。
同时,X阵列中的数据被所有处理单元242、244、246和248使用,并且相应地作为共享输入操作数274存储在共享存储器模块250中,并广播到从共享存储器模块250进行读取的所有组件。等式2-5表示在神经网络处理器的层200中执行的示例性操作,被设计为计算a1、a2、a3和a4。
在一些实施例中,机器学习或深度学习包括训练神经网络处理器以基于输入数据来生成最终结果,这是通过实现用于一层或多层神经处理的算法来实现的。例如,图3A的层200表示包括配置为使用偏置b、存储在X阵列中的数据和存储在W1阵列中的数据来执行运算的算法的第一层。第二层和第三层(未示出)可以包括使用偏差b、存储在X阵列中的数据以及存储在W2和W3阵列中的数据的算法。每层可以包括偏差b的不同值和存储在“W”阵列中的不同参数。
参考图3A,例如,阵列X可以包括不同类别的个人分数。阵列X的x1值可以是学生A的数学分数,x2可以是英语分数,x3可以是历史分数,x4可以是科学分数。最终结果可以是基于分数(输入数据)将准许还是拒绝个人入学。如图3A所示,并在等式2-5中描述,数据x1-x4是“共享的”并且在计算a1-a4时是共同的。
图4示出了多层网络中的数据共享。如本文所描述的,数据共享是指先前的私有数据如何能在程序的后续阶段中成为共享数据。在一些实施例中,神经网络架构300包括多层,例如,层310和320。在一些实施例中,层310的输出操作数280可以用作层320的输入操作数270。在一些实施例中,一层的输出操作数280可以被一层或多层用作输入操作数270。
例如,在层310中,a1由私有存储器模块230的处理单元242计算。a1中的数据成为层320的广播输入。通常,神经网络可以按层组织。每一层都可以对其输入执行一个或多个操作并生成输出。一层的输出可以传递到下一层用于进一步处理。例如,前一层的输出可以是下一层的输入。因此,必须将本地生成的“a”存储回共享存储器250,或存储到私有存储器230,之后再复制到共享存储器250。
作为存储在私有存储器230中并且之后复制到共享存储器250的替代解决方案,来自a1的输出操作数280可以直接存储回共享存储器250而不是存储器复制。但是,此替代解决方案仍可能会使程序变慢。由于单个处理单元(例如处理单元242)每个周期只能完成一个乘加运算,例如Xi*Wl_ij,因此“a”的每个操作会在多个周期内执行。为此,在每个周期中仅从私有存储器230读出W1_ij的一个操作数,因此从共享存储器250只需要一个“X”。因此,每个存储器模块的通用设计是每周期单读/单写。当在最后周期中多个处理单元同时生成所有“a”时,共享存储器250可能无法将它们全部写回。
在一些实施例中,引入写缓冲器260以允许共享存储器250有更多的时间来分别消耗这些输出操作数280。然而,当处理单元240的输出速度快于写缓冲器260的宽度、例如A的大小大于X时,写缓冲器260可能传播背压,迫使处理单元阵列240变慢,导致整体程序执行变慢。
如从图4可以理解的,在神经网络算法中,可能存在多层计算。尽管a1由ALU计算,使a1中的数据显示为本地数据,但此数据可能会成为下一个计算层中的广播输入。本文提出的一些示例实施例提供了一种存储器装置及其控制方法,以避免这种冲突。
图5和图6示出了根据一些示例实施例的存储器装置。图5示出了单指令多数据(SIMD)架构,其中核的每个处理单元0-2K具有2个操作数“op1”和“op2”以及1个结果“R”。SIMD的存储器单元包括两个写端口(例如全写端口“F.Write”和窄写端口“N.Write”)和两个读端口(例如全读端口“F.Read”和窄读端口“N.Read”)。
图6示出了图5的存储器装置的结构。如图6所示,存储器装置包括四个不同的存储块Block0-Block3,其中每个存储块包括多个存储体单元bank-bankN。根据一些实施例,每个存储块可以是1R/W SRAM,其比常规系统中使用的1R/1W SRAM要小得多并且消耗更少的功率。根据一些示例实施例,图6的每个存储块都通信地耦合到存储器装置的每个写端口和读端口。
根据一些示例实施例,可以利用数据映射方案,使得每个存储块在给定计算周期内最多可以读或写一组计算值。这样的组织提供了在存储块中实现和组织的暂时存储器(scratchpad memory)。该组织有效地避免了常规架构中遇到的并行访问冲突。本文公开的架构不仅能够实现更宽的SIMD机,而且使编译器能够实现高级优化,例如粗粒度软件流水线。
根据各种实施例,由于编译器可用于控制数据映射,所以编译器可将op-1和op-2分别分配给块0和1,如图6所示。该架构突破了关于图1A和1B描述的常规系统的物理限制。因此,如图5所示,与图1A所示的架构相比,可以有效地支持2K宽度的SIMD。
图7提供了与本公开的实施例一致的图5和图6的存储器装置的示例性实现的详细示意图。为了说明的目的,在图6-7中所示的实施例中,处理单元630的数量等于32并且数据宽度等于16位,但是应当理解,可以使用与所公开的实施例一致的核上的任何数量的处理单元和数据宽度。例如,核可以具有32个处理元件,每个处理元件具有32个处理单元,这相当于核的1024个处理单元。
例如,如图7所示,在较低的处理元件层,公开的示例性实施例将32个处理单元630(例如,诸如图7所示的乘法器累加器归约器(MAR,multiplier accumulator reducer))组织到一个处理元件中,该处理元件使用集中式共享存储器(称为本地存储器(LM)620)用于这32个处理单元630进行数据共享。LM 620相当于图5和6的存储器装置。根据示例实施例中的一些,多个处理元件610可以经由数据集线器或DMA单元一起连接到系统中。在一些实施例中,每个处理元件的本地存储器可以形成分布式共享存储器架构。这些本地存储器可以是全局寻址的,并经由数据集线器电连接,这提供了快速共享的能力。
每个本地存储器620可以包括提供处理单元630对本地存储器620的并行访问的全端口(例如,图7中的本地存储器620的左边两个端口,其与涉及具有16位的32个连接的F.write和F.read端口相关联-针对处理元件的每个处理单元有一个连接)。全端口可用于对私有数据(例如神经网络中全连接层的权重)的SIMD访问。应当理解,存储在本地存储器620中并且直接与同一本地存储器所关联的处理单元630共享的本地数据可被视为私有数据。每个本地存储器620还可以包括提供处理单元630对存储器的窄访问的窄端口(例如,图7中的本地存储器620的右边两个端口,其与涉及具有16位的1个连接的N.write和N.read端口相关联)。窄端口可用于广播共享数据或广播的共享数据。应当理解,与一个或多个其他处理元件和它们的相应处理单元630共享的远程数据可被视为共享数据。根据一些示例实施例,窄写端口“N.write”可用于经由多路复用器MUX 731访问DMA和数据集线器。应当理解,在图7中,以粗体所示的数据通信线路是指“全宽度”通信线路(例如16位x 32)。并非粗体的数据通信线路是指“窄宽度”通信线路(例如16位)。应当理解,窄宽度通信线路可以是16、16x 2、16x 3位等。此外,应当理解,通信线路宽度不必限于16位,而也可以是4位、8位、32位等。
全端口和窄端口被配置为与本地存储器620中的不同存储块相关联。本地存储器620中的这些多个存储块(例如,存储块Block0至Block3,每个存储块可以是1R/W SRAM)经由例如多路复用器(例如,多路复用器705、710、740和745)物理地连接到所有全端口和窄端口,并且可以提供去往和来自这些端口的并发访问。例如,对于读端口,针对每个端口存在一个多路复用器(例如,针对F.read端口的多路复用器705和针对N.read端口的多路复用器710)并且都连接到每个存储块。例如,如图7所示,存储块Block0和Block3通信地耦合到多路复用器705和710二者。尽管为了简化而未示出,但存储块Block1和Block2同样耦合。相应地,对于图7所示的实施例,多路复用器705和710都可以是4对1多路复用器,其中多路复用器的输入数量可对应于本地存储器中的存储块的数量。例如,如果存在8个存储块,则多路复用器705和710都可以是8对1多路复用器。应当理解,在存储块与多路复用器710之间可以存在一个或多个其他多路复用器。例如,在存在32个16位输出的情况下,32对1多路复用器可以选择32个输入之一来提供给N.read端口。多路复用器705和710可以接收选择信号(经由编译器指令),其选择将从它们的相应端口输出的信号。
关于写端口,每个存储块具有一个或多个相应的2对1多路复用器,该多路复用器选择从F.write端口和N.write端口接收的输入。例如,如图7所示,多路复用器740和745可以分别对应于存储块Block0和Block3。基于选择信号(经由编译器指令),多路复用器740和745可以向它们的相应存储块提供经由全写端口或窄写端口接收的所选数据。尽管为了简化而未示出,但类似的多路复用器可用于向存储块Block1和Block2写数据。在一些实施例中,在将数据写入存储块的情况下,可能有32个2对1多路复用器(针对32个16位输入中的每个有一个多路复用器),该多路复用器选择从F.write或N.write端口接收的一个16位输入。可以基于核接收的指令来建立存储块Block0-Block3与端口之间的这些连接的配置。
例如,在一个或多个核中运行的一系列SIMD指令可能涉及32个处理元件中的每一个的所有32个处理单元630以执行计算Aout[1024]=W[1024]*Ain[1]。
为了简化对于具有32个处理单元的图7的组件的此计算,组件可以执行计算Aout[32]=W1[32]*Ain[1]。在此示例中,存储块Block0-Block3可用于存储数据,其中Block0存储数据W1[32],而Block1存储通过DMA单元经由后级(back-staged)控制序列接收的数据Ain[1]。如稍后将进一步描述的,这32个处理单元可以接收Ain操作数和W1操作数之一,并执行相应的操作以生成结果Aout[32],可以通过多路复用器730和全写端口将结果提供回本地存储器620。
可以使用一个1R/W SRAM(每个存储块循环用作一个读存储块或一个写存储块)而不是1R/1W SRAM(可提供一个读和一个写)来实现每个存储块Block0-Block3的设计,这导致~30%的硅面积减少和功率节省。在此示例中,存储块Block0-Block3具有相同的功能并且可以基于软件被配置为每周期用作读存储块或写存储块。也就是说,任何类型的数据(无论是私有数据还是共享数据)都可以存储在任何存储块中,只要它满足在任何给定周期经由一个端口只有一个数据流通过一个专用存储块-尽管所有存储块物理连接到所有端口-以避免数据冲突。此外,应当理解,其他存储块可以存在并且取决于时钟周期可以是空闲的(idle)。
根据各种实施例,编译器可以在每个块访问中建立地址对齐,以避免数据通道之间的存储体冲突。相比于常规架构,图5-7的存储器装置通过提供允许各个存储存储体每计算周期对至多一个计算值(例如,要在当前或下一计算周期中使用的计算结果或操作数)进行操作的方式,来使编译器避免存储体冲突。在常规系统中,如果使用同一存储体来存储两个操作数,则op-1和op-2会引起冲突。将op-1和op-2分配到同一块中可能会导致未对齐的地址,进而导致来自同一操作数(op-1或op-2)的不同数据通道的存储体冲突。根据本文提供的实施例,操作数被分配给不同的存储块。具体而言,在任何给定的计算层,存储块最多可读或写一个计算值。
图8示出了表格,该表格提供了可以由图5-7的存储块提供的数据映射和操作模式的示例。图9是示出多层计算期间图6的各种存储块的功能的示意图。图9的前两个计算层对应于图8的表格中提供的示例层。
如图9所示,每个计算层可以包括任何数量的周期。在图8和9提供的示例中,每个计算层包括至少两个周期(在图9中标记为Cr和Cw)。具体地,每个计算层包括至少一个读周期Cr和至少一个写周期Cw。根据一些示例实施例,在每个计算层的开始,编译器可以向存储器装置提供关于各个存储块的功能或操作模式的指令。
在图8和9提供的示例中,在层1的周期Cr处,向存储块Block1分配计算操作模式。在计算操作模式下,存储块可以被配置为获取要在针对当前计算层执行的计算中使用的操作数。在本示例中,Blockl读取第一操作数(A1)。
在周期Cr期间,Block0被分配计算操作模式,因此被配置为获取要在当前计算层的计算中使用的操作数阵列。在图8和9提供的示例中,Block0检索具有一组操作数的阵列W1。
一旦获得所有操作数,处理单元就可以执行计算。例如,如图7所示,处理单元(MAR)可以被配置为经由存储器装置的F.Read和N.Read端口分别从Block1和Block0接收第一操作数(A1)和来自阵列W1的操作数之一。例如,存储块Block0在阵列W1中可能有32个操作数,所有这些操作数都输出到全读端口。阵列W1的这些操作数中的每一个被提供给单独的处理单元以进行计算。此外,可以将存储在存储块Block1中的第一操作数A1输出到窄读端口。可以将第一操作数A1提供给每个处理单元,用于与来自阵列W1的各个操作数进行计算,以生成结果A2[32]=W1[32]*A1[1]。
在写周期Cw期间,为Block2分配结果操作模式。在结果操作模式期间,存储块被配置为存储在当前计算层内涉及第一操作数和第二操作数的计算结果(例如,A2)。将通过F.Write端口(经由多路复用器730)经由处理元件的处理单元来提供结果。Block2可以在存储块Block2的存储体内存储计算的一个或多个结果操作数A2。例如,虽然可以将来自结果A2[32]的单个操作数存储在Block2中(通过多路复用器730处的选择信号),但是应当理解,可以存储来自结果A2[32]的所有操作数。
同样在写周期Cw期间,Block3被分配预加载操作模式。在预加载操作模式期间,将存储块配置为检索要在下一计算层的计算期间使用的W2阵列的操作数。根据一些示例实施例,可以经由存储器装置的窄写端口从DMA检索预加载的操作数。在图8和9提供的示例中,从DMA检索预加载阵列W2,并将其存储在存储块Block3的存储体单元中。
在下一计算层(层2)中,使用从前一层写入存储块的两个值。具体来说,来自层1的结果A2[32]被用作层2中的第一操作数,预加载操作数W2阵列被用作第二操作数。因此,存储块Block2和Block3的操作模式在层2的开始动态调整为计算操作模式。在层2的读周期Cr期间从存储块Block2和Block3的存储体单元中读取第一操作数A2[32]和第二操作数W2阵列。
由于要在计算层2中使用的操作数已经在存储块中提供,因此处理元件的处理元件能够迅速执行计算。第一操作数A2[32]和第二操作数W2阵列将分别通过存储器装置的F.Read和N.Read端口从存储块Block2和Block3中检索。
在计算层2的写周期Cw期间,为存储块Block0分配结果操作模式。因此,结果经由处理元件的处理单元通过全写或窄写端口提供给存储块Block0。存储块Block0将计算结果A3存储在存储块Block0的存储体内。
同样在层2的写周期Cw期间,Block1被分配预加载操作模式。根据一些示例实施例,可以经由存储器装置的窄写端口从DMA检索预加载操作数。在图8和9提供的示例中,经由窄写端口从DMA检索预加载操作数W3,并将其存储在存储块Block1的存储体单元内。
与层2的情况一样,在下一计算层(层3)期间,使用从前一层写入存储块的两个值。具体来说,来自层2的结果A3用作层3中的第一操作数,预加载操作数W3用作第二操作数。因此,在层3的开始将存储块Block0和Block1的操作模式动态调整为计算操作模式。在层3的读周期Cr期间,从存储块Block0和Block1的存储体单元中读取第一操作数A3和第二操作数W3。
此后,处理元件中的处理元件将执行计算。第一操作数A3和第二操作数W3将分别通过存储器装置的F.Read和N.Read端口从存储块Block0和Block1中检索。
在层3的写周期Cw期间,为存储块Block2分配结果操作模式。因此,结果经由多路复用器730,通过F.Write端口经由处理元件的处理单元提供给存储块Block2。存储块Block2将把计算结果A4存储在存储块Block2的存储体内。
同样在层3的写周期Cw期间,为Block3分配预加载操作模式。因此,预加载操作数W4从DMA检索并存储在存储块Block3的存储体单元内。在此周期期间存储的预加载操作数将在下一计算层中用作操作数。
根据一些示例实施例,分别在读周期Cr和写周期Cw期间执行的读和写可以在计算层内同时或顺序发生。应当理解,在图8和9提供的示例中,存储块交替着重于读(例如,计算模式)和写(例如,结果和预加载模式)的操作模式。
应当理解,可以以任何数量的周期来执行在各个计算层中发生的步骤。例如,根据一些示例实施例,涉及读操作数的操作(例如,在计算模式下通过存储块)可以在同一周期中发生。此外,预加载操作数的写入可以在与操作数的读取相同的周期中进行,在与计算结果的写入(例如,在结果模式下通过存储器)相同的周期中进行,或者在不同或单独的周期中进行。
根据一些示例实施例,除了动态地改变各个存储块的操作模式之外,还可以改变存储块可访问的数据的类型。例如,可以改变分配给从DMA读操作数的存储块(在示例中被分配标签W)。不同类型的操作数在大小上可以比其他更大。因此,关于块接收的数据类型以及来自哪个源改变存储块可以帮助平衡各个块的存储需求。
在图8和9提供的示例中,在一个计算层中被分配结果模式的存储块在下一计算层中被分配计算模式。由于在结果模式下将计算结果存储在存储块的存储体内,因此可以省去额外的数据检索。具体而言,一旦在下一计算层期间将相同的存储块转换为计算模式,则作为前一计算层中的结果的操作数就已经存储在存储块的存储体单元内。因此,通过提供结果模式和计算模式的恒定转换,可以提高神经网络的处理速度。
另外,通过使用预加载操作模式,还可以提高神经网络的处理速度。操作数的预加载允许在新的计算层开始时立即执行计算。具体而言,在每个计算层的开始,通过结果模式和计算模式的转换以及使用预加载,计算所需的两个操作数已经存在于存储块中。
图10是描绘可由图5-9的存储器装置采取的示例操作的流程图。应当理解,图10包括以实线边框示出的一些操作和以虚线边框示出的一些操作。实线边框中包括的操作是最广泛的示例实施例中包括的操作。虚线边框中包括的操作是边框示例实施例中可以包括的示例实施例,或是其一部分,或是其操作之外可以采取的进一步操作。应当理解,这些操作不需要按顺序执行。此外,应当理解,并非所有操作都需要执行。示例操作可以以任何顺序和任何组合来执行。
将使用图8和9中提供的示例来描述图10的示例操作,其中存储器装置包括至少四个存储存储器块。图10的示例操作8-14发生在第一计算层(如图9所示的层1)内。示例操作15-19发生在第二计算层(如图9所示的层2)中。
标记为Block0和Block1的块包含在第一组存储块中,标记为Block2和Block3的块包含在第二组存储块中。如在图8和9中提供的示例中所示,第一组存储块最初(例如,在第一计算层期间)被配置为从存储器读取操作数,并且第二组存储块最初被配置为将操作数写入存储器。在第二计算层期间,切换第一组存储块和第二组存储块的操作,使得第一组存储块被配置为以基于写的模式操作,而第二组存储块被配置为以基于读的模式操作。
一些示例实施例可以包括在步骤8中从编译器接收指令,以控制对于每个计算层的第一组存储块和第二组存储块的操作模式。根据一些示例实施例,指令可以由编译器经由主机单元提供给存储器装置。可以例如在每个计算周期的开始或在任何预定时间间隔期间接收指令。
在步骤8中接收到指令之后,一些示例实施例进一步包括基于所接收的指令设置第一组存储块和第二组存储块的操作模式(步骤9)。因此,存储块的操作模式可以在每个计算层的开始动态调整。例如,如图9所示,操作块可以在连续计算层中期间从基于写的模式交替到基于读的模式。
一些示例实施例包括,在步骤10中,在第一计算层中选择第一组存储块以作为一组读存储块来操作,该组读存储块使得能够经由存储器装置的读端口向至少一个处理单元提供操作数。在图9提供的示例中,存储块Block0和Block1都被设置为读模式。根据一些示例实施例,在步骤10的选择还可以包括步骤11,涉及将第一组存储块的操作模式设置为计算操作模式,使得第一组存储块被配置为读取要在计算中使用(通过至少一个处理单元)并在第一计算层中执行的操作数。如图9所示,存储块Block0和Block1都处于计算模式,使得这些块被配置为分别从输入W1和A1读取操作数,以便在层1中执行计算。根据一些示例实施例,可以通过全读或窄读端口来执行读取,如结合图7所描述的。
一些示例实施例可以包括步骤12,其涉及选择第二组存储块以作为一组写存储块来操作,该组写存储块使得能够经由存储器装置的写端口接收用于存储的操作数。如图9所示,在层1期间以基于写的模式提供存储块Block2和Block3。具体地,存储块Block2和Block3被配置为分别将计算结果A2和针对W2的预加载操作写入存储块本身的存储体单元内。例如,存储块的每个存储体单元可以存储一个或多个操作数,例如W2输入阵列的每个操作数可以存储在单独的存储体中。
根据一些示例实施例,步骤12的选择还包括将第二组存储块中的第一存储块设置(步骤13)为结果模式,使得第一存储块被配置为在第一存储块内写入在第一计算层中已执行计算的结果。如图9所示,第二组存储块中的第一存储块表示为Block2。Block2被配置为写入根据涉及来自输入W1和A1的操作数的计算的结果A2。如图7所示,在经由至少处理单元进行计算时,可以经由处理单元与全写端口F.write之间的反馈连接将计算结果提供给第一存储块。
一些示例实施例可以进一步包括将第二组存储块中的第二存储块的操作模式设置为预加载模式(在步骤14中)。在这种模式下,第二存储块被配置为在第二存储块内写入要在第二计算层中执行的计算中使用的预加载操作数。如图9所示,第二组存储块中的第二存储块被表示为Block3。Block3被配置为将输入W2的操作数写入Block3的存储体单元。来自W2输入阵列的操作数是要在层2期间使用的操作数。因此,这些操作数可以在层1期间进行预加载。这种预加载使计算层2的计算在计算层2开始时立即发生,而无需进行多次存储器读取。如图7所示,第二存储块可以通过窄写端口N.write从DMA写入预加载操作数。
一些示例实施例在第二计算层的开始处包括步骤15,涉及选择第一组存储块以作为一组写存储块组来操作。如图9所示,表示为Block0和Block1的第一组存储块最初在层1中置于基于读的模式,然后在计算层2中置于基于写的模式。
根据一些示例实施例,步骤15的选择可以进一步包括在步骤16将第一组存储块中的第一存储块的操作模式设置为结果模式。当设置为在操作模式下操作时,第一存储块被配置为在第一存储块内写入第二计算层中的已执行计算的结果。如图9所示,第一组存储块中的第一存储块表示为Block0。在第二计算层即层2的开始期间,将Block0配置为写入计算层2的计算的结果A3的一个或多个操作数。如图7所示,在经由至少处理单元进行计算时,可以经由处理单元与全写端口F.write之间的反馈连接将计算结果提供给第一存储块。
根据一些示例实施例,步骤15的选择可以进一步包括在步骤17将第一组存储块中的第二存储块的操作模式设置为预加载模式。在这种模式下操作,第二存储块被配置为在第二存储块内写入要在第三计算层中执行的计算中使用的预加载操作数。如图9所示,第一组存储块中的第二存储块表示为Block1。在第二计算层的开始期间,将Block1配置为在Block1的一个或多个存储体单元内写入W3阵列的预加载操作数。例如,存储块的每个存储体单元可以存储一个或多个操作数,例如W3输入阵列的每个操作数可以存储在单独的存储体中。如图7所示,第二存储块可以通过窄写端口N.write从DMA写入预加载操作数。
一些示例实施例可以进一步包括步骤18,涉及选择第二组存储块以作为一组读存储块来操作。如图9所示,表示为Block2和Block3的第二组存储块最初(例如,在计算层1中)被置于基于写的模式。在第二计算层的开始,将第二组存储块Block2和Block3置于基于读的模式。
根据一些示例实施例,步骤18的选择可以进一步包括在步骤19将第二组存储块的操作模式设置为计算模式。在这种模式下操作,第二组存储块被配置为读取要在第二计算层中执行的计算中使用的操作数。如图9所示,表示为Block2和Block3的第二组存储块最初(例如,在计算层1内)被配置为将操作数写入它们各自的存储体单元中。在第二计算层的开始处,将Block2和Block3置于计算模式,并立即将操作数(在层1中写入,输入A2和W2的操作数)提供给至少一个处理单元,以执行要在第二计算层内执行的计算。因此,通过将存储块的模式从基于写的模式交替为基于读的模式,可以提高计算速度,因为执行计算所需的操作数已经存储在存储块中。
在方法步骤或过程的一般上下文中描述了本文描述的各种示例实施例,该方法步骤或过程可以在一个方面中由体现在计算机可读介质中的计算机程序产品来实现,包括计算机可执行指令,例如程序代码,由联网环境中的计算机执行。例如,应当理解,指令可以引起向集中式数据集线器发送分发指示,该集中式数据集线器可以根据与该分发指示关联的分发模式来分发共享数据。计算机可读介质可以包括可移除和不可移除存储设备,包括但不限于只读存储器(ROM)、随机存取存储器(RAM)、压缩盘(CD)、数字通用光盘(DVD)等。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。计算机可执行指令、相关联的数据结构和程序模块表示用于执行本文公开的方法的步骤的程序代码的示例。这样的可执行指令或相关联的数据结构的特定序列表示用于实现在这样的步骤或过程中描述的功能的相应动作的示例。
在前述说明书中,已经参考了可以随实现而变化的许多具体细节描述了实施例。可以对所描述的实施例进行某些调整和修改。通过考虑本文公开的发明的说明书和实践,其他实施例对于本领域技术人员而言可以是显而易见的。说明书和示例旨在仅被认为是示例性的,本发明的真实范围和精神由所附权利要求指示。图中所示的步骤顺序也旨在仅用于说明目的,并且不旨在限于任何特定的步骤顺序。这样,本领域技术人员可以理解,在实现相同方法时,可以以不同次序执行这些步骤。
在附图和说明书中,已经公开了示例性实施例。然而,可以对这些实施例进行许多变化和修改。相应地,尽管采用了特定术语,但是它们仅在一般性和描述性意义上使用,而不是出于限制的目的,实施例的范围由所附权利要求限定。
Claims (39)
1.一种至少一个核的存储器装置,所述存储器装置包括:
第一组存储块,被配置为在第一计算层中作为一组读存储块操作,并在第二计算层中作为一组写存储块操作,其中,所述第二计算层在所述第一计算层之后;
第二组存储块,被配置为在所述第一计算层中作为一组写存储块操作,并在所述第二计算层中作为一组读存储块操作;
第一读端口,通信地耦合到所述第一组存储块和所述第二组存储块中的每个存储块,并且被配置为从所述一组读存储块中的第一读存储块接收操作数,并将接收到的操作数提供给所述至少一个核的至少一个处理单元;
第二读端口,通信地耦合到所述第一组存储块和所述第二组存储块中的每个存储块,并且被配置为从所述一组读存储块中的第二读存储块接收一个或多个操作数,并将接收到的一个或多个操作数提供给所述至少一个核的所述至少一个处理单元;以及
第一写端口,通信地耦合到所述第一组存储块和所述第二组存储块中的每个存储块,并且被配置为向所述一组写存储块中的第一写存储块提供一个或多个操作数以进行存储。
2.根据权利要求1所述的存储器装置,还包括:
第二写端口,通信地耦合到所述第一组存储块和所述第二组存储块中的每个存储块,并且被配置为向所述一组写存储块中的第二写存储块提供操作数以进行存储。
3.根据权利要求1-2中任一项所述的存储器装置,其中,所述第一组存储块包括第一存储块和第二存储块,并且在所述第一计算层内:
所述第一组存储块中的第一存储块和第二存储块被配置为以计算模式操作,使得所述第一组存储块中的第一存储块和第二存储块被配置为分别经由所述第一读端口和所述第二读端口将要在所述第一计算层中执行的计算中使用的操作数读取至所述至少一个处理单元。
4.根据权利要求3所述的存储器装置,其中,所述第二组存储块包括第一存储块和第二存储块,并且在所述第一计算层内:
所述第二组存储块中的第一存储块被配置为以结果模式操作,使得所述第二组存储块中的所述第一存储块被配置为在所述第一存储块内写入所述第一计算层中已执行计算的结果。
5.根据权利要求4所述的存储器装置,其中,在所述第一计算层内:
所述第一组存储块中的第二存储块被配置为以预加载模式操作,使得所述第二存储块被配置为在所述第二存储块内写入要在第二计算层中执行的计算中使用的预加载操作数。
6.根据权利要求5所述的存储器装置,其中,在每个计算层的开始处,计算模式、结果模式和预加载模式中的至少一个被动态分配给所述第一组存储块和所述第二组存储块中的第一存储块和第二存储块。
7.根据权利要求6所述的存储器装置,其中,在所述第二计算层期间:
所述第二组存储块被配置为以计算模式操作,使得所述第二组存储块被配置为将所述第一计算层内由所述第二组存储块写入的操作数读取到所述至少一个处理单元以执行所述第二计算层的计算。
8.根据权利要求7所述的存储器装置,其中,在所述第二计算层期间:
所述第一组存储块中的第一存储块被配置为以结果模式操作,使得所述第一存储块被配置为在所述第一存储块内写入所述第二计算层中已执行计算的结果。
9.根据权利要求8所述的存储器装置,其中,在所述第二计算层期间:
所述第一组存储块中的第二存储块被配置为以预加载模式操作,使得所述第二存储块被配置为在所述第二存储块内写入预加载操作数,其中,所述预加载操作数将用于要在第三计算层中执行的计算。
10.根据权利要求1所述的存储器装置,其中,所述第一组存储块和所述第二组存储块中的每个存储块是单个读/写静态随机存取存储器(1R/W SRAM)。
11.根据权利要求2所述的存储器装置,其中,所述第一组存储块和所述第二组存储块中的每个存储块经由相应的N对1多路复用器通信地耦合到所述第一写端口和所述第二写端口,并且经由相应的M对1多路复用器通信地耦合到所述第一读端口和所述第二读端口,其中,N是所述存储器装置内的存储块的数量,M是所述存储器装置中的写端口的数量。
12.根据权利要求1至2、4至11中任一项所述的存储器装置,其中,所述核包括单指令多数据(SIMD)架构。
13.一种用于控制存储器装置的方法,所述方法包括:
对于第一计算层:
选择第一组存储块以作为一组读存储块操作,所述一组读存储块使得能够经由所述存储器装置的读端口向至少一个处理单元提供操作数,并且
选择第二组存储块以作为一组写存储块操作,所述一组写存储块使得能够经由所述存储器装置的写端口接收操作数用于存储;以及
在所述第一计算层之后的第二计算层中:
选择所述第一组存储块以作为一组写存储块操作,并且
选择所述第二组存储块以作为一组读存储块操作。
14.根据权利要求13所述的方法,还包括:
生成指令以控制对于每个计算层所述存储器装置的所述第一组存储块和所述第二组存储块的操作模式,其中,所述指令设置所述第一组存储块和所述第二组存储块的操作模式。
15.根据权利要求14所述的方法,其中,所述指令进一步在每个计算层的开始处动态地设置所述第一组存储块和所述第二组存储块的操作模式。
16.根据权利要求14或15中任一项所述的方法,其中,用于设置操作模式的指令还包括:
将所述第一组存储块的操作模式设置为计算模式,使得所述第一组存储块被配置为经由所述至少一个处理单元读取要在计算中使用的操作数,以在所述第一计算层中执行。
17.根据权利要求16所述的方法,其中,所述第二组存储块包括第一存储块和第二存储块,并且其中,用于设置操作模式的指令还包括:
将所述第二组存储块中的第一存储块的操作模式设置为结果模式,使得所述第一存储块被配置为在所述第一存储块内写入所述第一计算层中已执行计算的结果。
18.根据权利要求17所述的方法,其中,所述第一组存储块包括第一存储块和第二存储块,并且其中,用于设置操作模式的指令还包括:
将所述第一组存储块中的第二存储块的操作模式设置为预加载模式,使得所述第二存储块被配置为在所述第二存储块内写入预加载操作数,用于要在所述第二计算层中执行的计算。
19.根据权利要求18所述的方法,其中,用于设置操作模式的指令还包括:
将所述第二组存储块设置为以计算模式操作,使得所述第二组存储块被配置为将所述第一计算层内由所述第二组存储块写入的操作数读取到所述至少一个处理单元以执行所述第二计算层的计算。
20.根据权利要求19所述的方法,其中,用于设置操作模式的指令还包括:
将所述第一组存储块中的第一存储块的操作模式设置为结果模式,使得所述第一存储块被配置为在所述第一存储块内写入所述第二计算层中已执行计算的结果。
21.根据权利要求14-15、17-20中任一项所述的方法,其中,用于设置操作模式的指令还包括:
将所述第一组存储块中的第二存储块的操作模式设置为预加载模式,使得所述第二存储块被配置为在所述第二存储块内写入预加载操作数,用于要在第三计算层中执行的计算。
22.一种存储器系统,包括:
加速器,所述加速器包括与至少一个处理单元相关联的存储器装置,所述存储器装置包括:
第一组存储块,
第二组存储块,
一组读端口,每个读端口通信地耦合到所述第一组存储块和所述第二组存储块中的每个存储块,以及
一组写端口,每个写端口通信地耦合到所述第一组存储块和所述第二组存储块中的每个存储块;以及
主机单元,所述主机单元被配置为将计算机代码编译成多个指令,这些指令:
对于第一计算层:
选择所述第一组存储块以作为一组读存储块操作,所述一组读存储块使得能够经由所述一组读端口向所述至少一个处理单元提供操作数,并且
选择所述第二组存储块以作为一组写存储块操作,所述一组写存储块使得能够经由所述一组写端口接收用于存储的操作数;以及
对于所述第一计算层之后的第二计算层:
选择所述第一组存储块以作为一组写存储块操作,并且
选择所述第二组存储块以作为一组读存储块操作。
23.一种存储指令集的非暂时性计算机可读介质,所述指令集能由存储器装置执行以使所述存储器装置执行:
对于第一计算层:
选择第一组存储块以作为一组读存储块操作,所述一组读存储块使得能够经由所述存储器装置的读端口向至少一个处理单元提供操作数,并且
选择第二组存储块以作为一组写存储块操作,所述一组写存储块使得能够经由所述存储器装置的写端口接收用于存储的操作数;以及
在所述第一计算层之后的第二计算层中:
选择所述第一组存储块以作为一组写存储块操作,以及
选择所述第二组存储块以作为一组读存储块操作。
24.根据权利要求23所述的计算机可读介质,其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
对于每个计算层控制所述第一组存储块和所述第二组存储块的操作模式;以及
基于接收到的指令设置所述第一组存储块和所述第二组存储块的操作模式。
25.根据权利要求24所述的计算机可读介质,其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
将所述第一组存储块的操作模式设置为计算模式,使得所述第一组存储块被配置为经由所述至少一个处理单元读取要在计算中使用的操作数,以在所述第一计算层中执行。
26.根据权利要求24-25中任一项所述的计算机可读介质,其中,所述第二组存储块包括第一存储块和第二存储块,并且其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
将所述第二组存储块中的第一存储块的操作模式设置为结果模式,使得所述第一存储块被配置为在所述第一存储块内写入所述第一计算层中已执行计算的结果。
27.根据权利要求26所述的计算机可读介质,其中,所述第一组存储块包括第一存储块和第二存储块,并且其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
将所述第一组存储块中的第二存储块的操作模式设置为预加载模式,使得所述第二存储块被配置为在所述第二存储块内写入预加载操作数,用于要在所述第二计算层中执行的计算。
28.根据权利要求27所述的计算机可读介质,其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
将所述第二组存储块的操作模式设置为以计算模式操作,使得所述第二组存储块被配置为将所述第一计算层内由所述第二组存储块写入的操作数读取到所述至少一个处理单元以执行所述第二计算层的计算。
29.根据权利要求28所述的计算机可读介质,其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
将所述第一组存储块中的第一存储块的操作模式设置为结果模式,使得所述第一存储块被配置为在所述第一存储块内写入所述第二计算层中已执行计算的结果。
30.根据权利要求24-25、27-29中任一项所述的计算机可读介质,其中,所述指令集能由所述存储器装置执行以使所述存储器装置执行:
将所述第一组存储块中的第二存储块的操作模式设置为预加载模式,使得所述第二存储块被配置为在所述第二存储块内写入要在第三计算层中执行的计算中使用的预加载操作数。
31.一种用于控制存储器装置的方法,所述方法包括:
对于第一计算层:
将第一组存储块作为一组读存储块操作,所述一组读存储块使得能够经由所述存储器装置的读端口向至少一个处理单元提供操作数;并且
将第二组存储块作为一组写存储块操作,所述一组写存储块使得能够经由所述存储器装置的写端口接收操作数进行存储;以及
对于所述第一计算层之后的第二计算层:
将所述第一组存储块作为一组写存储块操作,并且
将所述第二组存储块作为一组读存储块操作。
32.根据权利要求31所述的方法,还包括:
从编译器接收指令,以控制对于每个计算层所述第一组存储块和所述第二组存储块的操作模式;以及
根据接收到的指令设置所述第一组存储块和所述第二组存储块的操作模式。
33.根据权利要求32所述的方法,其中,所述接收和所述设置在每个计算层的开始处动态地发生。
34.根据权利要求32或33中任一项所述的方法,其中,所述设置还包括:
将所述第一组存储块的操作模式设置为计算模式,使得所述第一组存储块被配置为经由所述至少一个处理单元读取要在计算中使用的操作数,以在所述第一计算层中执行。
35.根据权利要求34所述的方法,其中,所述第二组存储块包括第一存储块和第二存储块,并且其中,所述设置还包括:
将所述第二组存储块中的第一存储块的操作模式设置为结果模式,使得所述第一存储块被配置为在所述第一存储块内写入所述第一计算层中已执行计算的结果。
36.根据权利要求35所述的方法,其中,所述第一组存储块包括第一存储块和第二存储块,并且其中,所述设置还包括:
将所述第一组存储块中的第二存储块的操作模式设置为预加载模式,使得所述第二存储块被配置为在所述第二存储块内写入预加载操作数,用于要在所述第二计算层中执行的计算。
37.根据权利要求36所述的方法,其中,所述设置还包括:
将所述第二组存储块设置为以计算模式操作,使得所述第二组存储块被配置为将所述第一计算层内由所述第二组存储块写入的操作数读取到所述至少一个处理单元以执行所述第二计算层的计算。
38.根据权利要求37所述的方法,其中,所述设置还包括:
将所述第一组存储块中的第一存储块的操作模式设置为结果模式,使得所述第一存储块被配置为在所述第一存储块内写入所述第二计算层中已执行计算的结果。
39.根据权利要求32-33、35-38中任一项所述的方法,其中,所述设置还包括:
将所述第一组存储块中的第二存储块的操作模式设置为预加载模式,使得所述第二存储块被配置为在所述第二存储块内写入要在第三计算层中执行的计算中使用的预加载操作数。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762610089P | 2017-12-22 | 2017-12-22 | |
US62/610,089 | 2017-12-22 | ||
PCT/US2018/067370 WO2019126793A2 (en) | 2017-12-22 | 2018-12-21 | A memory apparatus and method for controlling the same |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111656339A CN111656339A (zh) | 2020-09-11 |
CN111656339B true CN111656339B (zh) | 2023-06-13 |
Family
ID=66951237
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880079719.5A Active CN111656339B (zh) | 2017-12-22 | 2018-12-21 | 存储器装置及其控制方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10761851B2 (zh) |
EP (1) | EP3729289A4 (zh) |
JP (1) | JP7264897B2 (zh) |
CN (1) | CN111656339B (zh) |
WO (1) | WO2019126793A2 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11295205B2 (en) * | 2018-09-28 | 2022-04-05 | Qualcomm Incorporated | Neural processing unit (NPU) direct memory access (NDMA) memory bandwidth optimization |
US11609792B2 (en) * | 2019-03-19 | 2023-03-21 | Alibaba Group Holding Limited | Maximizing resource utilization of neural network computing system |
WO2020220935A1 (zh) * | 2019-04-27 | 2020-11-05 | 中科寒武纪科技股份有限公司 | 运算装置 |
US11016775B2 (en) | 2019-06-26 | 2021-05-25 | Amazon Technologies, Inc. | Neural network operation reordering for parallel execution |
US11922292B2 (en) * | 2020-01-27 | 2024-03-05 | Google Llc | Shared scratchpad memory with parallel load-store |
CN115269008B (zh) * | 2022-09-29 | 2023-02-28 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、介质及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101095116A (zh) * | 2004-11-05 | 2007-12-26 | 数据机器人技术公司 | 允许各种规模存储装置的动态可扩展和可收缩的容错存储系统和方法 |
CN101699413A (zh) * | 2009-10-30 | 2010-04-28 | 成都市华为赛门铁克科技有限公司 | 硬盘数据读写控制方法、装置及数据存储系统 |
CN107003988A (zh) * | 2014-12-19 | 2017-08-01 | 英特尔公司 | 用于执行卷积运算的存储设备和方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030050944A1 (en) * | 2001-08-21 | 2003-03-13 | Olivier Gay-Bellile | Device for computing discrete transforms |
JP4256210B2 (ja) * | 2003-06-12 | 2009-04-22 | 株式会社半導体理工学研究センター | 同期バンク型メモリ |
US8316074B2 (en) * | 2005-03-11 | 2012-11-20 | Network Appliance, Inc. | Network-accessible memory |
US7596643B2 (en) * | 2007-02-07 | 2009-09-29 | Siliconsystems, Inc. | Storage subsystem with configurable buffer |
US7978516B2 (en) * | 2007-12-27 | 2011-07-12 | Pliant Technology, Inc. | Flash memory controller having reduced pinout |
US8533435B2 (en) * | 2009-09-24 | 2013-09-10 | Nvidia Corporation | Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict |
US8547774B2 (en) * | 2010-01-29 | 2013-10-01 | Mosys, Inc. | Hierarchical multi-bank multi-port memory organization |
JP2012174016A (ja) | 2011-02-22 | 2012-09-10 | Renesas Electronics Corp | データ処理装置およびそのデータ処理方法 |
US20140143367A1 (en) * | 2012-11-19 | 2014-05-22 | Board Of Regents, The University Of Texas System | Robustness in a scalable block storage system |
KR20150086718A (ko) * | 2014-01-20 | 2015-07-29 | 삼성전자주식회사 | 메모리를 이용하여 파이프라인이 데이터를 처리하는 방법 및 장치 |
US10678544B2 (en) * | 2015-09-19 | 2020-06-09 | Microsoft Technology Licensing, Llc | Initiating instruction block execution using a register access instruction |
US10664751B2 (en) | 2016-12-01 | 2020-05-26 | Via Alliance Semiconductor Co., Ltd. | Processor with memory array operable as either cache memory or neural network unit memory |
-
2018
- 2018-12-21 CN CN201880079719.5A patent/CN111656339B/zh active Active
- 2018-12-21 WO PCT/US2018/067370 patent/WO2019126793A2/en unknown
- 2018-12-21 EP EP18890824.8A patent/EP3729289A4/en active Pending
- 2018-12-21 JP JP2020531604A patent/JP7264897B2/ja active Active
- 2018-12-21 US US16/231,323 patent/US10761851B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101095116A (zh) * | 2004-11-05 | 2007-12-26 | 数据机器人技术公司 | 允许各种规模存储装置的动态可扩展和可收缩的容错存储系统和方法 |
CN101699413A (zh) * | 2009-10-30 | 2010-04-28 | 成都市华为赛门铁克科技有限公司 | 硬盘数据读写控制方法、装置及数据存储系统 |
CN107003988A (zh) * | 2014-12-19 | 2017-08-01 | 英特尔公司 | 用于执行卷积运算的存储设备和方法 |
Non-Patent Citations (1)
Title |
---|
王超;李战怀;胡娜;侯利曼.一种低恢复时间低存储空间的块级连续数据保护机制.西北工业大学学报.2011,第29卷(第03期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
WO2019126793A2 (en) | 2019-06-27 |
JP2021507352A (ja) | 2021-02-22 |
EP3729289A4 (en) | 2021-03-03 |
US20190196831A1 (en) | 2019-06-27 |
JP7264897B2 (ja) | 2023-04-25 |
WO2019126793A3 (en) | 2020-03-26 |
CN111656339A (zh) | 2020-09-11 |
EP3729289A2 (en) | 2020-10-28 |
US10761851B2 (en) | 2020-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111656339B (zh) | 存储器装置及其控制方法 | |
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 | |
US11436143B2 (en) | Unified memory organization for neural network processors | |
CN109147842B (zh) | 同时进行数据路径中计算操作的设备及方法 | |
JP6791522B2 (ja) | インデータパス計算動作のための装置及び方法 | |
US20190228308A1 (en) | Deep learning accelerator system and methods thereof | |
CN111630487B (zh) | 用于神经网络处理的共享存储器的集中式-分布式混合组织 | |
WO2021046568A1 (en) | Methods for performing processing-in-memory operations, and related memory devices and systems | |
US20220058237A1 (en) | Programmable and hierarchical control of execution of gemm operation on accelerator | |
US11544189B2 (en) | System and method for memory management | |
US11093276B2 (en) | System and method for batch accessing | |
US10915317B2 (en) | Multiple-pipeline architecture with special number detection | |
CN112906877A (zh) | 用于执行神经网络模型的存储器架构中的数据布局有意识处理 | |
CN114072778A (zh) | 存储器处理单元架构 | |
US7437729B2 (en) | Method for load balancing a loop of parallel processing elements | |
US12073317B2 (en) | Method and system for processing a neural network | |
KR20240118633A (ko) | 메모리 장치 및 그 동작 방법 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240229 Address after: 5th Floor, No. 2, Lane 55, Chuanhe Road, No. 366 Shangke Road, Pudong New Area Free Trade Pilot Zone, Shanghai Patentee after: Pingtouge (Shanghai) semiconductor technology Co.,Ltd. Country or region after: China Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands Patentee before: ALIBABA GROUP HOLDING Ltd. Country or region before: Cayman Islands |
|
TR01 | Transfer of patent right |