CN111324294A - 存取张量数据的方法和装置 - Google Patents

存取张量数据的方法和装置 Download PDF

Info

Publication number
CN111324294A
CN111324294A CN201811541065.1A CN201811541065A CN111324294A CN 111324294 A CN111324294 A CN 111324294A CN 201811541065 A CN201811541065 A CN 201811541065A CN 111324294 A CN111324294 A CN 111324294A
Authority
CN
China
Prior art keywords
memory
data
buffer memory
cache line
data item
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.)
Granted
Application number
CN201811541065.1A
Other languages
English (en)
Other versions
CN111324294B (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.)
Horizon Shanghai Artificial Intelligence Technology Co Ltd
Original Assignee
Horizon Shanghai Artificial Intelligence 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 Horizon Shanghai Artificial Intelligence Technology Co Ltd filed Critical Horizon Shanghai Artificial Intelligence Technology Co Ltd
Priority to CN201811541065.1A priority Critical patent/CN111324294B/zh
Priority to JP2019226595A priority patent/JP7008983B2/ja
Priority to US16/715,127 priority patent/US11163686B2/en
Priority to EP19216498.6A priority patent/EP3671424A1/en
Priority to TW108146284A priority patent/TWI743627B/zh
Priority to KR1020190168867A priority patent/KR102397100B1/ko
Publication of CN111324294A publication Critical patent/CN111324294A/zh
Application granted granted Critical
Publication of CN111324294B publication Critical patent/CN111324294B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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
    • G06F12/023Free address space management
    • 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/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/608Details relating to cache mapping
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Neurology (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Complex Calculations (AREA)

Abstract

公开了一种存取张量数据的方法和装置。该方法包括:确定第一存储器的第一行地址;将第一存储器中的第一行地址处的数据项复制到第一缓冲存储器的第一缓存行中;将第一缓冲存储器的第一缓存行中的每个第一数据项移动到第二缓冲存储器的至少第一缓存行中的相应位置处;以及将第二缓冲存储器的第一缓存行中的数据项存储到第二存储器中的对应的目标位置处。通过根据本公开的实施例的方法和装置,能够提高人工智能芯片内部的数据存取效率,从而提高人工智能芯片的性能。

Description

存取张量数据的方法和装置
技术领域
本公开总体上涉及人工智能的技术领域,并且具体地涉及一种存取张量数据的方法和装置。
背景技术
已经设计出各种人工智能芯片(AI芯片),专门用于处理人工智能应用中的大量计算任务。
随着人工智能技术的应用领域的不断扩展,对人工智能芯片的性能方面的要求也越来越高。
存储性能(包括数据的存取次数、带宽等)始终是人工智能芯片的性能的主要瓶颈之一,并且始终期望能够进一步改善人工智能芯片的数据流设计,使得人工智能芯片能够更高效率地存取数据。
发明内容
根据本公开的一个方面,提供了一种存取张量数据的方法。该方法可以包括:确定第一存储器的第一行地址,其中,期望从张量数据的逻辑结构中存取的至少一个第一数据项存储在第一存储器的第一行地址处;将第一存储器中的第一行地址处的数据项复制到第一缓冲存储器的第一缓存行中;将第一缓冲存储器的第一缓存行中的每个第一数据项移动到第二缓冲存储器的至少第一缓存行中的相应位置处,其中,每个第一数据项在第二缓冲存储器的至少第一缓存行中的相应位置可以取决于在第二存储器中分配给该第一数据项的目标位置;以及将第二缓冲存储器的第一缓存行中的数据项存储到第二存储器中的对应的目标位置处。
根据本公开的另一个方面,还提供了一种存取张量数据的装置。该装置可以包括第一缓冲存储器、第二缓冲存储器和控制器,其中,控制器可以耦接到第一存储器、第二存储器、第一缓冲存储器和第二缓冲存储器并且可以被配置为在被启动时根据指令至少执行上述方法。
根据本公开的另一个方面,还提供了一种计算机可读取的非临时性存储介质,在其上存储有程序指令。所存储的程序指令可以在被处理器或控制器执行时执行上述方法。
在根据本公开的实施例的方法和装置中,通过第一缓冲存储器,使得能够按照数据对齐的方式高效率地从第一存储器中读取数据;通过第二缓冲存储器,使得能够按照期望格式高效率地调整期望存取的数据项,然后能够按照数据对齐的方式高效率地向第一存储器中写入数据。由此,通过根据本公开的实施例的方法和/或装置能够提高人工智能芯片内部的数据存取效率,进而提高人工智能芯片的性能并降低人工智能芯片的功耗。
另外,根据本公开的实施例的方法和/或装置还能够支持流水线处理,从而进一步提高人工智能芯片内部的数据存取效率,并进一步提高人工智能芯片的性能并降低人工智能芯片的功耗。
附图说明
通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同或相似的部件或步骤。
图1示出根据本公开的实施例的系统的示例。
图2示出根据本公开的实施例的片上存储器的示例。
图3示出根据本公开的实施例的方法的示例。
图4示出根据本公开的实施例的方法的示例。
图5示出根据本公开的实施例的方法的示例。
图6示出根据本公开的实施例的方法的示例。
图7示出根据本公开的实施例的方法的示例。
图8示出根据本公开的实施例的方法的示例。
图9示出根据本公开的实施例的方法的示例。
图10示出根据本公开的实施例的方法的示例。
图11示出根据本公开的实施例的方法的示例。
图12示出根据本公开的实施例的方法的示例。
图13示出根据本公开的实施例的方法的示例。
图14示出根据本公开的实施例的方法的示例。
图15示出根据本公开的实施例的方法的示例。
图16示出根据本公开的实施例的方法的示例。
图17示出根据本公开的实施例的装置的示例。
具体实施方式
下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
概述
由于成本、芯片尺寸等不同方面的原因,在人工智能芯片中,片上存储器的容量通常十分有限(例如,通常为几百KB至几MB),往往无法存储或缓存要处理的完整张量数据。另外,诸如卷积加速内核等部件通常也只包括有限数量的乘法累加器。硬件资源的限制导致人工智能芯片通常每次只能处理整个张量数据中的一部分数据项。
出于诸如硬件资源的限制、期望能够减少例如数据后处理中的操作量、期望能够融合地处理人工神经网络的多个层的运算等不同方面的原因和需求,往往需要例如将完整的张量数据拆分成多个部分,以便分别存储(例如,连续地存储多个部分张量数据)或者每次将完整张量数据中的一个部分数据项提供给人工智能芯片进行处理。
另一方面,由于张量的拆分处理或者其他处理需求,还可能需要拼接或合并一个或多个张量数据。例如,对卷积加速内核每次输出的局部张量进行拼接或合并,以便获得最终完整的张量数据。
为此,在一种处理方式中,可以借助于人工智能芯片中的处理器或控制器的软件处理能力,使处理器或控制器根据预定的指令序列执行用于控制张量数据的拆分/合并/调整的处理逻辑。例如,这样的处理逻辑可以包括:将完整张量数据的数据项(由于硬件资源的限制,通常是部分数据项)从片外存储器读取到片上存储器中;然后,针对读取到片上存储器中的数据项执行拆分/合并处理。
然而,这样的处理方式增加了人工智能芯片的处理器或控制器的工作负担,并且对人工智能芯片的处理器或控制器的其他控制操作造成额外的延迟。而且,这样的处理方式无法充分地利用有限的硬件资源,例如,无法通过流水线的方式执行。
另外,由于片上存储器的容量限制,处理器或控制器在执行上述处理逻辑的过程中可能需要控制在片外存储器与片上存储器之间进行额外的多次数据交换/传输。例如,处理器或控制器可能需要控制将一些中间处理结果临时输出到片外存储器中,以便确保片上存储器中的剩余容量足以支持上述处理过程。这对长人工智能芯片中的其他操作或处理造成进一步的延迟,并且显著地降低人工智能芯片的性能和增加人工智能芯片的功耗。
示例性系统
根据本公开的实施例的方法和装置旨在通过适当的硬件结构和改进的数据流控制,直接从加载到片上存储器中的张量数据中、按照期望的数据项布置方式获取期望被存取的数据部分,以便降低人工智能芯片的处理器或控制器的工作负担,减少片外存储器与片上存储器之间的数据交换/传输次数,充分地利用有限的硬件资源,例如能够通过流水线式的方式提高效率,从而提高人工智能芯片的性能并降低人工智能芯片的功耗。
虽然根据本公开的实施例的方法和装置是结合人工智能芯片的应用场景下描述的,但是根据本公开的实施例的方法和装置实际上可以适用于任何一种如下场景或系统,即,需要在大容量的低速存储系统(例如,人工智能芯片的片外存储器)与小容量的高速存储系统(例如,人工智能芯片的片内存储器)之间进行数据交换,并且可能期望小容量的高速存储系统中的数据项具有期望的排布方式。
为了便于描述根据本公开的实施例的方法和装置,首先在图1中示出能够应用根据本公开的实施例的方法和装置的系统的示例。
如图1所示,该示例系统可以包括在根据本公开的实施例的方法和装置中涉及的一些部件/模块/电路/单元/元件,例如控制器CON、第一缓冲存储器BUF1和第二缓冲存储器BUF2等。
图1的示例中的第一存储器SRAM1和第二存储器SRAM2可以形成根据本公开的实施例的系统中的高速存储系统,或者作为系统中的高速存储系统的一部分。
在不同的实施例中,高速存储系统中的第一存储器SRAM1和第二存储器SRAM2中的每一个可以是能够支持二维数据的存取和/或数据的二维存取的静态随机存取存储部件/模块或高速缓冲存储部件/模块。
在一个实施例中,第一存储器SRAM1和第二存储器SRAM2中的每一个可以包括多个一维静态随机存取存储器(例如,常规的线性静态随机存取存储器),其中,各个一维静态随机存取存储器的同一地址处的各个存储单元可以构成第一存储器SRAM1或第二存储器SRAM2中的一个存储行。
例如,第一存储器SRAM1可以包括4个一维静态存储器并且每个一维静态存储器中的每个存储单元可以为32比特。相应地,在该示例中,第一存储器SRAM1的一个存储行可以存储128比特的数据,或者说第一存储器SRAM1的存储宽度为128比特。
在另一个实施例中,第一存储器SRAM1和第二存储器SRAM2中的每一个也可以是二维存储器,并直接支持二维数据的存取和/或数据的二维存取。
虽然在图1中将第一存储器SRAM1和第二存储器SRAM2示为分开设置的两个存储部件/模块,但是第一存储器SRAAM1和第二存储器SRAM2也可以是能够支持二维数据存取的同一个存储部件/模块(该存储部件/模块例如可以包括多个一维静态随机存取存储器或一个或多个二维存储器以便支持二维数据的存取和/或数据的二维存取)中的两个不同的部分。
例如,在人工智能芯片的情况下,图1的示例中的第一存储器SRAM1和第二存储器SRAM2可以是两块片上静态随机存取存储器或片上高速缓冲存储器,也可以是同一个片上存储器(可以是包括一个或多个支持二维数据的存取和/或数据的二维存取的存储部件的存储系统)的两个部分。
例如,如图2所示,第一存储器SRAM1和第二存储器SRAM2可以分别对应于根据片上存储器系统MEM确定的存储区域中的左上角的部分(即,与行地址R0至Rm且列地址C0至Cp相对应的存储区域/存储部分)和右下角的部分(即,与行地址Rn至末尾行地址且列地址Cq至末尾列地址相对应的存储区域/存储部分)。
另外,根据不同的实施例,可以从高速存储系统中固定地将两个存储部件或两个存储区域用作第一存储器SRAM1和第二存储器SRAM2,也可以在系统的运行之前或运行过程中,例如由控制器CON根据预定的程序指令动态地确定两个存储部件或两个存储区域作为第一存储器SRAM1和第二存储器SRAM2。
在一个实施例中,图1中的粗线框中的部分(包括控制器CON、第一存储器SRAM1、第二存储器SRAM2、第一缓冲存储器BUF1和第二缓冲存储器BUF2)可以实施在一个芯片上并且形成用于存取张量数据的片上系统。例如,在人工智能芯片的情况下,图1中的粗线框中的部分可以实施在人工智能芯片上,并且用于高效率地存取张量数据。相应地,存储器DDR可以是动态随机存取存储器,并且通常被称为片外存储器。
控制器CON可以根据预定的指令序列(例如,可执行的程序指令序列)或者响应于从外部输入的指令,执行逻辑处理和/或控制。
为了简洁,在图1中仅例示与存储有关的方面,而省略了诸如用于指令时序控制的定时控制器、用于指令中断控制的中断控制器、专门设计用于高效率地执行预定运算(例如,卷积神经网络中的卷积运算、池化运算等)的运算加速内核、用于实现部件之间的互联的交叉开关(Crossbar)和/或多路选择器、协处理器、专门用于控制存取片外存储器中的数据的片外数据传输管理器等其他可能的部件/模块/电路/单元/元件。
根据不同的实施例,图1中的控制器CON可以对应于前述的某个专门用于控制数据存取的控制器(例如,存储器存取控制器),也可以包括前述省略的一个或多个部件/模块/电路/单元/元件或者实现前述省略的一个或多个部件/模块/电路/单元/元件的相应功能。
例如,在人工智能芯片的情况下,控制器CON可以是例如基于图形处理器(GPU)、ARM处理器、现场可编程门阵列(FPGA)等构建的处理器或控制器,并且可以根据针对预先设计的人工神经网络而预先编译出的可执行指令序列,执行例如除了人工神经网络中的运算本身之外的其他逻辑处理,和/或向人工智能芯片中的其他部件或电路(例如,数据存取控制器、卷积加速内核等)发出控制指令和相关参数,以使芯片中的其他部件或电路能够响应于所接收的指令而执行相应的操作,例如,存取片外存储器和/或片内存储器中的数据、启动乘法累加器以执行卷积运算等。
在另外的示例中,在人工智能芯片的情况下,控制器CON也可以是芯片上专门用于控制存取片外存储器和/或片内存储器的存取控制器或数据传输控制器等,例如基于FPGA开发的精简指令集计算(RISC)软处理器内核等,并且可以单独地控制对片外存储器和/或片内存储器中的数据的存取操作,也可以例如协助主处理器或响应来自主处理器的指令,控制对片外存储器和/或片内存储器中的数据的存取操作。
第一缓冲存储器BUF1和第二缓冲存储器BUF2可以是高速缓冲存储器或静态随机存取存储器,其数据存取速率可以与包括第一存储器SRAM1和第二存储器SRAM2的高速存储系统的数据存取速率相匹配。
在本文中,“相匹配”可以意味着第一缓冲存储器BUF1、第二缓冲存储器BUF2、第一存储器SRAM1和第二存储器SRAM2的数据存取速率可以相同或相近。例如,第一缓冲存储器BUF1、第二缓冲存储器BUF2、第一存储器SRAM1和第二存储器SRAM2的数据存取速率的差异可以在预定的阈值以下,例如,可以在公差允许的范围内并且因此而在实际的应用中可以被忽略。
在一个实施例中,第一缓冲存储器BUF1可以包括一个或多个缓存行,第二缓冲存储器BUF2可以包括两个或多个缓存行。
在另一个实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括至少两个缓存行,从而能够确保数据存取过程中的处理效率。
在另外的实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括两个缓存行,从而能够通过低成本的硬件结构确保数据存取过程中的处理效率。
在另外的实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以是按照缓存行循环寻址的缓冲存储器,从而能够支持无边界的存储空间,并且能够简化存储控制。
在另一个实施例中,可以使第一缓冲存储器BUF1的每个缓存行的容量与第一存储器SRAM1中的具有相同行地址的多个存储单元的总容量(即,第一存储器SRAM1的存储宽度)相同,并且使第二缓冲存储器BUF2的每个缓存行的容量与第二存储器SRAM2中的具有相同行地址的多个存储单元的总容量(即,第二存储器SRAM2的存储宽度)相同,从而能够极大地简化设计并降低控制逻辑的复杂度。
进一步地,第一缓冲存储器BUF1的每个缓存行的容量与第二缓冲存储器BUF2的每个缓存行的容量相同,或者,第一缓冲存储器BUF1的每个缓存行的容量、第二缓冲存储器BUF2的每个缓存行的容量、第一存储器SRAM1的存储宽度和第二存储器SRAM2的存储宽度相同,从而确保能够简单地适应允许动态确定第一存储器SRAM1和第二存储器SRAM2的情况。
为了简单,将在如下示例配置的情况下描述本公开的的实施例或示例:控制器CON执行预定的指令序列,并且控制先将来自存储器DDR的至少一部分数据、或者来自系统内的其他运算部件(例如,卷积加速内核)且需要输出给存储器DDR的至少一部分数据存储在第一存储器SRAM1中,然后控制按照第一存储器SRAM1→第一缓冲存储器BUF1→第二缓冲存储器BUF2→第二存储器SRAM2的数据流,使第一存储器SRAM1中的部分数据项按照期望的方式存储到第二存储器SRAM2中,其中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括按照缓存行循环寻址的两个缓存行。
如前文所述,第一存储器SRAM1和第二存储器SRAM2也可以是动态确定的。例如,控制器CON可以在系统的运行之前或运行过程中根据预定的程序指令动态地确定数据流,使得在实际运行过程中,数据的流向实际上可以包括第一存储器SRAM1→第一缓冲存储器BUF1→第二缓冲存储器BUF2→第二存储器SRAM2和/或第二存储器SRAM2→第一缓冲存储器BUF1→第二缓冲存储器BUF2→第一存储器SRAM1。
示例性方法
图3示出根据本公开的实施例的存取张量数据的方法的一个示例。该方法例如可以由图1的示例系统中的控制器CON实施。
如图3所示,根据本公开的实施例的示例方法可以包括步骤S10、S20、S30和S40。
在步骤S10中,确定第一存储器SRAM1的第一行地址,其中,期望从张量数据的逻辑结构中存取的至少一个第一数据项存储在第一存储器SRAM1的第一行地址处。
在步骤S20中,可以将第一存储器SRAM1中的第一行地址处的数据项复制到第一缓冲存储器BUF1的第一缓存行中。根据不同的情况,复制到第一缓冲存储器BUF1的第一缓存行中的数据项可以包括步骤S10中的至少一个第一数据据项,也可能包括其他不期望被存取的数据项。
在步骤S30中,可以将第一缓冲存储器BUF1的第一缓存行中的每个第一数据项移动到第二缓冲存储器BUF2的至少第一缓存行中的相应位置处,其中,每个第一数据项在第二缓冲存储器BUF2的至少第一缓存行中的相应位置可以取决于在第二存储器SRAM2中分配给该第一数据项的目标位置。
取决于第一数据项在第二缓冲存储器BUF2中的相应位置,从第一缓冲存储器BUF1移动到第二缓冲存储器BUF2中的第一数据项可以只占据第二缓冲存储器BUF2的第一缓存行,也可以占据第二缓冲存储器BUF2的第一缓存行和其他一个或多个缓存行。
在从第一缓冲存储器BUF1移动到第二缓冲存储器BUF2中的第一数据项占据第二缓冲存储器BUF2的第一缓存行和第二缓冲存储器BUF2的其他一个或多个缓存行的情况下,在第一存储器SRAM1中,第二缓冲存储器BUF2的第一缓存行中的每个第一数据项先于第二缓冲存储器的其他每个缓存行中的每个第一数据项。
步骤S40、将第二缓冲存储器BUF2的第一缓存行中的数据项存储到第二存储器SRAM2中的对应的目标位置处。
根据不同的情况,要在该步骤中存储到第二存储器SRAM2中的对应的目标位置处的数据项至少包括第二缓冲存储器BUF2的第一缓存行中的第一数据项,也可能包括在前一次处理之后仍遗留在第二缓冲存储器BUF2的第一缓存行中、期望被存取但尚未被输出到第二存储器SRAM2中的目标位置处的数据项(如将在下文所述的那样,上述的步骤S10至S40可以重复)。
在上述第一行地址是第一存储器SRAM1中需要处理的最后一个行地址的情况下,如图4所示,根据本公开的实施例的方法还可以包括步骤S50。
在步骤S50中,在第二缓冲存储器BUF2的第二缓存行包括至少一个第一数据项的情况下,可以将第二缓冲存储器BUF2的第二缓存行中的每个第一数据项存储到第二存储器SRAM2中的对应的目标位置处,其中,在第一存储器SRAM1中,第二缓冲存储器BUF2的第二缓存行中的每个第一数据项位于第二缓冲存储器BUF2的第一缓存行中的每个第一数据项之后。
在第一存储器SRAM1中还包括另外的需要处理的行地址的情况下,例如,在前述的第一行地址之后还存在需要继续处理的第二行地址,如图5所示,根据本公开的实施例的方法还可以包括步骤S10’、S20’、S30’和S40’。
在步骤S10’中,可以继续确定第一存储器SRAM1的第二行地址,其中,期望从张量数据的逻辑结构中存取的至少一个第二数据项存储在第一存储器SRAM1的第二行地址处。
在步骤S20’中,可以将第一存储器SRAM1中的第二行地址处的数据项复制到第一缓冲存储器BUF1的第二缓存行中。
如前文所述,第一缓冲存储器BUF1也可以只包括一个缓存行,在这样的情况下,在步骤S20’中,可以将第一存储器SRAM1中的第二行地址处的数据项复制到第一缓冲存储器BUF1的唯一的缓存行中。在如图5所示那样依次地执行步骤S40和S10’的情况下,也可以使用包括一个缓存行的第一缓冲存储器BUF1。
然而,在期望采用流水线式处理的情况(将在后文更详细地描述)下,需要在将第一存储器SRAM1中的第二行地址处的数据项复制到第一缓冲存储器BUF1的唯一的缓存行中之前,确保先前在步骤S20中复制到第一缓冲存储器BUF1中的数据项已经通过步骤S30中移动到第二缓冲存储器BUF2中。
因此,如果使用包括一个缓存行的第一缓冲存储器BUF1,则在流水线式处理的情况下,需要控制步骤S20’与步骤S40并行地执行。
如果第一缓冲存储器BUF1包括可交替使用(按照缓存行循环寻址)的两个缓存行,则在流水线式处理的情况下,可以使步骤S20’(可能地,可以包括步骤S10’)与步骤S10、S20、S30和S40中的任何一个步骤并行地执行,逻辑控制方式更加灵活,并且能够实现更高效的流水线控制,而且只增加一个缓存行,从硬件成本的角度来看也是容易被接受的。进一步地,在成本允许的情况下,第一缓冲存储器BUF1可以包括更多的缓存行,并且可以按照缓存行循环寻址,从而实现无边界的存储空间。
在步骤S30’中,可以将第一缓冲存储器BUF1的第二缓存行中的每个第二数据项移动到第二缓冲存储器BUF2的至少第二缓存行中的相应位置处,其中,每个第二数据项在第二缓冲存储器BUF2的至少第二缓存行中的相应位置可以取决于在第二存储器SRAM2中分配给该第二数据项的目标位置。
在步骤S30’时,由于前述的步骤S30和步骤S40,在第二缓冲存储器BUF2的第二缓存行中仍可能包括一个或多个尚未被输出到第二存储器SRAM2中的目标位置处的第一数据项。因此,在步骤S30’中,将每个第二数据项移动到第二缓冲存储器BUF2的至少第二缓存行中,能够通过简单地方式确保期望被存取的所有数据最终均能够被输出到第二存储器SRAM2中。
类似于前述的步骤S30中的情况,取决于第二数据项在第二缓冲存储器BUF2中的相应位置,从第一缓冲存储器BUF1移动到第二缓冲存储器BUF2中的第二数据项可以只占据第二缓冲存储器BUF2的第二缓存行,也可以占据第二缓冲存储器BUF2的第二缓存行和第二缓冲存储器BUF2的其他一个或多个缓存行。在从第一缓冲存储器BUF1移动到第二缓冲存储器BUF2中的第二数据项占据第二缓冲存储器BUF2的第二缓存行和其他一个或多个缓存行的情况下,在第一存储器SRAM1中,第二缓冲存储器BUF2的第二缓存行中的每个第二数据项先于第二缓冲存储器的其他每个缓存行中的每个第二数据项。
为此,如前文所述,第二缓冲存储器BUF2可以包括按照缓存行循环寻址的两个缓存行。在成本允许的情况下,第二缓冲存储器BUF2可以包括按照缓存行循环寻址的更多的缓存行。另外,第二缓冲存储器BUF2可以支持在一个读写周期内完成数据的读出和写入,例如,第二缓冲存储器BUF2可以支持在一个读写周期的第一时间点(例如,一个读写时钟的上升沿)从一个缓存行输出数据并且在该读写周期的第二时间点(该读写时钟的下降沿)向另一个缓存行输入数据,从而能够进一步地提高芯片性能。
在步骤S40’中,可以将第二缓冲存储器BUF2的第二缓存行中的数据项存储到第二存储器SRAM2中的对应的目标位置处。
类似于前述的步骤S40,根据不同的情况,要在步骤S40’中存储到第二存储器SRAM2中的对应的目标位置处的数据项至少包括第二缓冲存储器BUF2的第二缓存行中的第二数据项,也可以包括先前在步骤S30和S40之后仍遗留在第二缓冲存储器BUF2的第二缓存行中、期望被存取但尚未被输出到第二存储器SRAM2中的目标位置处的第一数据项。
在上述第二行地址是第一存储器SRAM1中需要处理的最后一个行地址的情况下,如图6所示,根据本公开的实施例的方法还可以包括步骤S50’。
在步骤S50’中,在第二缓冲存储器BUF2的第一缓存行包括至少一个第二数据项的情况下,可以将第二缓冲存储器BUF2的第二缓存行中的每个第二数据项存储到第二存储器SRAM2中的对应的目标位置处,其中,在第一存储器SRAM1中,第二缓冲存储器BUF2的第二缓存行中的每个第一数据项位于第二缓冲存储器BUF2的第一缓存行中的每个第一数据项之后。
在第一存储器SRAM1中还包括另外的需要处理的行地址的情况下,例如,在前述的第二行地址之后还存在需要继续处理的第三行地址的情况下,如图7所示,可以在步骤S40’之后针对第三行地址重复执行步骤S10至S40(使用第三行地址替代前述的第一地址);如果第三行地址是最后要处理的行地址,则可以在步骤S40之后执行步骤S50;否则,如果在前述的第三行地址之后还存在需要继续处理的第四行地址,则可以在步骤S40之后针对第四行地址重复执行步骤S10’至S40’(使用第四行地址替代前述的第二地址);如果第四行地址是最后要处理的行地址,则可以在步骤S40’后执行步骤S50’;以此类推,直至处理完第一存储器SRAM1中的所有需要处理的行地址。
例如,如图8所示,在开始执行图7的示例方法的步骤S10之前或之时,第一存储器SRAM1中当前连续地存储某个张量数据的部分数据项,其中,例如,H1c1w9表示该张量数据的逻辑结构(可以是一个数据立方体,并且在本示例中,各行、各列和各通道从0开始计数)中的位于第1个行(H1)、第1个通道(c1)和第9个列(w9)处的体素(Voxel)的数据值。
在图8的示例中,期望只读取张量数据的逻辑结构中的位于第1个通道(c1)上的从第0个行至第1个行(H0~H1)且从第2个列至第11个列(w2~w11)的数据项(即,图8的SRAM1中的粗线框中的数据项),并且后续的处理期望能够高效率地获取并处理这部分数据项(例如,期望在满足硬件的数据对齐的要求的同时,使卷积运算内核能够准确地获取该部分数据项,以便执行卷积运算;例如,期望能够通过将该部分数据项“保持原样”地填充/输出到预定存储空间的预定位置处的方式,直接且简单地实现特征数据的合并或拼接;等等),从而期望该部分数据项能够按照期望的方式存储在片上存储器中(例如,图8的SRAM2中的粗线框所示的方式)。
如图8所示,在步骤S10中,控制器CON可以确定第一存储器SRAM1的第一行地址R1。
在第一行地址R1处的数据项包括H0c1w0、H0c1w1、H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6和H0c1w7,其中,H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6和H0c1w7属于要处理的张量数据的逻辑结构中的期望被存取的数据项(即,前文所述的第一数据项)。
在一个实施例中,可以根据要处理的张量数据的逻辑结构中的期望被存取的数据范围(该范围例如可以通过指令参数给出)确定第一存储器SRAM1的第一行地址。
例如,对于图8的示例,由于张量数据的数据项连续地存储在第一存储器SRAM1中,因此在已知第一存储器SRAM1的存储宽度(在图8的示例中,第一存储器SRAM1的一行可以存储8个数据项)的情况下,控制器CON可以确定每个数据项在第一存储器SRAM1中的位置,由此可以根据要处理的张量数据的逻辑结构中的期望被存取的数据范围可以确定一个或多个行地址。然后,控制器CON可以每次在步骤S10中通过行地址寄存器和/或根据行地址计数器确定第一存储器SRAM1的第一行地址。
在另外的示例中,控制器CON可以记录第一存储器SRAM1中的一个基准地址,然后在步骤S10中根据要处理的张量数据的逻辑结构中的期望被存取的数据范围确定一个行地址,使得在第一存储器SRAM1中,从基准地址开始到在该行地址之前的存储区域中不包括属于期望被存取的数据范围的数据项,然后可以将基准地址更新为所确定的行地址的下一个行地址。
如图8所示,在步骤S20中,控制器CON可以执行指令,以将第一存储器SRAM1的行地址R1处的所有数据项复制到第一缓冲存储器BUF1的第一缓存行L11中,其中,H0c1w0和H0c1w1不是期望被存取的数据项。
在一个实施例中,可以使第一缓冲存储器BUF1的每个缓存行的容量与第一存储器SRAM1中的具有相同行地址的多个存储单元的总容量相同,使得确保在步骤S10中能够简单且高效率地将数据从第一存储器SRAM1中读取到第一缓冲存储器BUF1中。
如图8所示,在步骤S30中,控制器CON可以执行指令,以确定第二存储器SRAM2中的第一个可用的存储区域(即,图4的SRAM2中的第二个存储行中的“XX”之后的区域)作为每个第一数据项H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6和H0c1w7在第二存储器SRAM2中的目标位置。
在另外的示例中,控制器CON也可以执行指令,以根据目标张量中的填充位置(可以通过指令参数来指定,也可以根据局部张量在目标张量中的期望位置来确定),确定每个第一数据项H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6和H0c1w7在第二存储器SRAM2中的目标位置。
如图8所示,在步骤S30中,控制器CON可以执行指令,以将第一缓冲存储器BUF1的第一缓存行L11中的第一数据项H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6和H0c1w7移动到第二缓冲存储器BUF2的至少第一缓存行L21中,其中,第一数据项H0c1w2、H0c1w3、H0c1w4和H0c1w5占据第二缓冲存储器BUF2的第一缓存行L21,H0c1w6和H0c1w7占据第二缓冲存储器BUF2的第二缓存行L22。如图8所示,各个第一数据项在第二缓冲存储器BUF2中的相应位置可以取决于在第二存储器SRAM2中分配给H0c1w2、H0c1w3、H0c1w4、H0c1w5、H0c1w6和H0c1w7的目标位置。
在本文中,“将第一缓冲存储器BUF1的第一缓存行L11中的数据项移动到第二缓冲存储器BUF2中”可以意味着将第一缓冲存储器BUF1的第一缓存行L11中的数据项复制到第二缓冲存储器BUF2中,也可以意味着在将第一缓冲存储器BUF1的第一缓存行L11中的数据项复制到第二缓冲存储器BUF2中之后清除第一缓冲存储器BUF1的第一缓存行L11中的所有内容。
如图8所示,在步骤S40中,控制器CON可以执行指令,以将第二缓冲存储器BUF2的第一缓存行L21中的数据项H0c1w2、H0c1w3、H0c1w4和H0c1w5存储或填充到第二存储器SRAM2中的对应的目标位置处。
在上述的步骤S10至S40中,第一缓冲存储器BUF1用于缓存第一存储器SRAM1中的一整行的数据项,由此确保能够硬件在数据存取方面的数据对齐的要求,从而确保能够高效率地存取数据;第二缓冲存储器BUF2用于按照期望的排布方式缓存期望被存取的数据项,从而允许直接通过硬件处理数据格式变换;然后,第二缓冲存储器BUF2中的数据项能够按照数据对齐的方式直接输出到第二存储器SRAM2。由此,能够通过硬件直接按照期望的排布方式从张量数据中获取期望被存取的数据项。
图8的示例中,还需要处理第一存储器SRAM1中的另一个行地址(第二行地址)R2。参照图7,可以针对第二行地址R2继续重复步骤S10’至S40’。
如图9所示,可以在步骤S10’中确定第一存储器SRAM1的第二行地址R2。在第二行地址R2处的数据项包括H0c1w8、H0c1w9、H0c1w10、H0c1w11、H0c1w12、H0c1w13、H0c1w14和H0c1w15,其中,H0c1w8、H0c1w9、H0c1w10和H0c1w11属于要处理的张量数据的逻辑结构中的期望被存取的数据。
如图9所示,在步骤S20’中,可以将第一存储器SRAM1中的第二行地址R2处的数据项复制到第一缓冲存储器BUF1的第二缓存行L12中。例如,控制器CON可以执行指令,以将第一存储器SRAM1的行地址R2处的所有数项复制到第一缓冲存储器BUF1的第二缓存行L12(在该实施例中,也可以复制到第一缓冲存储器BUF1的第一缓存行L11,并且第一缓冲存储器BUF1可以只包括一个缓存行)中,其中,H0c1w12、H0c1w13、H0c1w14和H0c1w15不是期望被存取的数据项。
如图9所示,在步骤S30’中,可以将第一缓冲存储器BUF1的第二缓存行L12中的属于期望被存取的数据部分的每个第二数据项移动到第二缓冲存储器BUF2的至少第二缓存行L22中的相应位置处,每个第二数据项在第二缓冲存储器BUF2的至少第二缓存行L22中的相应位置取决于在第二存储器SRAM2中分配给该第二数据项的目标位置。
例如,如图9所示,由于H0c1w8、H0c1w9、H0c1w10和H0c1w11与当前缓存在第二缓冲存储器BUF2的第二缓存行L22中的数据H0c1w6和H0c1w7是连续的数据项,所以控制器CON可以执行指令,以将第一缓冲存储器BUF1的第二缓存行L12中的H0c1w8、H0c1w9、H0c1w10和H0c1w11移动到第二缓冲存储器BUF2的第二缓存行L22中,并位于H0c1w6和H0c1w7之后。
在图9的示例中,第一缓冲存储器BUF1的第二缓存行L12中的属于期望被存取的数据部分的每个第二数据项只占用了第二缓冲存储器BUF2的第二缓存行L22。
如图9所示,在步骤S40中,控制器CON可以执行指令,以将第二缓冲存储器BUF2的第二缓存行L22中的数据项存储或填充到第二存储器SRAM2中的对应的目标位置处。
进一步地,对于另外的行地址R3、R4、R5和R6等,如图10所示,可以按照图7所示的控制流程可以继续重复步骤S10至S40和/或S10’至S40’,使得期望存取的数据项不断地按照第一存储器SRAM1→第一缓冲存储器BUF1→第二缓冲存储器BUF2→第二存储器SRAM2的流向从第一存储器SRAM1中流动到第二存储器SRAM2中,并且按照期望的布置方式存储在第二存储器SRAM2中。
在根据本公开的实施例的方法中,每个周期内处理第一存储器SRAM1中的一行数据,由此能够在满足硬件的数据对齐要求的情况下,简单高效地获取第一存储器SRAM1中的期望被存取的数据项;然后,可以将期望被存取的数据项按照期望的布置方式存储到第二存储器SRAM2中,使得在后续处理中,例如诸如用于执行卷积运算的卷积运算内核能够高效率且准确地获取期望的数据项,并且至少在处理已经加载到第一存储器SRAM1中的数据项的过程中,能够确保不涉及外部存储器DDR与内部的高速存储系统(包括第一存储器SRAM1和第二存储器SRAM2)之间的数据交换/传输,从而有利于提高人工智能芯片的性能并降低人工智能芯片的功耗。
另外,在需要合并或拼接多个部分张量数据的情况下,可以根据要合成的目标张量的结构确定各个数据项在第二存储器SRAM2中的目标位置,然后可以通过根据本公开的实施例的方法,直接实现特征数据的合并或拼接,从而至少可以省去或简化控制器CON用于合成或拼接张量数据的逻辑处理,有利于减轻控制器CON的工作负担,使得控制器CON能够更多地用于其他逻辑控制和处理中,进而有利于提高人工智能芯片的性能。
另外,在上述示例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括按行循环寻址的两个缓存行。按行循环寻址允许第一缓冲存储器BUF1和/或第二缓冲存储器BUF2能够实现无地址边界的存储空间。在另外的示例中,在成本允许的情况下,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个也可以包括更多的按行循环寻址的缓存行,从而实现更灵活的存取控制。
在另外的示例中,如果控制器CON按照图7至图10的示例过程执行指令,则第一缓冲存储器BUF1也可以只包括一个缓存行,从而可以节约成本。
在另外的实施例中,根据本公开的实施例的示例方法也可以按照流水线的方式实施,从而能够获得更高的处理效率。例如,可以按照图11所示的流水线方式控制执行根据本公开的实施例的方法中的各个步骤(为了简单,图11中未示出步骤S50和S50’的情况),例如,针对行地址R2的步骤S30’可以与针对行地址R1的步骤S40相并行地执行,进一步地,针对行地址R3的步骤S30可以与针对行地址R2的步骤S40’相并行地执行,以此类推。
可以对第一存储器SRAM1中的各个要处理的行地址进行编号,例如,从1开始按照自然数的次序编号。
在根据本公开的实施例的方法中,可以针对奇数编号的行地址(例如,前述的第一行地址和第三行地址)执行步骤S10至S40(如果最后要处理的行地址编号为奇数,则在方法的最后还可能包括步骤S50),并且可以针对偶数编号的行地址(例如,前述的第二行地址和第四行地址)执行步骤S10’至S40’(如果最后要处理的行地址编号为偶数,则在方法的最后还可能包括步骤S50’)。
相应地,在流水线式的控制流程中,针对偶数编号的行地址R2i的步骤S30’可以与针对奇数编号的行地址R2i-1的步骤S40相并行地执行,并且进一步地,根据需要,针对奇数编号的行地址R2i+1的步骤S30可以与针对偶数编号的行地址R2i的步骤S40’相并行地执行,其中,i为任意自然数。
应当理解,上述的编号方式仅为示例,例如,也可以从0开始编号。
相应地,根据本公开的实施例的方法的一个示例可以描述为:针对偶数编号的行地址(例如,前述的第一行地址和第三行地址)执行步骤S10至S40(如果最后要处理的行地址编号为偶数,则在方法的最后还可能包括步骤S50),并且可以针对奇数编号的行地址(例如,前述的第二行地址和第四行地址)执行步骤S10’至S40’(如果最后要处理的行地址编号为奇数,则在方法的最后还可能包括步骤S50’)。
相应地,在流水线式的控制流程中,针对行地址R2i-1的步骤S30’可以与针对奇数编号的行地址R2i-2的步骤S40相并行地执行,并且进一步地,根据需要,针对奇数编号的行地址R2i的步骤S30可以与针对偶数编号的行地址R2i-1的步骤S40’相并行地执行,其中,i为任意自然数。
例如,仍然针对图8的示例中的第一存储器SRAM1中的数据,图12示出图11的流水线式控制流程的一个示例,其中,控制器CON可以按照时刻段t0、t1、t2、……的次序,以流水线的方式执行指令,从而实施根据本公开的实施例的示例方法。如图11和图13所示,在时间段t0,可以执行步骤S10和步骤S20,以将第一存储器SRAM1中的行地址R1处的所有数据项读取或复制到第一缓冲存储器BUF1的第一缓冲行L11中。
然后,如图11和图14所示,在紧接在时间段t0之后的时间段t1,可以执行步骤S30,以将第一缓冲存储器BUF1的第一缓冲行L11中的属于期望被存取的数据的每个第一数据项(H0c1w2至H0c1w7)移动到第二缓冲存储器BUF2的至少第一缓存行L21中的相应位置处;并行地,可以执行步骤S10’和步骤S20’,以将第一存储器SRAM1中的行地址R2处的所有数据项读取或复制到第一缓冲存储器BUF1的第二缓冲行L12中。
在该实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括按行循环寻址的至少两个缓存行。例如,从节约成本的角度出发,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以只包括按行循环寻址的两个缓存行。另外,在一个实施例中,第一缓冲存储器BUF1和/或第二缓冲存储器BUF2可以采用支持在一个读写周期内写出旧数据并写入新数据的缓冲存储器。
如图14所示,在时间段t1,在第二缓冲存储器BUF2的第二缓存行L22包括至少一个第一数据项(H0c1w6和H0c1w7)的情况下,第二缓冲存储器BUF2的第一缓存行L21中的每个第一数据项(H0c1w2至H0c1w5)在第一存储器SRAM1中的存储位置先于第二缓冲存储器BUF2的第二缓存行L22中的每个第一数据项(H0c1w6和H0c1w7)在第一存储器SRAM1中的存储位置。
如图11和图15所示,在紧接在时间段t1之后的时间段t2,可以执行步骤S40,以将第二缓冲存储器BUF2的第一缓冲行L21中的数据项(H0c1w2至H0c1w5)存储到第二存储器SRAM2中的对应的目标位置处;并行地,可以执行步骤S30’,以将第一缓冲存储器BUF1的第二缓存行L12中的属于期望被存取的数据的第二数据项(H0c1w8至H0c1w11)移动到第二缓冲存储器BUF2的第二缓冲行L22中,每个第二数据项(H0c1w8至H0c1w11)在第二缓冲存储器BUF2的至少第二缓存行L22中的相应位置取决于在第二存储器SRAM2中分配给该第二数据项的目标位置;并行地,还可以执行步骤S10和S20,以将第一存储器SRAM1中的行地址R3处的所有数据项读取或复制到第一缓冲存储器BUF1的第一缓冲行L11中。
在该示例中,在时间段t2移动到第二缓冲存储器BUF2的第二数据项(H0c1w8至H0c1w11)只占用了第二缓冲存储器BUF2的第二缓存行L22。
如图11和图16所示,在紧接在时间段t2之后的时间段t3,可以执行步骤S40’,以将第二缓冲存储器BUF2的第二缓冲行L22中的数据项(H0c1w6至H0c1w11)存储到第二存储器SRAM2中的对应的目标位置处;并行地,可以执行步骤S30,以将第一缓冲存储器BUF1的第一缓存行L11中的属于期望被存取的数据的数据项(H1c1w2至H1c1w7)移动到第二缓冲存储器BUF2的至少第一缓冲行L21中,其中,新数据项H1c1w6和H1c1w7需要占用第二缓冲存储器BUF2的第二缓冲行L22,对于该情况,可以通过时序控制确保第二缓冲存储器BUF2的新数据的写入是在第二缓冲存储器BUF2的旧数据的写出之后进行,也可以采用支持在一个读写周期内写出旧数据并写入新数据的缓冲存储器作为第二缓冲存储器BUF2;并行地,如图16所示,还可以执行步骤S10’和S20’(在图11中未示出),以将第一存储器SRAM1中的行地址R4处的所有数据项读取或复制到第一缓冲存储器BUF1的第二缓冲行L12中。
假设执行步骤S10和步骤S20或者步骤S10’和步骤S20’需要时间T1,执行步骤S30或S30’需要时间T2,并且执行步骤S30或S30’需要时间T3,在要处理第一存储器SRAM1的M个行地址的情况下,如果按照图7所示的方式实施根据本公开的实施例的方法,则至少需要花费(M×T1+M×T2+M×T3)的时间,而如果如图12所示那样以流水线的方式实施根据本公开的实施例的方法,则所花费的时间可以是(T1+T2+T3+max(T1,T2,T3)*(M-1)),其中,max()表示取最大值。通常,T1=T2=T3=1个周期,因此在按照图7所示的方式实施根据本公开的实施例的方法的情况下,可以需要至少3M个周期,而在按照图11所示的方式实施根据本公开的实施例的方法的情况下,则(M+2)个周期。可见,流水线式的实施方式能够显著地缩短控制器CON的执行时间,从而显著地提高系统的整体性能并降低功耗。
应当理解,图11和图12所示的流水线只是示例。根据本公开的实施例的方法可以采用另外的流水线方式来执行,而不局限于图11和图12的示例。
在根据本公开的实施例的方法中,通过适当的硬件结构(第一缓冲存储器BUF1、第二缓冲存储器BUF2)和改进的数据流控制(第一存储器SRAM1→第一缓冲存储器BUF1→第二缓冲存储器BUF2→第二存储器SRAM2和/或第二存储器SRAM2→第一缓冲存储器BUF1→第二缓冲存储器BUF2→第一存储器SRAM1),能够直接从加载到片上存储器中的张量数据中按照期望的数据项布置方式获取期望被存取的数据部分,由此能够降低主处理器或控制器的工作负担,减少片外存储器与片上存储器之间的数据交换/传输次数以及允许通过流水线式的方式提高处理效率,从而提高人工智能芯片的性能并降低人工智能芯片的功耗。
另外,在根据本公开的实施例的方法中,每个周期内处理第一存储器SRAM1中的一行数据,通过适当的硬件结构和改进的数据流控制,能够支持流水线处理,由此能够提高人工智能芯片内部的数据存取效率,进而提高人工智能芯片的性能并降低人工智能芯片的功耗。
在另外的实施例中,在上述的步骤之前,根据本公开的实施例的方法还可以包括:接收指示存取张量数据的指令;以及通过解析指令确定张量数据的逻辑结构中期望被存取的数据项、前述第一行地址以及前述逻辑结构中期望被存取的各个数据项在第二存储器SRAM2中的目标位置中的一个或多个。
例如,控制器CON可以经由指令接口(可以是允许接收由用户经由I/O设备输入的指令的端口,也可以是用于耦接到指令总线的端口,等等)接收指示存取张量数据的指令和相关的参数。
例如,所接收的指令的操作码可以指示从完整的张量数据中获取部分数据。相应地,指令的地址码(或者指令的参数)可以指示如下信息中的一项或多项:完整张量数据在外部存储器DDR中的存储位置,完整张量数据的逻辑结构,期望被存取的数据在完整张量数据的逻辑结构中的位置,等等。
例如,所接收的指令的操作码也可以指示将第一存储器SRAM1中的数据项(可以是系统中的诸如卷积运算核等其他部件的输出数据)设置为另一个完整张量数据的一部分。相应地,指令的地址码(或者指令的参数)可以指示如下信息中的一项或多项:数据项在第一存储器SRAM1中的存储位置,另一张量数据的逻辑结构,期望被存取的数据在另一完整张量数据的逻辑结构中的位置,等等。
然后,控制器CON可以解析所接收的指令(也可以由控制器CON指示专门的指令解析器来执行),以便根据指令的操作码来确定进一步处理的操作类型以及相关参数。
相应地,控制器CON可以确定例如外部存储器DDR或第一存储器SRAM1中的哪些数据项属于期望被存取的数据、期望被存取的数据所在的各个行地址(包括前述的第一行地址、第二行地址等)、期望被存取的数据中的各个数据项在第二存储器SRAM2中的目标位置等一个或多个信息。
例如,如前文所述,在控制器CON执行指令或者向存取控制器发出指令以确定第二存储器SRAM2中的第一个可用的存储区域作为数据项在第二存储器SRAM2中的目标位置的情况下,控制器CON所确定的信息可以不必包括期望被存取的数据中的各个数据项在第二存储器SRAM2中的目标位置等一个或多个信息。
另外,在所接收的指令的操作码指示从完整的张量数据中获取部分数据的情况下,根据本公开的实施例的方法还可以包括将完整张量数据的至少一部分从外部存储器DDR中读取或加载到第一存储器SRAM1中。
以按照循环方式(例如图5至图7所示的方式)或流水线方式(例如图11所示的方式)执行根据本公开的实施例的方法中的步骤,在此不再赘述。
另外,在所接收的指令的操作码指示将第一存储器SRAM1中的数据项设置为另一个完整张量数据的一部分的情况下,根据本公开的实施例的方法还可以包括将第二存储器SRAM2中的数据输出到外部存储器DDR中。
在一个实施例中,所接收的指令可以被设计成系统能够支持的硬件指令。控制器CON在接收到该硬件指令后,可以按照循环方式(例如图5至图7所示的方式)或流水线方式(例如图11所示的方式)执行根据本公开的实施例的方法中的步骤,从而高效率地实现张量数据的存取操作。
示例性装置
图17例示根据本公开的实施例的存取张量数据的装置的一个示例。该示例装置可以包括前文所述的第一缓冲存储器BUF1、第二缓冲存储器BUF2和控制器CON,其中,控制器CON可以耦接到第一存储器SRAM1、第二存储器SRAM2、第一缓冲存储器BUF1和第二缓冲存储器BUF2。
在一个实施例中,控制器CON可以被配置为在启动时执行预定的指令序列,以便至少实施根据本公开的实施例的方法。例如,控制器CON可以被配置为根据指令,按照图3至图7以及图11所示的任何一种控制流程,执行根据本公开的实施例的方法。
根据不同的实施例,例如,在人工智能芯片的情况下,控制器CON可以是例如基于图形处理器(GPU)、ARM处理器、现场可编程门阵列(FPGA)等构建的处理器或控制器,也可以是芯片上专门用于控制存取片外存储器和/或片内存储器的存取控制器或数据传输控制器等,例如基于FPGA开发的精简指令集计算(RISC)软处理器内核等。另外,根据本公开的实施例的控制器CON单独地控制对片外存储器和/或片内存储器中的数据的存取操作,也可以例如协助主处理器或响应来自主处理器的指令,控制对片外存储器和/或片内存储器中的数据的存取操作。
第一缓冲存储器BUF1和第二缓冲存储器BUF2两者中的每一个可以是高速缓冲存储器或静态随机存取存储器,其数据存取速率可以与包括第一存储器SRAM1和第二存储器SRAM2的高速存储系统的数据存取速率相匹配。
根据不同的实施例,第一缓冲存储器BUF1可以包括一个或多个缓存行,并且第二缓冲存储器BUF2可以包括两个或多个缓存行。
在一个实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括至少两个缓存行,从而能够确保数据存取过程中的处理效率。
在一个实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括两个缓存行,从而能够通过低成本的硬件结构确保数据存取过程中的处理效率。在该实施例中,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的至少第二缓冲存储器BUF2可以支持在一个读写周期内写出旧数据并写入新数据,以便能够处理例如图16中所示的读写冲突。
在另外的实施例中,在成本允许的情况下,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以包括多于两个(例如,三个或四个)的缓存行,从而能够避免例如图16中所示的读写冲突。
另外,第一缓冲存储器BUF1和第二缓冲存储器BUF2中的每一个可以是按照缓存行循环寻址的缓冲存储器,从而能够支持无边界的存储空间,并且能够简化存储控制。
在一个实施例中,第一缓冲存储器BUF1的每个缓存行的容量可以与第一存储器SRAM1中的具有相同行地址的多个存储单元的总容量(即,第一存储器SRAM1的存储宽度)相同,并且第二缓冲存储器BUF2的每个缓存行的容量可以与第二存储器SRAM2中的具有相同行地址的多个存储单元的总容量(即,第二存储器SRAM2的存储宽度)相同,由此能够极大地简化设计并降低控制逻辑的复杂度。
根据不同的实施例,第一存储器SRAM1和第二存储器SRAM2可以配置于图17中的示例装置的外部或内部,换句话说,根据本公开的实施例的装置可以包括第一存储器SRAM1和第二存储器SRAM2,也可以不包括第一存储器SRAM1和第二存储器SRAM2。
在不同的实施例中,第一存储器SRAM1和第二存储器SRAM2中的每一个可以是能够支持二维数据的存取和/或数据的二维存取的静态随机存取存储部件/模块或高速缓冲存储部件/模块。例如,在人工智能芯片的情况下,第一存储器SRAM1和第二存储器SRAM2中的每一个可以是能够用于形成片上存储器的至少一部分的任何适当类型或形式的存储器。
另外,根据不同的实施例,第一存储器SRAM1和第二存储器SRAM2可以分开设置(例如,如图1或图17所示),也可以是能够支持二维数据存取的同一个存储部件/模块(该存储部件/模块例如可以包括多个一维静态随机存取存储器或一个或多个二维存储器以便支持二维数据的存取和/或数据的二维存取)中的两个不同的部分(例如,如图2所示)。
在一个实施例中,例如在人工智能芯片的情况下,第一缓冲存储器BUF1、第二缓冲存储器BUF2、控制器CON、第一存储器SRAM1和第二存储器SRAM2可以实施在同一芯片上,从而形成系统级芯片(System on Chip,SoC)上的存储系统的至少一部分。
在根据本公开的实施例的装置中,每个周期内处理第一存储器SRAM1中的一行数据,由此能够在满足硬件的数据对齐的要求的情况下,简单高效地获取第一存储器SRAM1中的期望被存取的数据项;然后,可以将期望被存取的数据项按照期望的布置方式存储到第二存储器SRAM2中,使得在后续处理中,例如诸如用于执行卷积运算的卷积运算内核能够高效率且准确地获取期望的数据项,并且至少在处理已经加载到第一存储器SRAM1中的数据项的过程中,能够确保不涉及外部存储器DDR与内部的高速存储系统(包括第一存储器SRAM1和第二存储器SRAM2)之间的数据交换/传输,从而有利于提高人工智能芯片的性能并降低人工智能芯片的功耗。
另外,在需要合并或拼接多个部分张量数据的情况下,可以根据要合成的目标张量的结构确定各个数据项在第二存储器SRAM2中的目标位置,然后直接实现特征数据的合并或拼接,从而至少可以省去或简化控制器CON用于合成或拼接张量数据的逻辑处理,有利于减轻控制器CON的工作负担,使得控制器CON能够更多地用于其他逻辑控制和处理中,进而有利于提高人工智能芯片的性能。
应当理解,根据本公开的实施例的用于存取张量数据的装置不局限于图17中的示例。例如,根据本公开的实施例的装置还可以包括交叉开关和/或多路选择器等用于实现片上部件之间的互连,从而允许片上的各个部件之间能够更高效地进行交互,并且能够更加节省芯片空间。例如,根据本公开的实施例的装置还可以包括用于指令时序控制的定时控制器、用于指令中断控制的中断控制器等其他部件/模块/电路/单元/元件,并且可以使这样的其他部件/模块/电路/单元/元件与前述的第一缓冲存储器BUF1等一起实施在同一芯片上。例如,根据本公开的实施例的装置还可以包括指令接口和/或指令解析电路/模块,用于接收和解析与数据存取相关的指令。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,该计算机程序指令在被处理器运行时使得处理器或控制器(例如,人工智能芯片中的处理器或控制器或专用于片上存储系统的存取控制器)执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的方法中的步骤。
计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,程序设计语言可以包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令在被处理器或控制器(例如,人工智能芯片中的主处理器或控制器或专用于片上存储系统的存取控制器)运行时使得处理器或控制器(例如,人工智能芯片中的主处理器或控制器或专用于片上存储系统的存取控制器)执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的声源定位方法中的步骤。
计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪速存储器)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
在本文中,诸如“第一”、“第二”等不带有量词的修饰词旨在用于区分不同的元件/部件/电路/模块/装置/步骤,而不用于强调次序、位置关系、重要程度、优先级别等。因此,例如,“第一存储器SRAM1”也可以被称为“第二存储器SRAM1”,同时可以将“第二存储器SRAM2”称为“第一存储器SRAM2”;例如,“第三行地址”也可以被称为“第一行地址”,并且“第四行地址”也可以被称为“第二行地址”;诸如此类。也就是说,诸如“第一”和“第二”等不带有量词的修饰词是可以互换的。
与此不同,诸如“第一个”、“第二个”等带有量词的修饰词可以用于强调不同的元件/部件/电路/模块/装置/步骤的次序、位置关系、重要程度、优先级别等。例如,“第一个可用位置”可以意味着在该位置之前的所有位置均是不可用的,并且因此,相对于其他可用位置而言,该可用位置可以是最先被找到的可用位置或者是在存储空间中或按照搜索次序最靠前的可用位置,而“第二个可用位置”可以意味着在该可用位置之前已经存在一个可用位置。也就是说,诸如“第一个”、“第二个”等带有量词的修饰词是不可互换的。
另外,在本文中出现的“一个或多个”可以指一个或两个或三个或更多个,而“两个或多个”可以指两个或三个或更多个;在单独地提及“多个”时,可以指“两个或多个”或“两个以上”。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

Claims (10)

1.一种存取张量数据的方法,包括:
确定第一存储器的第一行地址,期望从所述张量数据的逻辑结构中存取的至少一个第一数据项存储在所述第一存储器的第一行地址处;
将所述第一存储器中的第一行地址处的数据项复制到第一缓冲存储器的第一缓存行中;
将所述第一缓冲存储器的第一缓存行中的每个第一数据项移动到第二缓冲存储器的至少第一缓存行中的相应位置处,每个第一数据项在所述第二缓冲存储器的至少第一缓存行中的相应位置取决于在第二存储器中分配给该第一数据项的目标位置;以及
将所述第二缓冲存储器的第一缓存行中的数据项存储到所述第二存储器中的对应的目标位置处。
2.根据权利要求1所述的方法,还包括:
在所述第二缓冲存储器的第二缓存行包括至少一个第一数据项的情况下,将所述第二缓冲存储器的第二缓存行中的每个第一数据项存储到所述第二存储器中的对应的目标位置处,其中,在所述第一存储器中,所述第二缓冲存储器的第二缓存行中的每个第一数据项位于所述第二缓冲存储器的第一缓存行中的每个第一数据项之后。
3.根据权利要求1所述的方法,还包括:
确定所述第一存储器的第二行地址,期望从所述逻辑结构中存取的至少一个第二数据项存储在所述第一存储器的第二行地址处;
将所述第一存储器中的第二行地址处的数据项复制到所述第一缓冲存储器的第二缓存行中;
将所述第一缓冲存储器的第二缓存行中的每个第二数据项移动到所述第二缓冲存储器的至少第二缓存行中的相应位置处,每个第二数据项在所述第二缓冲存储器的至少第二缓存行中的相应位置取决于在所述第二存储器中分配给该第二数据项的目标位置;以及
将所述第二缓冲存储器的第二缓存行中的数据项存储到所述第二存储器中的对应的目标位置处。
4.根据权利要求3所述的方法,还包括:
在所述第二缓冲存储器的第一缓存行包括至少一个第二数据项的情况下,将所述第二缓冲存储器的第一缓存行中的每个第二数据项存储到所述第二存储器中的对应的目标位置处,其中,在所述第一存储器中,所述第二缓冲存储器的第一缓存行中的每个第二数据项位于所述第二缓冲存储器的第二缓存行中的每个第二数据项之后。
5.根据权利要求3所述的方法,其中,将所述第一缓冲存储器的第二缓存行中的每个第二数据项移动到所述第二缓冲存储器的至少第二缓存行中的相应位置处包括:
与将所述第二缓冲存储器的第一缓存行中的数据项存储到所述第二存储器中的对应的目标位置处相并行地,或者在将所述第二缓冲存储器的第一缓存行中的数据项存储到所述第二存储器中的对应的目标位置处之后,将所述第一缓冲存储器的第二缓存行中的每个第二数据项移动到所述第二缓冲存储器的至少第二缓存行中的相应位置处。
6.根据权利要求1至5中的任一项所述的方法,还包括:
接收指示存取张量数据的指令;以及
通过解析所述指令确定所述逻辑结构中期望被存取的数据项、所述第一行地址以及所述逻辑结构中期望被存取的各个数据项在所述第二存储器中的目标位置中的一个或多个。
7.一种计算机可读取的非临时性存储介质,在其上存储有程序指令,所述程序指令在被处理器或控制器执行时执行根据权利要求1至6中的方法。
8.一种存取张量数据的装置,包括:
第一缓冲存储器;
第二缓冲存储器;以及
控制器,耦接到第一存储器、第二存储器、所述第一缓冲存储器和所述第二缓冲存储器,并且被配置为在被启动时根据指令至少执行根据权利要求1至6中的方法。
9.根据权利要求8所述的装置,其中,所述第一缓冲存储器的每个缓存行的容量与所述第一存储器中的具有相同行地址的多个存储单元的总容量相同,并且所述第二缓冲存储器的每个缓存行的容量与所述第二存储器中的具有相同行地址的多个存储单元的总容量相同。
10.根据权利要求8所述的装置,其中,所述第一缓冲存储器和所述第二缓冲存储器中的每一个是按照缓存行循环寻址的缓冲存储器。
CN201811541065.1A 2018-12-17 2018-12-17 存取张量数据的方法和装置 Active CN111324294B (zh)

Priority Applications (6)

Application Number Priority Date Filing Date Title
CN201811541065.1A CN111324294B (zh) 2018-12-17 2018-12-17 存取张量数据的方法和装置
JP2019226595A JP7008983B2 (ja) 2018-12-17 2019-12-16 テンソルデータにアクセスするための方法および装置
US16/715,127 US11163686B2 (en) 2018-12-17 2019-12-16 Method and apparatus for accessing tensor data
EP19216498.6A EP3671424A1 (en) 2018-12-17 2019-12-16 Method and apparatus for accessing tensor data
TW108146284A TWI743627B (zh) 2018-12-17 2019-12-17 存取張量資料的方法和裝置
KR1020190168867A KR102397100B1 (ko) 2018-12-17 2019-12-17 텐서 데이터를 액세스하는 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811541065.1A CN111324294B (zh) 2018-12-17 2018-12-17 存取张量数据的方法和装置

Publications (2)

Publication Number Publication Date
CN111324294A true CN111324294A (zh) 2020-06-23
CN111324294B CN111324294B (zh) 2023-11-07

Family

ID=68917584

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811541065.1A Active CN111324294B (zh) 2018-12-17 2018-12-17 存取张量数据的方法和装置

Country Status (6)

Country Link
US (1) US11163686B2 (zh)
EP (1) EP3671424A1 (zh)
JP (1) JP7008983B2 (zh)
KR (1) KR102397100B1 (zh)
CN (1) CN111324294B (zh)
TW (1) TWI743627B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112988238A (zh) * 2021-05-06 2021-06-18 成都启英泰伦科技有限公司 一种基于可扩展指令集cpu内核的扩展运算装置及方法
CN116127259A (zh) * 2021-01-13 2023-05-16 华为技术有限公司 张量处理方法、装置、设备及计算机可读存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111767508B (zh) * 2020-07-09 2024-02-23 地平线(上海)人工智能技术有限公司 计算机实现张量数据计算的方法、装置、介质和设备
CN113485762A (zh) * 2020-09-19 2021-10-08 广东高云半导体科技股份有限公司 用可配置器件卸载计算任务以提高系统性能的方法和装置
US20220188631A1 (en) * 2020-12-16 2022-06-16 Xmos Inc. Artificial neural network implementation

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1280063A2 (en) * 2001-07-27 2003-01-29 Fujitsu Limited Cache control methods and apparatus for hard disk drives
CN1462388A (zh) * 2001-02-20 2003-12-17 皇家菲利浦电子有限公司 循环顺序存储器预取
US8761206B1 (en) * 2011-03-24 2014-06-24 Marvell International Ltd. Universal packer
US20150067305A1 (en) * 2013-08-30 2015-03-05 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
CN106575262A (zh) * 2014-08-19 2017-04-19 高通股份有限公司 用于带宽压缩的补充写入缓存命令
JP2018005655A (ja) * 2016-07-05 2018-01-11 富士通株式会社 メモリコントローラおよびメモリアクセス方法
CN107783916A (zh) * 2016-08-26 2018-03-09 大心电子股份有限公司 数据传输方法、存储控制器与清单管理电路

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7167962B2 (en) * 1999-08-19 2007-01-23 Hitachi, Ltd. Remote copy for a storage controller with reduced data size
JP4901316B2 (ja) * 2006-06-06 2012-03-21 株式会社日立製作所 ストレージシステム及び記憶制御装置
US8255562B2 (en) * 2008-06-30 2012-08-28 International Business Machines Corporation Adaptive data throttling for storage controllers
US20100281192A1 (en) * 2009-04-30 2010-11-04 Novafora, Inc. Apparatus and method for transferring data within a data processing system
US20140181171A1 (en) * 2012-12-24 2014-06-26 Pavel Dourbal Method and system for fast tensor-vector multiplication
US9690650B2 (en) * 2013-03-11 2017-06-27 Macronix International Co., Ltd. Storage scheme for built-in ECC operations
US9875104B2 (en) * 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10061832B2 (en) * 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10817802B2 (en) * 2016-05-07 2020-10-27 Intel Corporation Apparatus for hardware accelerated machine learning
US10198378B2 (en) * 2016-11-18 2019-02-05 Microsoft Technology Licensing, Llc Faster data transfer with simultaneous alternative remote direct memory access communications
US10175912B1 (en) * 2017-07-05 2019-01-08 Google Llc Hardware double buffering using a special purpose computational unit
US10042785B1 (en) * 2017-08-29 2018-08-07 Seagate Technology Llc Storage drive with multiple controllers having interconnected buffer managers
US20190130291A1 (en) * 2017-10-27 2019-05-02 Wave Computing, Inc. Dynamic reconfiguration with partially resident agents
US10346093B1 (en) * 2018-03-16 2019-07-09 Xilinx, Inc. Memory arrangement for tensor data
US11132124B2 (en) * 2018-06-12 2021-09-28 Intel Corporation Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle
US10956315B2 (en) * 2018-07-24 2021-03-23 Micron Technology, Inc. Memory devices and methods which may facilitate tensor memory access

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1462388A (zh) * 2001-02-20 2003-12-17 皇家菲利浦电子有限公司 循环顺序存储器预取
EP1280063A2 (en) * 2001-07-27 2003-01-29 Fujitsu Limited Cache control methods and apparatus for hard disk drives
US8761206B1 (en) * 2011-03-24 2014-06-24 Marvell International Ltd. Universal packer
US20150067305A1 (en) * 2013-08-30 2015-03-05 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
CN106575262A (zh) * 2014-08-19 2017-04-19 高通股份有限公司 用于带宽压缩的补充写入缓存命令
JP2018005655A (ja) * 2016-07-05 2018-01-11 富士通株式会社 メモリコントローラおよびメモリアクセス方法
CN107783916A (zh) * 2016-08-26 2018-03-09 大心电子股份有限公司 数据传输方法、存储控制器与清单管理电路

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
JUSTIN MEZA等: "A case for small row buffers in non-volatile main memories", 2012 IEEE 30TH INTERNATIONAL CONFERENCE ON COMPUTER DESIGN (ICCD) *
刘华珠, 陈雪芳, 黄海云: "基于FPGA技术的DRAM分时存取方法", 现代电子技术, no. 10 *
席红旗;: "计算机高速缓冲存储器(Cache)命中率的分析", 河南教育学院学报(自然科学版), no. 03 *
王得利;高德远;王党辉;孙华锦;: "存储器行缓冲区命中预测研究", 计算机科学, no. 06 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116127259A (zh) * 2021-01-13 2023-05-16 华为技术有限公司 张量处理方法、装置、设备及计算机可读存储介质
CN112988238A (zh) * 2021-05-06 2021-06-18 成都启英泰伦科技有限公司 一种基于可扩展指令集cpu内核的扩展运算装置及方法

Also Published As

Publication number Publication date
TW202024922A (zh) 2020-07-01
KR20200075769A (ko) 2020-06-26
US20200192803A1 (en) 2020-06-18
CN111324294B (zh) 2023-11-07
TWI743627B (zh) 2021-10-21
JP7008983B2 (ja) 2022-01-25
JP2020098602A (ja) 2020-06-25
EP3671424A1 (en) 2020-06-24
KR102397100B1 (ko) 2022-05-11
US11163686B2 (en) 2021-11-02

Similar Documents

Publication Publication Date Title
CN111324294B (zh) 存取张量数据的方法和装置
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
US11574171B2 (en) Neural network architecture using convolution engines
US11386644B2 (en) Image preprocessing for generalized image processing
JP7358382B2 (ja) 演算を加速するための加速器及びシステム
US20150324685A1 (en) Adaptive configuration of a neural network device
US20210406437A1 (en) Programmable chip, design method and device
CN112005214B (zh) 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器
CN111656339B (zh) 存储器装置及其控制方法
US11734788B2 (en) Task execution in a SIMD processing unit with parallel groups of processing lanes
US11579921B2 (en) Method and system for performing parallel computations to generate multiple output feature maps
CN110991619A (zh) 神经网络处理器、芯片和电子设备
CN111047036A (zh) 神经网络处理器、芯片和电子设备
Shahbahrami et al. FPGA implementation of parallel histogram computation
US11755892B2 (en) Multi-size convolutional layer
WO2020093968A1 (zh) 卷积处理引擎及控制方法和相应的卷积神经网络加速器
CN111047035A (zh) 神经网络处理器、芯片和电子设备
US20210357730A1 (en) Multi-size convolutional layer background
CN112631955A (zh) 数据处理方法、装置、电子设备以及介质
CN112906877A (zh) 用于执行神经网络模型的存储器架构中的数据布局有意识处理
US20230259486A1 (en) Neural processing unit synchronization systems and methods
US20210209462A1 (en) Method and system for processing a neural network

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