CN113139648B - 执行神经网络模型的pim架构的数据布局优化 - Google Patents

执行神经网络模型的pim架构的数据布局优化 Download PDF

Info

Publication number
CN113139648B
CN113139648B CN202110050930.8A CN202110050930A CN113139648B CN 113139648 B CN113139648 B CN 113139648B CN 202110050930 A CN202110050930 A CN 202110050930A CN 113139648 B CN113139648 B CN 113139648B
Authority
CN
China
Prior art keywords
node
memory block
memory
layer number
data
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
CN202110050930.8A
Other languages
English (en)
Other versions
CN113139648A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Publication of CN113139648A publication Critical patent/CN113139648A/zh
Application granted granted Critical
Publication of CN113139648B publication Critical patent/CN113139648B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • 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
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • 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
    • 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/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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
    • 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
    • G06N3/065Analogue means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Abstract

本公开涉及一种执行神经网络模型的PIM架构的数据布局优化的技术方案。用于在包括存储块组件的PIM使能设备上布置计算图的方法。该方法包括将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上,以及将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用。所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合从所述第一存储块到所述第二存储块的数据传输。

Description

执行神经网络模型的PIM架构的数据布局优化
背景技术
机器学习已广泛应用于自然语言处理、语音识别、图像分类等各个领 域。在机器学习中,神经网络模型一直在不断增加并变得更加复杂。随着神经 网络模型,尤其是深度神经网络(DNN)模型变得庞大而复杂,具有数百层和数百 万个权重,执行神经网络模型不仅变得计算量繁重,而且存储需求密集。由于 传统的冯·诺依曼体系架构具有独立的处理单元和存储单元,在传统的冯·诺 依曼体系架构上处理神经网络模型时,在处理单元和存储单元之间发生大量的 数据传输,这成为处理神经网络模型的瓶颈。
能够在存储单元中执行计算的存内计算(PIM)技术已经出现,以通 过减少处理单元和存储单元之间的数据移动的方式解决此类问题。为了在执行 更大的神经网络模型时实现更高水平的并行性和可扩展性,并提高整体执行性 能,优化PIM架构上的数据布局非常重要。
发明内容
本公开的实施例提供了一种在包含存储块组件的存内计算(processing inmemory,PIM)使能设备上布置计算图的方法。该方法包括将计算图的第一 节点分配到存储块组件中的存储块的第一阵列的第一存储块上,并将计算图的 第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中,所 述第一节点的输出数据用于提供给所述第二节点使用。存储块组件可以被配置 为通过存储块组件中的内部数据耦合,支持数据从第一存储块到第二存储块的 传输。
本公开的实施例提供了一种用于在包括存储块组件的PIM使能设备上 布置计算图的设备。该设备包括存储一组指令集的存储器和一个或多个处理器, 被配置为执行该组指令集以使该设备执行:将计算图的第一节点分配到存储块 组件中的存储块的第一阵列的第一存储块上,并将计算图的第二节点分配到存 储块组件中的存储块的第二阵列的第二存储块上,其中,所述第一节点的输出 数据用于提供给所述第二节点使用。所述存储块组件被配置为支持经由所述存 储块组件中的内部数据耦合,从所述第一存储块到所述第二存储块的数据传输。
本公开的实施例提供了一种非临时性计算机可读介质,该介质存储一 组指令集,该指令集可由计算设备的至少一个处理器执行,以使计算设备执行 在包括存储块组件的PIM使能设备上布置计算图的方法。该方法包括将计算图 的第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上,并将计 算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其 中,所述第一节点的输出数据用于提供给所述第二节点使用。所述存储块组件 被配置为支持经由所述存储块组件中的内部数据耦合,从所述第一存储块到所 述第二存储块的数据传输。
本公开的实施例提供了一种终端,该终端包括具有存储块组件的PIM 使能设备;以及主机单元,其通信耦合到所述PIM使能设备,用于在PIM使能 设备上布置计算图。所述主机单元包括存储一组指令集的存储器和一个或多个 处理器,所述处理器被配置为执行一组指令集以使主机单元执行:将计算图的 第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上,将计算图 的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中, 所述第一节点的输出数据用于提供给所述第二节点使用;其中,所述存储块组 件配置为支持经由所述存储块组件中的内部数据耦合,从所述第一存储块到所 述第二存储块的数据传输。
所公开实施例的附加特征和优点将在以下描述中部分阐述,并且部分 将从描述中显而易见,或者可以通过实施例的实践来获知。所公开的实施例的 特征和优点可以通过权利要求中所阐述的元件和组合来实现和获得。
应当理解,前述一般描述和以下详细描述仅是示例性和解释性的,并 不是对所公开实施例的限制;特此声明。
附图说明
图1示出了与本公开的实施例一致的示例性的PIM块架构;
图2A示出了与本公开的实施例一致的示例性神经网络加速器架构;
图2B示出了与本公开的实施例一致的包含神经网络加速器架构的示 例性云系统的原理图;
图3示出了与本公开的实施例一致的示例性存储器片配置;
图4示出了与本公开的实施例一致的存储器片中的示例性存储块组件;
图5A示出了与本公开实施例一致的用于记录数据传输的示例性数据 传输表;
图5B示出了与本公开的实施例一致的用于记录存储块状态的示例性 块表;
图5C示出了与本公开的实施例一致的存储块的示例性状态转换周期;
图6示出了与本公开的实施例一致的示例性调度器的框图;
图7A示出了与本公开实施例一致的神经网络模型的示例;
图7B示出了与本公开实施例一致的,用于执行在存储块组件中的图 7A的神经网络模型的节点映射的第一示例;
图7C示出了与本公开实施例一致的,用于执行在存储块组件中的图 7A的神经网络模型的节点映射的第二示例;
图7D示出了与本公开实施例一致的,用于执行在存储块组件中的图 7A的神经网络模型的节点映射的第三示例;
图8A示出了向量矩阵乘法运算的一个示例;
图8B示出了与本公开的实施例一致的,在PIM块中执行图8A的向量 矩阵乘法运算的数据布局的第一示例。
图8C示出了与本公开的实施例一致的,在PIM块中执行图8A的向量 矩阵乘法运算的数据布局的第二示例;
图9A示出了卷积运算的一个示例;
图9B示出了与本公开的实施例一致的,在PIM块中执行图9A的卷积 运算的示例性数据布局;
图10示出了与本公开的实施例一致的,用于在PIM组件上调度执行 神经网络模型的示例性流程图。
具体实施方式
现在请详细参考示例性实施例,其示例在附图中示出。以下说明请参 考附图,除非另有说明,否则不同附图中的相同编号表示相同或相似的元件。 在以下示例性实施例的描述中阐述的实现并不代表与本发明一致的所有实现。 相反,它们仅仅是与所附权利要求中所述的与本发明相关的方面一致的装置和 方法的示例。
图1示出了与本公开的实施例一致的PIM块配置的示例。PIM块100 包括存储单元阵列110、块控制器120、块行驱动131和块列驱动132。尽管将 使用ReRAM(电阻随机存取存储器)作为示例来说明一些实施例,应当理解,根 据本公开的实施例的PIM块100可以基于各种存储技术实现,包括DRAM(动态 随机存取存储器),SRASM(静态随机存取存储器),ReRAM,等等。
存储单元阵列110可能包括r1至rm共m行和c1至cn共n列。如图1 所示,横杆存储器111可以连接在r1至rm共m行和c1至cn共n列的各行列之间。 在一些实施例中,数据可以作为多位忆阻器存储在横杆存储器111中。
块行驱动器131和块列驱动器132可以向r1至rm共m行和c1至cn共 n列提供诸如电压信号的信号,以处理相应的操作。在一些实施例中,块行驱动 器131和块列驱动器132可以配置为通过横杆存储器111传递模拟信号。在一 些实施例中,模拟信号可能已经从数字输入数据转换。
块控制器120可以包括用于存储指令集的指令寄存器。在一些实施例 中,指令集可以包括当块行驱动131或块列驱动132向相应的列或行提供信号 时的指令,哪些信号将被提供,等等。块控制器120可以将存储在寄存器中的 指令解码为要由块行驱动器131或块列驱动器132使用的信号。
PIM块100还可以包括行感测放大器141或列感测放大器142,用于 从存储单元读出数据或将数据存入存储单元。在一些实施例中,行感测放大器 141和列感测放大器142可以存储数据以用于缓冲。在一些实施例中,PIM块 100可以进一步包括DAC151(数模转换器)或ADC152(模数转换器),以在模拟域 和数字域之间转换输入信号或输出数据。在本公开的一些实施例中,行感测放 大器141或列感测放大器142可以省略,因为在PIM块100中的计算可以直接 对存储单元中的存储值执行,而无需读出或无需使用任何感测放大器。
根据本公开的实施例,PIM块100通过将存储器用作多个SIMD(单指 令,多数据)处理单元来实现并行计算。PIM块100可以支持计算操作,包括整 数和浮点值的位运算、加法、减法、乘法和除法。例如,在图1的存储单元阵 列110中,第一列c1和第二列c2可以分别存储第一向量A和第二向量B。通过 将格式化的信号施加到第一至第三列c1至c3和支持向量A、B、和C的长度的 相应行,可以将由向量A和B相加产生的向量运算结果C存储在第三列c3中。类似地,图1的存储单元阵列110还可以支持向量乘法和加法运算。例如,计 算C=aA+bB可以通过将对应于乘法器a的电压信号施加到第一列c1,将对应于 乘法器b的电压信号施加到第二列c2,并通过将格式化信号应用于相应的列和 行,以执行加法操作并将结果C保存在第三列c3中。
在一些实施例中,一个向量可以存储在多列中,用于表示元素的n位 值。例如,元素具有2位的值的一个向量可以被存储在存储单元的两列中。在 一些实施例中,当向量的长度超过构成存储块的存储单元阵列110的行数时, 该向量可以存储在多个存储块中。多个存储块可以被配置为并行计算不同的向 量段。尽管本公开为PIM体系架构不使用算术逻辑添加到存储器单元的情况下 执行计算操作的实施例,但是本公开也可以应用于在PIM体系架构中包括执行 算术操作的算术逻辑的PIM体系架构。
PIM架构可用于处理神经网络模型,以解决处理单元和存储单元之间 的数据移动开销。如前所述,加法、乘法等计算操作也可以作为PIM体系结构 架构中的列向向量计算来执行,在存储器中处理此类操作之前,正确对齐数据 非常重要,以减少存储器中不必要的数据移动,并最大限度地利用PIM体系架 构的计算能力。所公开的实施例提供了在PIM体系加速器架构上执行神经网络 模型时能够最大化并行性和资源利用率的数据布局优化和节点分配技术。
图2A示出了与本公开实施例一致的示例性神经网络加速器架构200。 在本公开的背景中,神经网络加速器也可以被称为机器学习加速器或深度学习 加速器。在一些实施例中,加速器架构200可以称为神经网络处理单元(NPU) 架构200。如图2A所示,加速器架构200可以包括PIM加速器210,接口212, 等等。可以理解的是,PIM加速器210可以基于所传送的数据执行算法操作。
PIM加速器210可以包括一个或多个存储器片2024。在一些实施例中, 存储器片2024可以包括用于数据存储和计算的多个存储块。存储块可以被配置 为对所传送的数据执行一个或多个操作(例如,乘法、加法、乘法-累加,等等)。 在一些实施例中,存储器片2024中包含的每个存储块可能具有与图1所示的PIM 块100相同的配置。由于PIM加速器210的分层设计,PIM加速器210可以提 供通用性和可扩展性。PIM加速器210可以包括任何数量的存储器片2024,并 且每个存储器片2024可以具有任何数量的存储块。
接口212(例如PCIe接口)用作(通常是)芯片间总线,提供PIM加速器 210和主机单元220之间的通信。芯片间总线连接PIM加速器210与其他设备, 如芯片外存储器或外围设备。在一些实施例中,加速器架构200还可以包括DMA 单元(未显示),该单元有助于在主机存储器221和PIM加速器210之间传输数 据。此外,DMA单元可以帮助在多个加速器之间传输数据。DMA单元可以允 许片外设备访问片内和片外存储器,而不会导致主机CPU中断。因此,DMA 单元还可以生成存储器地址并启动存储器取或写入周期。DMA单元还可以包含 多个硬件寄存器,这些寄存器可以由一个或多个处理器写入和读取,包括存储 器地址寄存器、字节计数寄存器、一个或多个控制寄存器,以及其他类型的寄 存器。这些寄存器可以指定源地址、目标地址、传输方向(从输入/输出设备读取 或向输入/输出设备写入)、传输单元的大小和/或在一个猝发传输中传输的字节数。 应当理解,加速器架构200可以包括第二DMA单元,该单元可用于与其他加速 器架构之间传输数据,以允许多个加速器架构直接通信,而不涉及主机CPU。
尽管加速器架构200图2A被解释为包括具有存储块的PIM加速器210 (例如,图1的PIM存储块100),应当理解,所公开的实施例可以应用于支持算 术运算的任何类型的存储块,以加速某些应用,例如深度学习。
加速器架构200也可以与主机单元220通信。主机单元220可以是一 个或多个处理单元(例如,X86中央处理单元)。在一些实施例中,PIM加速器210 可被视为主机单元220的协处理器。
如图2A所示,主机单元220可以被关联于主机存储器221。在一些实 施例中,主机存储器221可能是关联于主机单元220的集成存储器或外部存储 器。主机存储器221可能是本地存储器或全局存储器。在一些实施例中,主机 存储器221可能包括主机磁盘,该磁盘是配置为主机单元220提供附加存储的 外部存储器。主机存储器221可以是双数据率同步动态随机存取存储器(例如 DDR,SDRAM)等。与充当更高级别的缓存的PIM加速器210的片上存储器相 比,主机存储器221可以被配置为以较慢的访问速度存储大量数据。存储在主 机存储器221中的数据可以被传输到PIM加速器210,以执行神经网络模型。
在一些实施例中,具有主机单元220和主机存储器221的主机系统可 以包括编译器(图未示)。所述编译器是将一种编程语言编写的计算机代码转换为 指令以创建可执行程序的程序或计算机软件。在机器学习应用程序中,编译器 可以执行各种操作,例如,预处理、词法分析、语法分析、语义分析、将输入 程序转换为中间表示、代码优化、以及代码生成,或以上的组合。
在一些实施例中,所述编译器可以将一个或多个命令推送到主机单元 220。基于这些命令,主机单元220可以将任意数量的任务分配给一个或多个存 储器片(例如,存储器片2024)或处理元件。一些命令可以指示DMA单元从主机 存储器(例如,图2A的主机存储器221)加载指令和数据进入加速器(例如,图2A 的PIM加速器210)。所述指令可以被加载到被分配有相应任务的各个存储器片 (例如,图2A的存储器片2024),所述一个或多个存储器片可以处理这些指令。
应当理解,前几个指令可以指示将数据从主机存储器221加载/存储到 存储器片的一个或多个本地存储器中。然后,每个存储器片可以启动指令管道, 这包括从本地存储器获取指令(例如,通过提取单元),解码指令(例如,通过指 令解码器)并生成本地存储器地址(例如,对应于操作数),读取源数据,执行或 加载/存储运算,然后回写结果。
图2B示出了与本公开的实施例一致的包含神经网络加速器架构的示 例性云系统的原理图。如图2B所示,云系统230可以提供具有人工智能(AI)功 能的云服务,并且可以包括多个计算服务器(例如232和234)。例如,在一些实 施例中,计算服务器232可以结合图2A的神经网络加速器架构200。神经网络 加速器架构200在图2B中被以简化和清晰的方式示出。
在神经网络加速器架构200的帮助下,云系统230可以提供图像识别、 面部识别、翻译、3D建模等的扩展AI功能。可以理解的是,神经网络加速器 架构200可以以其他形式部署到计算设备。例如,神经网络加速器架构200也 可以集成在计算设备中,例如智能电话,平板电脑和可穿戴设备。
图3示出了与本公开的实施例一致的示例性存储器片配置。存储器片 300可能包括存储块组件310、控制器320、行驱动器331、列驱动器332和全 局缓冲区340。
存储块组件310可以包括与本公开的实施例一致的布置在二维网格中 的多个存储块,这将参照后续的图4详细解释。
控制器320可以通过行驱动器331、列驱动器332和全局缓冲区340 向存储块组件310中的每个存储块提供命令。行驱动器331连接到存储块组件 310中的每一行存储块,列驱动器332连接到存储块组件310中的每一列存储块。 在一些实施例中,每个存储块中包含的块控制器(例如,图1中的块控制器120) 可以被配置为经由行驱动器331或列驱动器332从控制器320接收命令,以及 向块行驱动器(例如,图1中的块行驱动器131)和块列驱动器(例如,图1中的块 列驱动器132)发布信号,以在存储器中执行相应的操作。根据本公开的实施例, 存储块可以通过使用属于存储块组件310的存储块的块控制器独立地执行不同的运算,因此,可以执行块级并行处理。数据可以由块控制器在相应存储块中 的被布置为行和列排列的存储单元之间有效地传输。
在一些实施例中,全局缓冲区340可用于在存储块组件310中的存储 块之间传输数据。例如,当将数据从存储块组件310中的一个存储块传输到另 一个存储块时,控制器320可以使用全局缓冲区340。根据本公开的一些实施例, 全局缓冲区340可以由存储块组件310中的所有存储块共享。全局缓冲区340 可以配置为存储每个存储块的命令,以处理神经网络模型中被分配的任务。在 一些实施例中,控制器320被配置为通过行驱动程序331和列驱动程序332将 存储在全局缓冲区340中的命令发送到相应的存储块。在一些实施例中,此类 命令可以从主机单元(例如,图2A的主机单元220)传输。全局缓冲区340可以 被配置为存储和发送用于处理被分配给存储块的任务的数据。在一些实施例中, 存储在全局缓冲区340中并从全局缓冲发送的数据可以传送自主机单元(例如, 图2A的主机单元220)或存储块组件310中的其他存储块。在一些实施例中,控 制器320被配置为将来自存储块组件310中的存储块中的数据存储到全局缓冲 区340中。在一些实施例中,控制器320可以在一个周期内将存储块组件310 中的一个存储块的整行的数据接收并存储到全局缓冲区340中。类似地,控制 器320可以在一个周期中将整行的数据从全局缓冲区340发送到另一个存储块。
现在参考图4说明符合本公开的实施例的存储器片300中的示例性存 储块组件310。存储块组件310可以包括多个存储块410、多个开关420和多个 选择器430。
根据本公开的实施例,在PIM体系架构中处理神经网络模型的操作可 以转换为存储器内列向向量计算。存储器中的列向向量计算、某个神经网络层 的输出数据或神经网络操作可以作为一组列向量存储在存储块410中。存储块 组件310可以被配置为支持或促进列向向量计算,以最小化存储块组件310内 不必要的数据移动,并在执行神经网络模型时最大化存储器利用率。在一些实 施例中,可以互连存储块组件310中的多个存储块410,以促进存储块之间的数 据移动,这使得存储块组件310匹配并高效的用于处理向量计算。多个存储块 410可以布置在2D网格中。在一些实施例中,可以在存储块组件310中以M行 数和N列数布置多个存储块410,其中M和N是大于1的自然数。每个存储块 410可以位于行和列的各个交叉点。而图4示出了410_11到410_34共12个存 储块,被排列成3行和4列作为示例,应当理解,存储块组件310可以具有任 何数量的存储块,并且可以以任何方式进行布置。在一些实施例中,每个存储 块410可以是PIM块(例如,图1的PIM块100)。在一些实施例中,存储块410 是用于执行各种存内操作的基本计算单元。
根据本公开的实施例,行数据链路451使多个存储块410中同一行中 的两个相邻存储块相互连接。例如,如图4所示,放置在第一行的相邻的第一 存储块410_11和第二存储块410_12通过行数据链路451_1相连,放置在第二 行的相邻的第五存储块410_21和第六存储块410_22通过行数据链路451_2相 连。同样,同一行中的两个相邻存储块可以通过它们自己的行数据链路互连。
根据本公开的实施例,存储块组件310还可以包括列数据链路,该列 数据链路连接位于多个存储块410中的两个相邻的存储块列之间的多个行数据 链路。例如,如图4所示,两个列数据链路452_1和452_2连接位于第一列存 储块410_11到410_31之间和第二列存储块410_12到410_32之间的三个行数 据链路451_1到451_3。在一些实施例中,通过存储块的两个相邻列之间的列数 据链路452和行数据链路451,两个相邻列的存储块中的一列存储块可以与另一 列存储块共享数据。例如,列数据链路452_1或452_2通过配合行数据链接451_1 到451_3,使第一列的存储块410_11到410_31能够与整个第二列的存储块 410_12到410_31共享数据。
根据本公开的实施例,可以为每一行数据链路451提供开关420。例 如,第一开关420_1和第二开关420_2可以提供给行数据链路451_1,以及,第 三开关420_3和第四开关420_4提供给行数据链路451_2。在一些实施例中,各 个开关420被配置成打开或关闭数据路径,所述数据路径为从相邻的存储块通 过同一行的开关420到相应的数据链路451,或者相反。例如,当第一开关420_1 被打开,一条从第一存储块410_11到行数据链路451_1的数据路径开放。在此 示例中,来自第一存储块410_11的数据可以通过行数据链路451_1、451_2和 451_3,以及列数据链路452_1和452_2运送。在相同的例子,当第二开关420_2 被打开,一条从行数据链路451_1到第二存储块410_12的数据路径开放。在此 示例中,通过行数据链路451_1、451_2和451_3,以及列数据链路452_1和452_2 共享的数据,可以传输到第二存储块410_2。
根据本公开的一些实施例,选择器430被提供给同一列中的多个开关。 例如,第一选择器430_1被提供给第一列的开关420_1、420_3和420_5,以及, 第二选择器430_2被提供给第二列的开关420_2、420_4和420_6。在一些实施 例中,选择器430可以配置为在相应列中的多个开关中选择要打开的开关。例 如,第一选择器430_1可以被配置为在第一列的多个开关420_1、420_3和420_5 中选择开关打开,以及,第二选择器430_2可以配置为在第二列多个开关420_2、 420_4和420_6中选择开关打开。
当来自第一存储块410_11的数据需要传输到第十存储块410_32时, 第一选择器430_1可选择第一开关420_1打开,第二个选择器430_2可选择第 六个开关420_6打开。在此示例中,通过打开第一开关420_1,一条从第一存储 块410到行数据链路451_1的数据路径开通,经由两个列数据链路452_1和452_2 以及行数据链路451_1、451_2和451_3,来自第一存储块410的数据可被第二 列的存储块410_12,410_22和410_32获得。因为只有第六个开关420_6被选 择打开,因而,行数据链路451_3到第10存储块410_32的数据路径开通,来 自第一存储块410的数据可以传输到第十存储块410_32。
根据本公开的一些实施例,一个存储块到多个存储块的数据传输可被 支持。选择器430控制从行数据链路451到相邻存储块410的数据路径,可以 一次选择多个开关(例如,在一个周期中)以传输数据到多个存储块410。例如, 在上面的示例中,在同一周期中,第二选择器430_2可以选择第二开关420_2 和第六开关420_6将数据从第一存储块410_11传输到两个存储块410_12和 410_32。在本公开中,将说明在一个周期中选择一个开关的实施例。在这些实 施例中,可以在多个周期内执行从一个存储块到多个存储块的数据传输(也称为 “一到多”数据传输)。例如,在上面的示例中,第二选择器430_2在第一个周 期中选择第二开关420_2,在第二个周期中选择第六开关420_6,而第一选择器 430_1在第一个周期和第二个周期中选择第一个开关420_1,以从第一存储块 410_11传输数据到两个存储块410_12和410_32。
根据一些实施例,当数据被从一个存储块传输到另一个存储块时,存 储在所述传输存储块中的一列存储单元中的值可以被存储在接收存储块中的一 行存储单元中。例如,当数据从第一存储块410_11传输到第10存储块410_32 时,被存储在第一存储块410_11的一列存储单元(例如,存储输出向量的一列存 储单元)的值可以被存储在第10存储块410_32中的一行存储单元中。在一些实 施例中,来自存储块中存储单元的整个列的数据(例如,410_11)可以在一个周期 中转移到一个或多个相邻的存储块(例如,410_12和410_32)。在一些实施例中, 传输延迟可以取决于向量中每个元素的大小。
如上所述,在PIM体系架构中处理神经网络模型的操作可以转换为存 内列向向量计算。存内列向列向量计算、某个神经网络层的输出数据或神经网 络操作可以作为一组列向向量存储在存储块中。根据本公开的一些实施例,全 局缓冲区340可能适用于传输存储在一排存储单元中的数据,并且当存储在一 排存储单元中的整个数据在一个周期中移动时,可以表现出理想性能。通过全 局缓冲区340传输列向向量可能需要向量的每个元素的传输序列。通过与所有 存储块410共享的全局缓冲区340移动数据可能会导致严重冲突,这可能会降 低系统吞吐量。根据本公开的实施例,通过数据链路451和452,相邻存储块之 间的数据传输可以在不使用全局缓冲区340的情况下被执行,这提高了相邻存 储块之间的数据传输性能以及在PIM加速器210上执行神经网络模型时的整体 吞吐量。
根据本公开的实施例,存储块组件310还可以包括用于在非相邻存储 块410之间传输数据的传输缓冲区440。在一些实施例中,传输缓冲区440可以 被提供给存储块列。例如,第一传输缓冲区440_1被提供给第一列的存储块 410_11、410_21和410_31,第二传输缓冲区440_2被提供给第二列的存储块 410_12、410_22和410_32,第三传输缓冲区440_3提供给第三列的存储块410_13、 410_23和410_33,第四传输缓冲区440_4被提供给第四列的存储块410_14、 410_24和410_34。类似于存储块,行数据链路451_4在两个相邻的传输缓冲区440_1和440_2之间延伸,两个列数据链路452_1和452_2延伸到第一列存储块 和第二列存储块之间的行数据链路451_4。在一些实施例中,传输缓冲区440可 能只有一个行缓冲区来存储一行存储单元中的数据。当需要将数据从第一列的 第一存储块410_11传输到第三列的第三存储块410_13时,在第一个周期内, 第一选择器430_1可选择第一开关420_1开通,第二选择器430_2可选择第八 个开关420_8开通。在所述第一周期内,来自第一存储块410_11的数据可以被 存储在第二传输缓冲区440_2的行缓冲区中。在第二周期,第三选择器430_3 可以选择第15开关420_15开通,以及,第四选择器430_4选择第10开关420_10 开通,然后,所述第二传输缓冲区440_2中存储的数据可以被传输到第三存储 块410_13。
而图4示出了第一传输缓冲区440_1和第四传输缓冲区440_4和第七 开关420_7和第二十四开关420_24,在一些实施例中可以省略这些元素,因为 第一传输缓冲区440_1不提供要传输的数据,并且第四传输缓冲区440_4不会 成为数据传输的最终目的地。根据本公开的实施例,经由传输缓冲区440,在不 使用全局缓冲区340的情况下,非相邻存储块之间的数据传输可以被执行,这 也提高了非相邻存储块之间的数据传输性能以及在PIM加速器210上执行神经 网络模型时的整体吞吐量。根据本公开的一些实施例,非相邻存储块之间的数 据传输可能花费H周期,其中H是两个非相邻存储块之间的列差。例如,当数 据从第一列中的第一存储块410_11传输到第三列中的第三存储块410_13时, 数据传输可能需要2个周期(例如,第一周期从第一存储块410_11到第二传输缓 冲区440_2,第二周期从第二传输缓冲区440_2到第三存储块410_13)。由于数 据大小,数据从第一存储块410_11到第二传输缓冲区440_2,以及从第二传输 缓冲区440_2到第三存储块410_13的每次数据传输需要C周期时,数据传输可 能总共需要H×C个周期。
在一些实施例中,数据可以通过行和列数据链路451和452或传输缓 冲区440在存储块组件310中的一个方向上传输。例如,在图4的存储块组件 310中;在图4中,通过存储块组件310中的行和列数据链路451和452或传输 缓冲区440,数据可以从左侧传输到右侧(即,从第一列到第二列的方向)。当数 据需要以其他方向传输时,例如从右侧到左侧的方向或与列方向平行的方向, 这种数据传输可以通过全局缓冲区340来执行。例如,当从一个存储块(例如, 410_11)移动数据到位于同一存储块的相同列中的另一存储块(410_21),控制器 320可以被配置为通过全局缓冲区340执行数据传输。当从一个存储块(例如, 410_12)移动数据到另一个存储块(例如,410_11),控制器320可以被配置为通 过全局缓冲区340执行此类数据传输。而数据在存储块组件310中从左侧传输 到右侧在图4的实施例中已经解释,应当理解,实施本公开的实施例,可以使 数据能够在任何其他方向上被传输。
根据本公开的实施例,神经网络模型可以映射到多个存储块410,并 且该存储块可以以流水线方式处理相应的任务,例如训练或推理,以最大化系 统吞吐量。在一些实施例中,图3的存储器片300可包括指令存储器350,该指 令存储器被配置为以流水线方式在存储块组件310中存储用于执行神经网络模 型的指令。指令存储器350可以在存储块组件310中的存储块之间存储计算或 数据移动的指令。控制器320配置为可以访问指令存储器350,以检索存储在指 令存储器350中的指令。
指令存储器35可以配置为具有分配给每个存储块的单独的指令段。在 一些实施例中,分配给相应存储块410的指令段可以分为多个部分,例如,三 个部分,包括接收部分,计算部分和发送部分。接收部分可以存储用于处理分 配给相应存储块410的任务的加载数据的指令。数据可以传输自其他存储块410、 传输缓冲区440、全局缓冲区340或主机单元220。例如,关于数据传输自哪个 源位置的指令可以存储在接收部分中。计算部分可以存储用于执行神经网络模 型相关操作的计算指令。例如,关于执行哪些计算操作的指令可以存储在计算 部分。发送部分可以存储将输出数据传输到其他存储块410、传输缓冲区440、 全局缓冲区340或主机单元220的指令。例如,关于输出数据传输到哪个目标 位置的指令可以存储在发送部分中。在一些实施例中,编译器可以基于存储块 组件310中的存储布局和数据布局机制来确定相应指令的操作数源和目标地址。
根据本公开的实施例,存储器片300还可以包括一个或多个控制表格。 在一些实施例中,存储器片300可以包括用于记录存储器片300中的数据传输 的数据传输表。与本公开的实施例一致,图5A示出了用于记录在存储器片300 中的数据传输的示例性数据传输表360。数据传输表360可以配置为记录存储块 之间的数据传输。在一些实施例中,数据传输表360可以配置为记录待定的数 据传输。如图5A所示,数据传输表360可以具有多个字段,例如,包括源字段 (Src)、目标字段(Dst)和缓冲区字段(Bfr)。源字段可以包括标示发送数据的存储 块的信息,目标字段可以包括标示接收数据的存储块的信息。缓冲区字段可能包括标示数据当前放置在哪个缓冲区(例如,传输缓冲区440或全局缓冲区340) 的信息。控制器320可以在运行时调度指令,用于参照存储在数据传输表360 中的信息执行神经网络模型。根据本公开的一些实施例,存储块410可以一次 执行计算或数据传输中的一个,并且在一个周期内可传输的数据大小受到限制, 一个数据的传输可能需要多个周期才能完成。
在一些实施例中,存储器片300可以包括一个块表,用于指示相应的 存储块处于何种状态。与本公开的实施例一致,图5B示出了用于记录存储块状 态的示例性块表370。如图5B所示,块表370可以具有存储相应存储块的当前 状态的状态字段(State)。根据本公开的一些实施例,在执行神经网络模型期间, 存储块410可以具有其中一个状态,例如,包括空闲状态(I),计算状态(C)和就 绪状态(R)。参考图5C,其示出了存储块410的示例性状态转换周期,以说明存 储块的状态。如图5C所示,一旦存储块410接收到用于执行某个特定计算操作 的所有数据,存储块410的状态就会从空闲状态(I)变为计算状态(C)。一旦存储 块410完成所述计算操作,存储块410的状态就会从计算状态(C)变为就绪状态 (R)。一旦存储块410完成将输出数据发送到目的地位置,存储块410的状态就 会从就绪状态(R)变为空闲状态(I)。
根据本公开的一些实施例,在神经网络模型的执行期间,状态转换循 环可以被重复。在一些实施例中,当目标存储器已满时,数据传输可以被暂停。 例如,当数据被传输到传输缓冲区440并且传输缓冲区440已满或缺少用于额 外数据传输的空间时,所计划数据传输可以暂停,直到传输缓冲区440被清空。 在一些实施例中,图5B的块表370可以包括记录接收数据大小或传输数据大小 的字段。在一些实施例中,可以通过计算传输数据的迭代次数来记录所接收数 据的大小。例如,当可在一个周期内传输的数据大小是固定的或有限的,并且 待传输的数据大于在一个周期内可传输的数据大小时,待传输的数据可以分为较小的部分,每个部分等于或小于在一个周期内可传输的数据大小。然后,可 以在多个周期内将所述分开的较小部分从一个位置转移到另一个位置。因此, 在一些实施例中,计算传输数据的迭代次数可被用于确定传输数据的大小。如 图5B所示,块表370可以具有记录接收数据的迭代次数的字段(#Rec)和记录发 送数据的迭代次数的字段(#Send)。
重新参考图3,控制器320可以被配置为通过协调存储块组件310中 的硬件组件来调度指令(例如,被存储在存储器存储单元350中的),以用于神经 网络模型的流水线执行。根据本公开的一些实施例,控制器320可以被配置为 用于解码指令,调度指令和更新控制表(例如,数据传输表360和块表370)。在 运行期间,控制器320可以定期检查控制表(例如,数据传输表360或块表370), 以确定每个存储块410的下一步。例如,通过参考数据传输表360或块表370, 控制器320可以确定下一个周期存储块410将进入哪个状态(例如,空闲状态(I)、 计算状态(C)或就绪状态(R))。检查下一步后,通过参考指令存储器350,控制 器320可以调度与存储块410的下一步相对应的指令。控制器320可以配置为 根据所述调度更新数据传输表360或块表370。根据本公开的一些实施例,控制 器320可以被配置为使用全局缓冲区340管理数据通信。在一些实施例中,控 制器320可以配置为管理进出主机单元220或主机存储器221的数据通信。
如上所述,PIM架构可用于处理神经网络模型,以解决处理单元和存 储单元之间的数据移动开销。在存储器中处理诸如加法、乘法等等运算操作以 减少在存储中的不必要的数据移动,并最大限度地利用PIM架构的计算能力之 前,在PIM架构上映射神经网络模型并正确匹配数据非常重要。所公开的实施 例提供了数据布局优化和节点分配技术,这些技术可以在PIM加速器架构上执 行神经网络模型,以及减少不必要的数据移动时,最大化并行性和资源利用率。
图6示出了与本公开的实施例一致的示例性调度器的框图。如图6所 示,调度器600可以包括图生成器610、节点分配器620和数据布局优化器630。 在一些实施例中,调度器600可以在编译器中实现。在一些实施例中,调度器 600可以在运行时库中实现。
图生成器610可以编译机器学习模型或神经网络模型的源代码,以生 成表示源代码的计算图。在一些实施例中,图生成器610可以转换用高级语言 编写的机器学习模型或神经网络模型,以生成表示机器学习模型或神经网络模 型的计算图。在一些实施例中,计算图可以从最初从源代码编译的另一个高级 代码生成。在一些实施例中,机器学习模型可以是训练过的冻结机器学习模型。 在一些实施例中,图生成器610可以通过解析机器学习模型以有向无环图(DAG) 的形式生成计算图。在一些实施例中,图生成器610可以从其他组件获取计算 图。在一些实施例中,图生成器610可以获取广泛使用的格式的机器学习模型,例如Pytorch,ONNX,等等。
图7A示出了与本公开的实施例一致的由图生成器610生成或获取的神 经网络模型的示例。在机器学习或深度学习中,神经网络模型可以以图形方式 表示为计算图,或表示为包含组织为有向无环图(DAG)的节点和边的数据结构。 节点表示变量或计算操作,而边表示从一个节点到另一个节点的数据或张量流。 表示计算操作的节点可以消耗沿着输入边流入节点的输入数据,而由计算操作 产生的输出数据可以从节点沿着输出边流出。典型的机器学习或深度学习模型 可能具有数千甚至数百万个变量和计算操作。
如图7A所示,计算图包括多个节点n1至n6以及连接多个节点n1至n6之中的两个节点的边。图7A所示的计算图,可以是某个神经网络模型的一部分。 应该注意的是,图7A的计算图仅是解释性的而不是限制性的,因此本公开的实 施例可以应用于具有任意数量的节点和边的计算图。第二节点n2接收第一节点 n1的输出数据。第二节点n2的输出数据被提供给第三节点n3、第四节点n4和第 六节点n6。第三节点n3的输出数据被提供给第五节点n5,第四节点n4的输出数 据被提供给第六节点n6。第五节点n5的输出数据被提供给第六节点n6。在此示 例中,第六节点n6从三个节点,即第二节点n2、第四节点n4和第五节点n5,接 收输出数据。在一些实施例中,节点n1至n6可以表示相应的计算操作。边可以 表示由相应边连接的两个节点之间的依赖关系。也就是说,只有在处理边起点 处的节点之后,才能处理边终点处的节点。例如,只有将第二节点n2、第四节 点n4和第五节点n5的输出数据提供给第六节点n6后,才能处理第六节点n6
重新参考图6,节点分配器620可以在PIM加速器(例如,图2A中的 PIM加速器210)上分配神经网络模型的节点。在一些实施例中,节点分配器620 可以在包括在PIM加速器的PIM存储块组件(例如,图3中的存储块组件310) 中的存储块上,分配由用于神经网络模型的计算图的节点表示的任务。根据本 公开的一些实施例,节点分配器620基于节点的层信息和计算图中的数据相关 性,将计算图的每个节点映射到PIM存储块组件中的特定存储块(例如,图4中 的存储块420)上。在一些实施例中,节点分配器620可以采用层感知算法在PIM 加速器上进行任务分配。
在本公开中,将参照图7A所示的计算图解释节点分配器620的功能。 在一些实施例中,节点分配器620被配置为向计算图的每个节点分配层编号。 在一些实施例中,节点分配器620可以基于计算图的拓扑排序来分配层编号。
在一些实施例中,可以通过将输出数据提供给某个特定节点的前一个 节点的层编号增加1来确定所述特定节点的层编号。例如,当我们假设第一节 点n1在图1的如图7A所示的计算图中具有层编号1时,可以将层编号2分配 给第二节点n2,因为第一节点n1的输出数据被提供给第二节点n2。可以将层编 号3分配给第三节点n3和第四节点n4,因为第二节点n2的输出数据提供给第三 节点n3和第四节点n4。可以将层编号4分配给第五节点n5,因为具有层编号3 的第三节点n3的输出数据被提供给第五节点n5。这里,第六节点n6可以被分配层编号5——因为具有层编号4的第五节点n5的输出数据被提供给第六节点n6, 或被分配层编号4——因为具有层编号3的第四节点n4的输出数据被提供给第 六节点n6,或者被分配层编号3——因为具有层编号2的第二节点n2的输出数 据被提供给第六节点n6。在一些实施例中,当某个节点从多个节点接收输出数 据时,可以将层编号候选中的最高层编号作为分配给该节点的层编号。例如, 第六节点n6可以在可能的层编号3、4和5中分配最高的层编号5。
通过如上所述分配层编号,当在PIM存储块组件上执行计算图时,数 据移动开销通过保持计算图的数据依赖关系可以被减少。如参考之前的图3和 图4所讨论的,PIM存储块组件可以支持在一个方向(例如,从左到右)通过内部 组件——如数据链路(例如,原始数据链路和列数据链路451和452),传输缓冲 区(例如,传输缓冲区440),以及类似组件——传输数据。当接收节点与发送节 点在位于同一列的存储块上被处理时,或者,当处理接收节点的存储块位于处 理发送节点的存储块通过内部组件进行数据传输的传输方向的相反方向时,用 于将输出数据从发送节点传输到接收节点的数据移动可导致非常大的开销。根 据本公开的实施例的标记方案,可以给予在PIM加速器上执行神经网络模型期 间的低成本数据移动以及最大并行性。
在一些实施例中,节点分配器620可以被配置为在PIM存储块组件中 的存储块上的计算图中分配节点,以处理由节点代表的操作。在一些实施例中, 节点分配器620可以基于节点的层信息、数据关联关系、PIM加速器的硬件特 性等,在存储块上分配节点。根据本公开的一些实施例,节点分配器620可以 配置为分析多个节点的计算图,节点的层编号,节点之间的关联关系等。例如, 节点分配器620可以计算出计算图中包含多少层和节点,以及层编号的最高数 和最低数。节点分配器620可以获取有关可用存储块块、可用存储块的可用行 数和列数、每个可用存储块的计算能力等的信息,作为PIM加速器的硬件特性。
图7B示出了与本公开的实施例一致的,用于执行图7A的在PIM存储 块架构中执行神经网络模型的节点映射的第一示例。如图7B所示,当多个存储 块列和一个存储块列中的多个存储块足以处理计算图时,计算图中的节点可以 在支持内部数据传输的方向上以层编号的顺序在存储块上分配(例如,图4中从 左到右)。例如,图7B所示的PIM存储块组件包括5列,该5列大于或等于图 7A的计算图的总层数(例如5);以及,一列包括3个存储块,其块数大于或等于 计算图的每一层中包括的最大节点数(例如2)。
在第一个例子中,具有计算图的层编号1的第一节点n1可以分配给第 一列C1中的存储块,以及,具有层编号2的第二节点n2可以分配给第二列C2中的存储块。来自第一列C1中的存储块的第一节点n1的输出数据可以在不中断 全局缓冲区的情况下,经由存储块组件中的诸如传输缓冲器、数据链路等的内 部组件传输到第二列C2中的存储块,以计算由第二节点n2表示的操作。具有层 编号3的第三和第四节点n3和n4可以被分配给第三列C3中的存储块。在图7B 中,由于存储块列包括三个存储块,因此可以将具有层编号3的两个节点n3和n4分配给同一列中的存储块。同样地,如图7B所示,可以将具有层编号4的第 五节点n5分配给第四列C4中的存储块,并且可以将具有层编号5的第六节点n6分配给第五列中的存储块。如图7B所示,通过在支持内部数据传输的方向上按 照层号的顺序将计算图的节点映射到存储块,来自每个节点的执行操作的输出 数据可以被传输以用于执行后续节点的操作而无需全局缓冲区的中断
图7C示出了与本公开的实施例一致的用于在PIM存储块组件中执行 图7A的神经网络模型的节点映射的第二示例。在所述第二个示例中,假设图 7A所示的计算图是更大的计算图的一部分,其中第一节点n1之前的三个节点已 经被分配给第一列C1到第三列C3的各列的第一行R1中的存储块。类似于图7B 中所示的第一示例,具有分配给第一行R1和第三列C3的存储块的节点的层号的 后续层号i的第一节点n1,可以被分配给第四列C4中的存储块,具有层号i+1 的第二节点n2可以被分配给第五列C5中的存储块。
在该示例中,如图7C所示,许多存储块列不足以处理较大的计算图。 在图7C中,从第五列C5支持内部数据传输的方向上,未分配的节点n3至n6没 有可用的存储块列。在本发明的一些实施例中,未分配的节点可以从可用的最 左侧存储块列(例如C1)在支持内部数据传输的方向上按照层号的顺序来分配。 例如,具有层编号i+2的第三和第四节点n3和n4可以被分配给第一列C1中的可 用存储块。如果第一列C1没有足够数量的存储块可用于第三和第四节点n3和n4, 则可以将第三节点n3和第四节点n4分别分配给两个不同的列。类似地,如图7C 所示,具有层编号i+3的第五节点n5可以被分配给第二列C2中的存储块,以及, 具有层编号i+4的第六节点n6可以被分配给第三列C3中的存储块。
在图7C所示的第二示例中,第二节点n2的输出数据可以通过全局缓 冲区而不是PIM存储块组件中的存储块互连,从执行第二节点n2并位于第五列 C5中的存储块传输到执行第三节点n3和第四节点n4的存储块以及执行第六节点 n6的存储块。这是因为传输方向与内部数据支持的传输方向相反。如上所述, 通过全局缓冲区进行数据传输的开销比通过存储块组件中的内部组件进行数据 传输的开销大得多。
根据本公开的一些实施例,图6所示的节点分配器620在将计算图的 节点映射到存储块上时,可以进一步配置以减少通过全局缓冲区的数据传输开 销。在一些实施例中,在将节点映射到PIM存储块组件中的存储块上时,节点 分配器620可以考虑将许多从节点的输出数据的数据传输分配到最右边列中的 存储块上。在一些实施例中,节点分配器620可以分析最右边的列(例如,第 五列C5)中的存储块上分配的节点的输出边和最右边的第二列(例如,第四列 C4)中的存储块上分配的节点的输出边。例如,从图7A的计算图分析,节点分 配器620可以确定具有层编号i+1的节点将被分配到最右边的列,具有层编号i+1 的节点的数量为1,并且来自具有层编号i+1的节点的输出边的数量(例如,第 二节点n2)为3。从图7A的计算图分析,节点分配器620还可以确定具有层编号i的节点的数量为1,以及来自具有层编号i的节点的输出边的数量(例如,第一 节点n1)是1。在一些实施例中,节点分配器620可以确定不将第二节点n2分配 到最右边的列(例如,C5),而是将第二节点n2分配给第一列C1,以将通过全 局缓冲区的数据传输从3次减少到一次。
图7D示出了用于在PIM存储块组件中执行图7A的神经网络模型的节 点映射的第三个示例,其结果来自上述节点分配器620的分析和确定。在图7D 中示出相对图7C的第二个示例减少使用全局缓冲区的数据传输开销的节点映射。 图7D中所示的节点映射与图7C中所示的节点映射的不同之处在于,具有层号 i+1的第二节点n2被分配给第一列C1中的存储块而不是第五列C2。在图7D中, 第三到第六节点n3到n6按照从第二列C2到第四列C4的层编号的顺序被分配给 存储块。在第三个示例中,全局缓冲区用于将输出数据从存储块计算第一节点 n1传输到存储块计算第二节点n2。当与图7C所示的第二个示例进行比较时,通 过全局缓冲区的数据传输开销减少,因为第一节点n1的输出数据仅提供给第二 节点n2,而第二节点n2的输出数据被提供给三个节点n3,n4和n6
注意,在所述第三个示例中,在执行计算图时不使用第五列C5中的存 储块。在一些实施例中,节点分配器620可以配置为通过平衡数据传输开销和 存储器利用率来重新分配存储块上的节点。例如,当由于节点重新分配而未使 用的存储块的成本大于没有节点重新分配的数据传输开销的成本时,节点分配 器620可能不执行图7D所示的重新分配。在一些实施例中,节点分配器620可 以考虑来自三层或多层节点的输出边,包括要分配给最右边列的层,而第三个 示例参照图7D,解释考虑两层i和i+1的输出边。
重新参考图6,这是与本公开一致的实施例,数据布局优化器630可 被配置为基于对要在对应存储块上执行的操作的分析和对应操作的数据维度来 确定PIM块(例如,图1中的PIM块100)中的数据布局。根据一些实施例, 可以将数据布局优化器630配置为确定PIM块中的数据布局,以在PIM块中执 行操作时,改善计算并行性,并最大化资源利用率。
优化用于在PIM块上计算向量-矩阵乘法类型运算的数据布局可以大 幅提高执行神经网络模型的计算并行性和整体执行性能,因为神经网络模型中 的许多操作包括向量-矩阵乘法类型运算。根据本公开的一些实施例,可以将数 据布局优化器630配置为优化PIM块中的数据布局,以计算相应PIM块中的向 量-矩阵乘法类型运算。
图8A示出了向量-矩阵乘法运算的一个示例。图8A所示的向量-矩阵 乘法运算可以表示如下:
H=I×W (等式1)
在此,可以通过将输入向量I和权重矩阵W相乘来获得输出矩阵H。输入 向量I包括X1到X4作为其元素,权重矩阵W包括Wij作为其位于权重矩阵W 的第ith行和第jth列的元素。输出矩阵H包括H1到H4作为其元素,可以如下计 算:
H1=X1W11+X2W21+X3W31+X4W41 (等式2)
H2=X1W12+X2W22+X3W32+X4W42 (等式3)
H3=X1W13+X2W23+X3W33+X4W43 (等式4)
H1=X1W14+X2W24+X3W34+X4W44 (等式5)
图6的数据布局优化器630被配置为确定PIM块中的数据布局(例如, 图1的PIM块100),以执行向量矩阵乘法运算。图8B示出了与本公开的实施 例一致的,在PIM块中执行图8A的向量矩阵乘法运算的数据布局的第一示例。 为了在PIM块中执行向量矩阵乘法运算,输入向量I和权重矩阵W的数据可以 以合适的布局排列,以进行列向向量计算。如图8B所示,对应于在乘法运算中 每个元素被乘的次数,输入向量I的每个元素可以被拷贝多次。在等式2到等式 5中,输入向量I的每个元素被乘以权重矩阵W的元素4次。因此,第一个元 素X1在第一列C1中从第一行R1复制到第四行R4拷贝4次,同样,第二元素 X2到第四元素X4可以布置在第二列C2到第四列C4中。对应于输入向量I的排 列,权重矩阵W可以以转置形式排列。权重矩阵W中乘以第一列C1中的第一 个元素X1的元素,排列在下一个可用列中。例如,元素W11、W12、W13和W14, 它们各自乘以等式2到5中的第一个元素X1,可以排列在第五列C5中。类似地, 权重矩阵W的其他元素可以被安排在C6到C8列中,使得需要乘以第二元素X2的元素W21,W22,W23,和W24被安排在第六列C6,乘以第三元素X3的元素 W31,W32,W33,和W34被安排在第七列C7中,需要乘以第四元素X4的元素 W41、W42、W43和W44被安排在第八列C8中。通过如图8B所示的输入向量I 和权重矩阵W的数据布局,向量矩阵乘法运算可以转换为列向向量运算。在图8B的第一个示例中,向量矩阵乘法运算可以包括分别来自输入向量I和权重矩 阵W的两列之间的四个向量乘法运算。
在向量矩阵乘法的计算中,相应两列之间乘法的结果数据可以存储在 下一个可用列中。例如,第一列C1和第五列C5之间的乘法结果数据可以存储在 第九列C9中,类似地,其他乘法结果数据可以排列在第C10到C12列中,这样第 二列C2和第六列C6之间的乘法结果数据储存在第十列c10中,第三列C3和第七 列C7之间的乘法结果数据存储在第十一列C11中,第四列C4和第八列C8之间的 乘法结果数据存储在第十二列C12中。为了获得输出向量H的每个元素,可以 将第9列C9到第12列C12的同一行中的值相加。加法操作可以通过两个步骤来执行。例如,第九列C9和第十列C10中的值可以元素和元素相加并存储在第十 三列C13中,类似的,第十一列C11和第十二列C12中的值可以元素和元素相加 并存储在第十四列C14,以上作为第一步。然后,第十三列C13和第十四列C14中的值可以元素和元素相加并存储在第十五列C15中。存储在第十五列C15的第 一行r1中的第一个值可以对应于输出矩阵H的第一个元素H1,并且类似地,存 储在第十五列C15的第二行R2到第四行R4中的第二到第四个值可以对应于输出 矩阵H的第二元素H2到第四元素H4。如上所述,在图8B所示的第一个示例中, 向量矩阵乘法运算的计算可以通过四次向量乘法运算和三次加法运算来执行。
根据本公开的一些实施例,图6的数据布局优化器630可以进一步配 置以增加计算并行性并提高存储器利用率。在本公开的一些实施例中,数据布 局优化器630可以配置为确定PIM块中的数据布局,所述数据布局用于基于自 适应向量折叠进行向量矩阵乘法运算。在一些实施例中,数据布局优化器630 可以分析相应存储块中的可用存储空间。
图8C示出了与本公开的实施例一致的,在PIM块中执行图8A的向量 矩阵乘法运算的数据布局的第二示例。在图8C中,用于计算向量矩阵乘法运算 的数据被布置在基于自适应向量折叠的PIM块中。在图8B中,输入向量I的4 个元素X1到X4被排列在C1到C4的4列中;在图8C中,第一元素X1排列在第 一列C1的第一行R1至第四行R4中,第三元素X3排列在第一列C1的第五行R5至第八行R8中,并且,第二元素X2排列在第二列C2的第一行R1至第四行R4中,第四元素X4排列在第五行R5至第八行R8中。换句话说,两个向量(例如, 具有四个第一元素X1的一个向量和另一个具有四个第三元素X3的向量)在第一 列C1中安放,并且类似地,两个向量(例如,一个向量包含四个第二元素X2, 另一个向量包含四个第四元素X4)在第二列C2中对齐,因此,请注意在图8C中 使用了2度向量折叠。
对应于输入向量I的排列,权重矩阵W可以被排列成使得权重矩阵W 的元素被排列在两列中,例如第三和第四列C3和C4。例如,元素W11、W12、 W13和W14(每个元素乘以等式2到5中的第一个元素X1)可以排列在第三列C3的第一行R1到第四行R4,元素W31、W32、W33和W34,(每个元素乘以第三元 素X3)可以排列在第三列C3的第五行R5到第八行R8中。元素W21、W22、W23和W24(在等式2到5中,每个元素乘以第二元素X2)可以排列在第四列C4的第 一行R1到第四行R4中,元素W41、W42、W43和W44(每个元素乘以第四元素X4) 可以排列在第四列C4的第五行R5到第八行R8中。
在图8C中,相应的两列之间进行乘法的结果数据可以存储在下一个可 用列中。例如,第一列C1和第三列C3之间的乘法结果数据可以存储在第五列 C5中,同样,第二列C2和第四列C4之间的乘法结果数据可以存储在第六列C6中。为了获得输出向量H的每个元素,第五列C5和第六列C6的同一行中的值 相加,并将加法结果数据存储在下一个可用列中。例如,第五列C5和第六列C6中的值可以元素和元素相加,相加的结果数据存储在第七列C7中。在此示例中, 由于输入向量I已被折叠并排列在两个列C1和C2中,每个列包括输入向量I的 两个元素,因此存储在列C7中的乘法结果数据中对应于所述输入向量I的折叠 元素的部分(例如,X3和X4),可以移动到下一个可用列。例如,存储在第七列 C7的第五行R5至第八行R8中的值可以移动到第八列C8的第一至第四行R1至 R4。这里,在图8C中示出了数据移动前后的第七列C7。然后,第七列C7和第 八列C8中的值可以逐个元素相加,并且相加结果数据可以存储在第九列C9中。 存储在第九列C9的第一行R1中的第一个值对应于输出矩阵H的第一个元素H1,并且类似地,第二个到第四个值存储在第九列C9的第二行R2到第四行R4中, 对应于输出矩阵H的第二元素H2到第四元素H4
对图8B的使用四个向量乘法运算的示例,当在PIM块中排列数据时, 通过使用向量折叠方案,可以使用图8C中的两个向量乘法运算来计算图8A的 向量矩阵乘法运算。随着向量折叠程度的增加,用于计算向量矩阵乘法运算的 向量乘法运算的数量可以减少。然而,在处理向量矩阵乘法运算中,向量折叠 会导致存储块中的数据移动(例如,图8C中从第七列C7到第八列C8的数据移动)。 图8A的向量矩阵乘法运算,采用四个向量乘法运算(例如,图8B中的C9至C12列)和三个向量加法运算(例如,图8B中的列C13至C15),没有图8B中的数据移 动,与之相比,在图8C所示的使用向量折叠方案的第二个例子中,向量矩阵乘 法运算可以通过两个向量乘法运算(例如,图8C中的列C5和C6),两个向量加 法运算(例如,图8C中的列C7和C9),以及一个块内数据移动(例如,图8C中 的从第七列C7到第八列C8的数据移动)实现。比较图8B所示的第一个示例和图 8C中示出的第二个示例,在计算图8A的向量矩阵乘法运算时,两度向量折叠 减少了两个向量乘法运算和一个向量加法运算,但是会导致一个块内数据移动。
需要注意的是,块内数据移动开销随着向量折叠程度的增加而增加。 基于存储器内计算(例如,乘法运算和加法运算)比块内数据移动带来更大的开销 的假设,在排列用于计算向量矩阵乘法运算的数据时使用向量折叠方案可以显 著提高效率和整体吞吐量。此外,可以通过基于向量折叠方案排列数据可以提 高存储空间利用率。例如,由于行R5到R8中的存储单元可用于计算向量矩阵乘 法运算,因此当基于向量折叠方案排列数据时,在图8C中使用较少的列(例如, 列C1到C9),与之相比,图8C所示的第一示例中,存储块中未使用的存储列可 用于其他计算操作。
向量折叠方案可用于其他计算运算,其可以表示为向量矩阵乘法运算, 如卷积运算。卷积运算在机器学习中被广泛使用,当执行神经网络模型时,计 算卷积运算的成本巨大。考虑到输入数据中的数据重用相当大,在PIM架构中 有效地执行卷积操作具有挑战性。
图9A示出了卷积运算的示例;图9A所示的矩阵卷积运算可以表示 如下:
H=I*W (等式6)
在此,可以通过将输入矩阵I的每个感受野与对应于滤波器的权重矩阵W 元素与元素相乘,来获得输出矩阵H。在图9A中,示出3行和3列的输入矩阵 I和2行和2列的权重矩阵W的例子。在本公开中,将仅出于说明目的,解释 其中以窗口尺寸2×2和1像素的步幅执行卷积操作的实施例。输入矩阵I包括 位于输入矩阵W的第ith行和第jth列的Xij作为其元素,权重矩阵W包括位于权 重矩阵W的ith行和jth列的Wij作为其元素。在该示例中,输入矩阵I包括四个 感受野,每个感受野乘以权重矩阵W,并产生其对应的输出矩阵H的输出元素Hij。例如,输入矩阵I包括第一感受野,包括元素X11、X12、X21和X22,第二 感受野包括元素X12、X13、X22和X23,第三感受野包括元件X21、X22、X31和 X32,第四感受野包括元件X22,X 23、X32和X33。输出矩阵H包括位于输出矩阵H的第ith行和第jth列的Hij作为其元素,其计算如下:
H11=X11W11+X12W12+X21W21+X22W22 (等式7)
H12=X12W11+X13W12+X22W21+X23W22 (等式8)
H21=X21W11+X22W12+X31W21+X32W22 (等式9)
H22=X22W11+X23W12+X32W21+X33W22 (等式10)
如等式7到10所示,卷积运算可以类似地转换为向量矩阵乘法运算, 因此可以基于图8C讨论的向量折叠方案,将数据排列在PIM块中。图6的数 据布局优化器630可被配置为用于确定执行卷积操作的PIM块中的数据布局。 图9B示出了与本公开的实施例一致的,用于执行图9A在PIM块中的卷积操作 的示例性数据布局。为了在PIM块中执行卷积运算,输入矩阵I和权重矩阵W 的数据可以以合适的布局进行列计算。数据布局优化器630可以在PIM块中安 排输入矩阵I和权重矩阵W,以提高执行卷积操作时的并行性和存储器利用率。
当在PIM块中排列用于权重矩阵W的数据时,可以对应于在列方向 上对齐并且在行方向上延伸到相同列上的感受野的数目,多次复制权重矩阵W 的每一行。如上所述,输入矩阵I包括在列方向上对齐并且在行方向上延伸到相 同列上的两个感受野。例如,第一和第三感受野沿列方向排列并延伸到输入矩 阵I的第一和第二列上,类似地,第二和第四感受野沿列方向排列并延伸到输入 矩阵I的第二和第三列上。因此,在PIM块中排列权重矩阵W的数据时,复制 两次第一行权重矩阵W和两次第二行权重矩阵W。虽然图9B示出为了本发明 的一致性,权重矩阵W被布置在第四列和第五列C4和C5中,但是应当理解, 权重矩阵W可以布置在输入矩阵I之前。在图9B中,两个向量(例如。,一个 具有两个元素W11的向量和另一个具有两个元素W21的向量)在第四列C4中对 齐,并且类似地,两个向量(例如,一个具有两个元素W12的向量和另一个具 有两个元素W22的向量)在第五列C5中对齐,因此,需要注意,在图9B中也 使用2度向量折叠。
对应权重矩阵W的排列,输入矩阵I的排列可以将输入矩阵I排列在 三列中,例如第一列C1到第三列C3。例如,输入矩阵I的第一行和第二行,每 一行都乘以权重矩阵W的第一行,可以排列在第一列C1到第三列C3的第一行 R1和第二行R2中;输入矩阵I的第二行和第三行,每一行都乘以权重矩阵W的 第二行,可以排列在第一列C1到第三列C3的第三行R1和第四行R4中。如图9B 所示,输入矩阵I的第二行在第一列C1到第三列C3的第二行R2和第三行R3中复制两次,因为输入矩阵I的第二行乘以权重矩阵I的第一行和第二行。
在卷积运算的计算过程中,用于相应两列之间乘法的结果数据可以存 储在下一个可用列中。例如,第一列C1和第四列C4之间的乘法结果数据可以存 储在第六列C6中,第二列C2和第五列C5之间的乘法结果数据可以存储在第七 列C7中,第二列C2和第四列C4之间的乘法结果数据可以存储在第八列C8中, 第三列C3和第五列C5之间的乘法结果数据可以存储在第九列C9中。为了获得 输出向量H的每个元素,第六列C6和第七列C7的同一行中的值可以相加,相 加结果数据可存储在第十列C10中,以及,第八列C8和第九列C9的同一行的值 可以相加,相加结果数据可以存储在第十一列C11中。
在本例中,由于权重矩阵W已被折叠并排列在两列C4和C5中,每 列包含权重矩阵W的两个元素,在存储于列C10和列C11的乘法结果数据对应于 权重矩阵W的折叠元素的部分(例如,W21和W22)可以移动到下一个可用列。 例如,存储在列C10和C11的第三和第四行R3和R4中的值可以移动到列C12和 C13的第一和第二行R1和R2。然后,第十列C10和第十二列C12中的值可以元素 与元素相加,相加结果数据可以存储在第十四列C14中,第十一列C11和第十三列C13中的值可以元素与元素相加,相加结果数据可以存储在第十五列C15中。 存储在第十四列C14的第一行R1中的值对应于输出矩阵H的元素H11,存储在 第十五列C15的第一行R1中的值对应于输出矩阵H的元素H12,存储在第十四 列C14的第二行R2中的值对应于输出矩阵H的元素H21,存储在第十五列C15的第二行R2中的值对应于输出矩阵H的元素H22
如上所述,权重矩阵W和输入矩阵I被布置在PIM块上,其方式为: 基于向量折叠方案,复制重复行或元素到与其他行或者元素的同一列上,而不 是复制重复行或元素到单独列中。因此,在PIM块中执行卷积操作时,可以提 高计算并行性和存储器利用率。由于卷积操作通常对每一层使用多个滤波器, 因此可以通过排列如图9B所示的输入矩阵I来加强计算并行性,以及如图9B 所示的权重矩阵W的布置,将多个滤波器布置在可用列中。
请重新参考图6,调度器600可能还包括指令生成器640。指令生成 器640可以配置为根据节点分配器620所确定的节点分配和数据布局优化器630 的数据布局,生成指令集。由指令生成器640生成的指令集还可以包括在执行 每个PIM块的操作期间要执行的操作类型以及如何、何时以及在何处移动数据。 指令发生器640被配置为生成指令集,以便目标机器(例如,图2A的PIM加速 器210)可以执行相应的神经网络模型。目标机器可以根据指令发生器640生成 的指令序列执行相应的神经网络模型。
根据本公开的实施例,可以获得在PIM体系结构上的高效神经网络 模型调度。本公开的实施例基于压缩的拓扑结构布局,可以在PIM存储块组件 上提供最佳的节点分配方法。本公开的实施例还可以基于向量折叠方案在PIM 块上提供最佳的数据布局方法。根据本公开的实施例,当在PIM体系结构上执 行神经网络模型时,可以取得数据传输的效率性。根据本公开的实施例,当在 PIM存储组件上分配节点时,使用计算图中的拓扑关系,这能够提高存储资源 利用率并减少数据移动开销。根据本公开的实施例,使用自适应向量折叠技术, 该技术利用PIM块中的列式计算并行性,从而最大化执行神经网络模型的计算 并行性。自适应向量折叠方案还能够减少神经网络模型的执行时间。根据本公 开的实施例,可以显著提高在PIM架构上执行神经网络模型的性能。
图10示出了与本公开的实施例一致的,用于在PIM组件上安排神经 网络模型实现的示例性流程图。为了说明的目的,将参照图6到图9B描述用于 在PIM存储块组件上安排神经网络模型实现的方法。
在步骤S1100,可以生成计算图。步骤S1100可以由例如图生成器 610等执行。在一些实施例中,可以编译用于机器学习模型或神经网络模型的源 代码,以生成表示源代码的计算图。在一些实施例中,可以转换用高级语言编 写的机器学习模型或神经网络模型,以生成表示机器学习模型或神经网络模型 的计算图。在一些实施例中,计算图可以从最初从源代码编译的另一个高级代 码生成。在一些实施例中,机器学习模型可以是训练过的冻结机器学习模型。 在一些实施例中,可以通过解析机器学习模型以有向非循环图(DAG)的形式生成 计算图。在一些实施例中,在步骤S1100,可以从其他组件获取计算图。在一些 实施例中,可以获取广泛使用的格式的机器学习模型,例如Pytorch、ONNX等。
图7A中所示的计算图可以作为一个例子,其包括多个节点n1至n6以及连接多个节点n1至n6中的两个节点的边。图1所示的计算图。图7A所示 的计算图,可以是某个神经网络模型的一部分。应该注意的是,图7A的计算图 仅是解释性的而不是限制性的,因此本公开的实施例可以应用于具有任意数量 的节点和边的计算图。
在步骤S1200,可以在PIM加速器上分配神经网络模型的节点(例如, 图2A中的PIM加速器210)。步骤S1200可以由例如节点分配器620等执行。 在一些实施例中,由用于神经网络模型的计算图的节点表示的任务可以被分配 到PIM加速器的PIM存储块组件(例如,图3中的存储块组件310)所包含的存 储块上。根据本公开的一些实施例,基于计算图中的节点的层信息和数据依赖 关系,计算图的每个节点可以被映射到PIM存储块组件的特定存储块上(例如, 图4中的存储块420上)。在一些实施例中,层感知算法可用于PIM加速器上的任务分配。
在一些实施例中,可以基于计算图的拓扑类型,将层编号分配给计 算图的每个节点。在一些实施例中,可以通过将输出数据提供给某个特定节点 的前一个节点的层编号增加1来确定所述特定节点的层编号。例如,当我们假 设第一节点n1在图1的如图7A所示的计算图中具有层编号1时,可以将层编 号2分配给第二节点n2,因为第一节点n1的输出数据被提供给第二节点n2。可 以将层编号3分配给第三节点n3和第四节点n4,因为第二节点n2的输出数据提 供给第三节点n3和第四节点n4。可以将层编号4分配给第五节点n5,因为具有 层编号3的第三节点n3的输出数据被提供给第五节点n5。这里,第六节点n6可 以被分配层编号5——因为具有层编号4的第五节点n5的输出数据被提供给第 六节点n6,或被分配层编号4——因为具有层编号3的第四节点n4的输出数据 被提供给第六节点n6,或者被分配层编号3——因为具有层编号2的第二节点 n2的输出数据被提供给第六节点n6。在一些实施例中,当某个节点从多个节点 接收输出数据时,可以将层编号候选中的最高层编号作为分配给该节点的层编 号。例如,第六节点n6可以在可能的层编号3、4和5中分配最高的层编号5。通过如上所述分配层编号,当在PIM存储块组件上执行计算图时,通过保持计 算图的数据关联关系可以减少数据移动开销。
根据本公开的一些实施例,可以分析多个节点的计算图、节点的层编 号、节点之间的依赖性等。例如,在分配节点时,可以考虑计算图中包含多少 层和节点,以及层编号的最高数和最低数是多少。关于可用存储块、可用存储 块的可用行数和列数、每个可用存储块的计算能力等的信息,作为PIM加速器 的硬件特性也可以考虑。图7B示出了在PIM存储块组件中用于执行图7A的神 经网络模型的节点映射的第一示例。如图7B所示,当多个存储块列和一个存储 块列中的多个存储块足以处理计算图时,计算图中的节点可以在支持内部数据 传输的方向上以层编号的顺序在存储块上分配(例如,图4中从左到右)。
在第一个例子中,具有计算图的层编号1的第一节点n1可以分配给第 一列C1中的存储块,以及,具有层编号2的第二节点n2可以分配给第二列C2中的存储块。来自第一列C1中的存储块的第一节点n1的输出数据可以在不中断 全局缓冲区的情况下,经由存储块组件中的诸如传输缓冲器、数据链路等的内 部组件传输到第二列C2中的存储块,以计算由第二节点n2表示的操作。具有层 编号3的第三和第四节点n3和n4可以被分配给第三列C3中的存储块。同样地, 如图7B所示,可以将具有层编号4的第五节点n5分配给第四列C4中的存储块,并且可以将具有层编号5的第六节点n6分配给第五列中的存储块。如图7B所示, 通过在支持内部数据传输的方向上按照层编号的顺序将计算图的节点映射到存 储块,来自每个节点的执行操作的输出数据可以被传输以用于执行后续节点的 操作而无需全局缓冲区的中断。
图7C示出了用于在PIM存储块组件中执行图7A的神经网络模型的 节点映射的第二示例。在所述第二示例中,假设图7A所示的计算图是更大的计 算图的一部分,其中第一节点n1之前的三个节点已经被分配给第一列C1到第三 列C3的各列的第一行R1中的存储块。类似于图7B中所示的第一示例,具有分 配给第一行R1和第三列C3的存储块的节点的层号的后续层号i的第一节点n1, 可以被分配给第四列C4中的存储块,具有层号i+1的第二节点n2可以被分配给 第五列C5中的存储块。
在图7C所示的第二示例中,第二节点n2的输出数据可以通过全局缓 冲区而不是PIM存储块组件中的存储块互连,从执行第二节点n2并位于第五列 C5中的存储块传输到执行第三节点n3和第四节点n4的存储块以及执行第六节点 n6的存储块。根据本公开的一些实施例,当在存储块上映射计算图的节点时, 可以减少通过全局缓冲区的数据传输开销。在一些实施例中,在将节点映射到 PIM存储块组件中的存储块上时,可以考虑将许多从节点的输出数据的数据传 输分配到最右边列中的存储块上。在一些实施例中,可以考虑最右边的列(例 如,第五列C5)中的存储块上分配的节点的输出边和最右边的第二列(例如, 第四列C4)中的存储块上分配的节点的输出边。
相对图7C的第二个示例,在图7D中示出使用全局缓冲区减少数据 传输开销的节点映射。图7D中所示的节点映射与图7C中所示的节点映射的不 同之处在于,具有层号i+1的第二节点n2被分配给第一列C1中的存储块而不是 第五列C2。在图7D中,第三到第六节点n3到n6按照从第二列C2到第四列C4的层编号的顺序被分配给存储块。在第三个示例中,全局缓冲区用于将输出数 据从存储块计算第一节点n1传输到存储块计算第二节点n2。当与图7C所示的 第二个示例进行比较时,通过全局缓冲区的数据传输开销减少,因为第一节点 n1的输出数据仅提供给第二节点n2,而第二节点n2的输出数据被提供给三个节 点n3,n4和n6
在一些实施例中,存储块上节点的重新分配取决于数据传输开销与存 储器利用率的平衡。例如,当由于节点重新分配而导致的未使用存储块的成本 大于没有节点重新分配的数据传输开销的成本时,图7D中所示的重新分配可不 执行。在一些实施例中,可以考虑来自三层或多层节点的输出边,包括要分配 给最右边列的层,而第三示例考虑了两层i和i+1的输出边,请参考图7D。
请继续参照图10,与本公开的实施例一致,在步骤S1300处,基于 对要在相应存储块上执行的操作的分析和相应操作的数据维度,可以确定在PIM 块(例如,图1中的PIM块100)中的数据布局。步骤S1300可以由例如数据布局 优化器630等执行。根据一些实施例,当在PIM块中执行操作时,可以执行PIM 块中的数据布局以提升计算并行性并最大化资源利用率。根据本公开的一些实 施例,可以优化PIM块中的数据布局以在的相应的PIM块中的计算向量矩阵乘 法类型运算。
图8A所示的向量矩阵乘法运算可以表示为等式1。为了在PIM块中 执行向量矩阵乘法运算,输入向量I和权重矩阵W的数据可以以合适的布局排 列,以进行列向向量计算。如图8B所示,对应于每个元素在乘法运算中被乘的 次数,输入向量I的每个元素可以被复制多次。因此,第一元素X1在第一列C1中从第一行R1到第四行R4复制4次;同样,第二元素X2到第四元素X4可以布 置在第二列C2到第四列C4中。对应于输入向量I的排列,权重矩阵W可以以 转置形式排列。权重矩阵W的乘以第一列C1中的第一个元素X1的元素,排列 在下一个可用列中。例如,元素W11、W12、W13和W14,它们各自乘以等式2 到5中的第一个元素X1,可以被排列在第五列C5中。类似地,权重矩阵W的 其他元素可以被安排在C6到C8列中,使得应当被乘以第二元素X2的元素W21, W22,W23,和W24可以被布置在第六列C6,应当被乘以第二元素X3的元素W31, W32,W33,和W34布置在第七列C7中,应当被乘以第三元素X4的元素W41、 W42、W43和W44布置在第七列C8中。如图8B所示,在第一示例中,基于上述 数据布局,可以通过四次向量乘法运算和三次加法运算来执行向量矩阵乘法运 算的计算。
根据本公开的一些实施例,可以执行数据布局以增加计算并行性并提 高存储器利用率。在本公开的一些实施例中,可以基于自适应向量折叠来确定 用于计算向量矩阵乘法运算的PIM块中的数据布局。在一些实施例中,可以考 虑相应存储块中的可用存储空间。
在图8C中,用于计算向量矩阵乘法运算的数据被布置在基于自适应 向量折叠的PIM块中。在图8B中,输入向量I的4个元素X1到X4被排列在 C1到C4的4列中;在图8C中,第一元素X1排列在第一列C1的第一行R1至第 四行R4中,第三元素X3排列在第一列C1的第五行R5至第八行R8中,并且, 第二元素X2排列在第二列C2的第一行R1至第四行R4中,第四元素X4排列在 第五行R5至第八行R8中。换句话说,两个向量(例如,具有四个第一元素X1的 一个向量和另一个具有四个第三元素X3的向量)在第一列C1中安放,并且类似 地,两个向量(例如,一个向量包含四个第二元素X2,另一个向量包含四个第四 元素X4)在第二列C2中对齐,因此,请注意在图8C中使用了2度向量折叠。
对应于输入向量I的排列,权重矩阵W可以被排列成使得权重矩阵 W的元素被排列在两列中,例如第三和第四列C3和C4。例如,元素W11、W12、 W13和W14(每个元素乘以等式2到5中的第一个元素X1)可以排列在第三列C3的第一行R1到第四行R4,元素W31、W32、W33和W34,(每个元素乘以第三元 素X3)可以排列在第三列C3的第五行R5到第八行R8中。元素W21、W22、W23和W24(在等式2到5中,每个元素乘以第二元素X2)可以排列在第四列C4的第 一行R1到第四行R4中,元素W41、W42、W43和W44(每个元素乘以第四元素X4) 可以排列在第四列C4的第五行R5到第八行R8中。
在图8C中,相应两列之间进行乘法的结果数据可以被存储在下一个 可用列中。在此示例中,由于输入向量I已被折叠并排列在两个列C1和C2中, 每个列包括输入向量I的两个元素,因此存储在列C7中的乘法结果数据中对应 于所述输入向量I的折叠元素的部分(例如,X3和X4),可以移动到下一个可用 列。
对于图8B的使用四个向量乘法运算的示例,当在PIM块中排列数据 时,通过使用向量折叠方案,可以使用图8C中的两个向量乘法运算来计算图8A 的向量矩阵乘法运算。图8A的向量矩阵乘法运算,采用四个向量乘法运算(例 如,图8B中的C9至C12列)和三个向量加法运算(例如,图8B中的列C13至C15), 没有图8B中的数据移动,与之相比,在图8C所示的使用向量折叠方案的第二 个例子中,向量矩阵乘法运算可以通过两个向量乘法运算(例如,图8C中的列 C5和C6),两个向量加法运算(例如,图8C中的列C7和C9),以及一个块内数据 移动(例如,图8C中的从第七列C7到第八列C8的数据移动)实现。比较图8B 所示的第一个示例和图8C中示出的第二个示例,在计算图8A的向量矩阵乘法 运算时,两度向量折叠减少了两个向量乘法运算和一个向量加法运算,但是会导 致一个块内数据移动。向量折叠方案可用于其他计算操作,其可以表示为向量 矩阵乘法操作,例如卷积操作。
参考图如图10所示,在步骤S1400处,可以基于步骤S1200确定的 节点分配和步骤S1300处的数据布局来生成指令集。指令集还可以包括在执行 每个PIM块的操作期间执行哪种操作以及如何、何时以及在何处移动数据。在 一些实施例中,可以生成指令集,以便目标机器(例如,图2A的PIM加速器210) 可以执行相应的神经网络模型。目标机器可以根据生成的指令的顺序执行相应 的神经网络模型。
可以使用以下条款进一步描述实施例:
1、一种在包含存储块组件的PIM使能设备上布置计算图的方法,包括:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储 块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储 块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合 从所述第一存储块到所述第二存储块的数据传输。
2、条款1的方法,进一步包括:
基于第一节点和第二节点之间的关联关系,为第一节点分配第一层编号, 为第二节点分配第二层编号,
其中第二层编号大于第一层编号。
3、第2条的方法,其中计算图还包括第三节点,该第三节点的输出数据用 于提供第二节点使用,并且第三层编号被分配给该节点,并且
当第一层编号大于第三层编号时,通过将第一层编号增加1来获得第二层 编号;当第三层编号大于第一层编号时,通过将第三层编号增加1获得第二层 编号。
4、条款1-3中任一项的方法,还包括:
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,所述存储块组件被配置,以支持通过由所述存储块组件的所有存储 块共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且
来自包括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边 的数目,大于来自包括第一节点且被分配给存储块第一阵列的一个或多个节点 的输出边的数目。
5、条款1-4任一项的方法,进一步包括:
基于向量折叠确定用于在第一存储块上执行第一节点的数据布局,
其中,第一存储块包括布置成多行和多列的存储单元阵列。
6、第5条的方法,其中,所述第一节点包括向量和矩阵之间的向量矩阵乘 法运算,并且
所述向量的第一元素与所述向量的第二元素布置在多个列之间的同一列中。
7、第6条的方法,其中向量的第一元素在多个列中的同一列中被多次复制。
8、一种用于在包含存储块组件的PIM使能设备上布置计算图的设备,包括:
存储一组指令集的存储器;以及
一个或多个处理器,配置为执行一组指令集以使设备执行:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储 块上;以及
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二个存 储块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合 从所述第一存储块到所述第二存储块的数据传输。
9、第8条所述的设备,其中所述一个或多个处理器被配置为执行所述指令 集,以使所述设备进一步执行:
基于第一节点和第二节点之间的关联关系,为第一节点分配第一层编号, 为第二节点分配第二层编号,
其中第二层编号大于第一层编号。
10、第9条的装置,其中,所述计算图还包括第三节点,所述第三节点的 输出数据用于提供给所述第二节点使用,并且第三层编号被分配给该节点,并 且
当第一层编号大于第三层编号时,通过将第一层编号增加1获得第二层编 号;当第三层编号大于第一层编号时,通过将第三层编号增加1来获得第二层 编号。
11、第8-10条中任一项的设备,其中所述一个或多个处理器被配置为执行 所述指令集,以使所述设备进一步执行:
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,所述存储块组件被配置,以支持通过由所述存储块组件的所有存储 块共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且,其中来自 包括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边的数目, 大于来自包括第一个节点且被分配给存储块第一阵列的一个或多个节点的输出 边的数目。
12、第8-11条中任一项的设备,其中所述一个或多个处理器被配置为执行 所述指令集,以使所述设备进一步执行:
基于向量折叠确定用于在第一存储块上执行第一节点的数据布局,
其中,第一存储块包括布置成多行和多列的存储单元阵列。
13、第12条的装置,其中,所述第一节点包括向量和矩阵之间的向量矩阵 乘法运算,并且
其中所述向量的第一元素与所述向量的第二元素布置在多个列之间的同一 列中。
14、第13条的装置,其中,所述向量的第一元素在所述多个列中的同一列 中被多次复制。
15.一种非临时性计算机可读介质,其存储一组指令集,该指令集可由计算 设备的至少一个处理器执行,以使计算设备在包含存储块组件的PIM使能设备 上执行布置计算图的方法,该方法包括:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储 块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储 块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合 从所述第一存储块到所述第二存储块的数据传输。
16、第15条的计算机可读介质,其中,所述一组指令集被所述计算设备的 至少一个处理器执行,以使所述计算设备进一步执行:
基于第一节点和第二节点之间的关联关系,为第一节点分配第一层编号, 为第二节点分配第二层编号,其中第二层编号大于第一层编号。
17、第16条的计算机可读介质,
其中,所述计算图还包括第三节点,所述第三节点的输出数据用于提供给 所述第二节点使用,并且第三层编号被分配给该节点,并且
当第一层编号大于第三层编号时,通过将第一层编号增加1获得第二层编 号;当第三层编号大于第一层编号时,通过将第三层编号增加1获得第二层编 号。
18、第15-17条中任一项的计算机可读介质,其中所述一组指令集被所述计 算设备的至少一个处理器执行,以使所述计算设备进一步执行:
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,所述存储组件被配置,以支持通过由所述存储块组件的所有存储块 共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且,其中来自包 括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边的数目,大 于来自包括第一节点且被分配给存储块第一阵列的一个或多个节点的输出边的 数目。
19、第15-18条中任一项的计算机可读介质,根据权利要求15所述的计算 机可读介质,其中,所述一组指令集被所述计算设备的至少一个处理器执行, 以使所述计算设备进一步执行:
基于向量折叠,确定用于在第一存储块上执行第一节点的数据布局,
其中,第一存储块包括布置成多行和多列的存储单元阵列。
20、第19条的计算机可读介质,其中,所述第一节点包括向量与矩阵之间 的向量矩阵乘法运算,并且
所述向量的第一元素与所述向量的第二元素布置在多个列之间的同一列中。
21、第20条的计算机可读介质,其中,所述向量的第一元素在所述多个列 中的同一列中被多次复制。
22、终端,包括:
包括存储块组件的PIM使能设备;以及
主机单元,通信耦合到所述PIM使能设备,用于在PIM使能设备上布置计 算图,所述主机单元包括:
存储一组指令集的存储器;以及
一个或多个处理器,被配置为执行所述一组指令集以使主机单元执行:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储 块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储 块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合 从所述第一存储块到所述第二存储块的数据传输。
本文的实施例包括数据库系统、方法和有形的非临时性计算机可读 介质。例如,这些方法可以由从有形的非临时性计算机可读存储介质接收指令 集的至少一个处理器执行。类似地,与本公开一致的系统可以包括至少一个处 理器和存储器,并且该存储器可以是有形的非临时性计算机可读存储介质。如 本文所使用的,有形的非临时性计算机可读存储介质是指可以存储至少一个处 理器可读的信息或数据的任何类型的物理存储器。示例包括随机存取存储器 (RAM)、只读存储器(ROM)、易失性存储器、非易失性存储器、硬盘驱动器、 光盘驱动器、DVD、闪存驱动器、磁盘、寄存器、缓存和任何其他已知的物理 存储介质。单称术语,例如“存储器”和“计算机可读存储介质”,可以额 外地指多个结构,例如多个存储器或计算机可读存储介质。如本文所述,除非 另有规定,“存储器”可以包括任何类型的计算机可读存储介质。计算机可读 存储介质可以存储用于由至少一个处理器执行的指令集,包括用于使处理器执 行与本文实施例一致的步骤或阶段的指令集。另外,一个或多个计算机可读存 储介质可用于实现计算机实现的方法。术语“非临时性计算机可读存储介质” 应理解为包括有形物品,不包括载波和瞬态信号。
如本文所用,除非另有明确说明,术语“或”包括所有可能的组合, 除非不可行。例如,如果声明数据库可以包括A或B,则除非另有明确说明或 不可行,否则数据库可以包括A,或B,或A和B。作为第二个示例,如果声 明数据库可以包括A、B或C,则除非另有明确说明或不可行,否则数据库可以 包括A,或B,或C,或A和B,或A和C,或B和C,或A、B和C。
在前述规范中,已经参照许多具体细节描述了实施例,这些细节可以 因实施而异。可以对所描述的实施例进行某些改编和修改。从本文公开的本发 明的说明书和实践考虑,其他实施例对于本领域技术人员来说是显而易见的。 本说明书和示例仅视为示例性的,并由权利要求说明本发明的真实范围和精神。 附图中所示的步骤序列仅用于说明目的,并不旨在限于任何特定的步骤序列。 因此,本领域技术人员可以理解,在实现相同方法的同时,这些步骤可以以不 同的顺序执行。

Claims (16)

1.一种在包含存储块组件的PIM使能设备上布置计算图的方法,包括:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合从所述第一存储块到所述第二存储块的数据传输;
基于第一节点和第二节点之间的依赖关系,为第一节点分配第一层编号,为第二节点分配第二层编号,其中第二层编号大于第一层编号;
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,所述存储块组件配置为支持通过由所述存储块组件的所有存储块共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且
来自包括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边的数目,大于来自包括第一节点且被分配给存储块第一阵列的一个或多个节点的输出边的数目。
2.根据权利要求1所述的方法,其中,所述计算图还包括第三节点,所述第三节点的输出数据用于提供给所述第二节点使用,第三层编号被分配给该节点,并且
当第一层编号大于第三层编号时,通过将第一层编号增加1获得第二层编号;当第三层编号大于第一层编号时,通过将第三层编号增加1获得第二层编号。
3.根据权利要求1所述的方法,进一步包括:
基于向量折叠,确定用于在第一存储块上执行第一节点的数据布局,
其中,第一存储块包括布置成多行和多列的存储单元阵列。
4.根据权利要求3所述的方法,其中所述第一节点包括向量与矩阵之间的向量矩阵乘法运算,并且
其中,所述向量的第一元素与所述向量的第二元素布置在多个列之间的同一列中。
5.根据权利要求4所述的方法,其中所述向量的第一元素在多个列中的同一列中被多次复制。
6.一种用于在包含存储块组件的PIM使能设备上布置计算图的设备,包括:
存储一组指令集的存储器;以及
一个或多个处理器,配置为执行所述一组指令集以使设备执行:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合从所述第一存储块到所述第二存储块的数据传输;
其中所述一个或多个处理器被配置为执行所述指令集,以使所述设备进一步执行:基于第一节点和第二节点之间的依赖关系,为第一节点分配第一层编号,为第二节点分配第二层编号,其中第二层编号大于第一层编号;
所述一个或多个处理器被配置为执行所述指令集,以使所述设备进一步执行:
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,存储组件被配置,以支持通过由所述存储块组件的所有存储块共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且,其中来自包括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边的数目,大于来自包括第一节点且被分配给存储块第一阵列的一个或多个节点的输出边的数目。
7.根据权利要求6所述的设备,其中,所述计算图还包括第三节点,所述第三节点的输出数据用于提供给所述第二节点使用,第三层编号被分配给该节点,并且
当第一层编号大于第三层编号时,通过将第一层编号增加1获得第二层编号;当第三层编号大于第一层编号时,通过将第三层编号增加1获得第二层编号。
8.根据权利要求6所述的设备,其中所述一个或多个处理器被配置为执行所述指令集,以使所述设备进一步执行:
基于向量折叠,确定用于在第一存储块上执行第一节点的数据布局,
其中,第一存储块包括布置成多行和多列的存储单元阵列。
9.根据权利要求8所述的设备,其中,所述第一节点包括向量与矩阵之间的向量矩阵乘法运算,并且
其中所述向量的第一元素与所述向量的第二元素布置在多个列之间的同一列中。
10.根据权利要求9所述的设备,其中,所述向量的第一元素在所述多个列中的同一列中被多次复制。
11.一种非临时性计算机可读介质,其存储一组指令集,该指令集可由计算设备的至少一个处理器执行,以使计算设备在包含存储块组件的PIM使能设备上执行布置计算图的方法,该方法包括:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合从所述第一存储块到所述第二存储块的数据传输;
其中,所述一组指令集被所述计算设备的至少一个处理器执行,以使所述计算设备进一步执行:
基于第一节点和第二节点之间的依赖关系,为第一节点分配第一层编号,为第二节点分配第二层编号,其中第二层编号大于第一层编号;
其中所述一组指令集被所述计算设备的至少一个处理器执行,以使所述计算设备进一步执行:
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,存储组件配置为支持通过由所述存储块组件的所有存储块共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且,其中来自包括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边的数目,大于来自包括第一节点且被分配给存储块第一阵列的一个或多个节点的输出边的数目。
12.根据权利要求11所述的计算机可读介质,其中,所述计算图还包括第三节点,所述第三节点的输出数据用于提供给所述第二节点使用,第三层编号被分配给该节点,并且
当第一层编号大于第三层编号时,通过将第一层编号增加1获得第二层编号;当第三层编号大于第一层编号时,通过将第三层编号增加1获得第二层编号。
13.根据权利要求11所述的计算机可读介质,其中,所述一组指令集被所述计算设备的至少一个处理器可执行,以使所述计算设备进一步执行:
基于向量折叠,确定用于在第一存储块上执行第一节点的数据布局;
其中,第一存储块包括布置成多行和多列的存储单元阵列。
14.权利要求13所述的计算机可读介质,其中,所述第一节点包括向量与矩阵之间的向量矩阵乘法运算,并且
所述向量的第一元素与所述向量的第二元素布置在多个列之间的同一列中。
15.根据权利要求14所述的计算机可读介质,其中,所述向量的第一元素在所述多个列中的同一列中被多次复制。
16.一种终端,包括:
包括存储块组件的PIM使能设备;以及
主机单元,通信耦合到所述PIM使能设备,用于在PIM使能设备上布置计算图,所述主机单元包括:
存储一组指令集的存储器;以及
一个或多个处理器,被配置为执行所述一组指令集以使主机单元执行:
将计算图的第一节点分配到存储块组件中的存储块的第一阵列的第一存储块上;以及,
将计算图的第二节点分配到存储块组件中的存储块的第二阵列的第二存储块上,其中,所述第一节点的输出数据用于提供给所述第二节点使用;
其中,所述存储块组件配置为支持经由所述存储块组件中的内部数据耦合从所述第一存储块到所述第二存储块的数据传输;
基于第一节点和第二节点之间的依赖关系,为第一节点分配第一层编号,为第二节点分配第二层编号,其中第二层编号大于第一层编号;
将第二节点重新分配到存储块组件中的存储块的第三阵列的第三存储块上;
其中,所述存储块组件配置为支持通过由所述存储块组件的所有存储块共享的全局缓冲区从第一存储块到第三存储块的数据传输,并且
来自包括第二节点且被分配给存储块第二阵列的一个或多个节点的输出边的数目,大于来自包括第一节点且被分配给存储块第一阵列的一个或多个节点的输出边的数目。
CN202110050930.8A 2020-01-17 2021-01-14 执行神经网络模型的pim架构的数据布局优化 Active CN113139648B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/746,419 2020-01-17
US16/746,419 US11669443B2 (en) 2020-01-17 2020-01-17 Data layout optimization on processing in memory architecture for executing neural network model

Publications (2)

Publication Number Publication Date
CN113139648A CN113139648A (zh) 2021-07-20
CN113139648B true CN113139648B (zh) 2024-04-05

Family

ID=76810439

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110050930.8A Active CN113139648B (zh) 2020-01-17 2021-01-14 执行神经网络模型的pim架构的数据布局优化

Country Status (2)

Country Link
US (1) US11669443B2 (zh)
CN (1) CN113139648B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11429310B2 (en) * 2020-03-06 2022-08-30 Samsung Electronics Co., Ltd. Adjustable function-in-memory computation system
US11948053B2 (en) * 2020-09-18 2024-04-02 Megh Computing, Inc. Inferencer graph for implementing machine learning model topology
US11743327B2 (en) * 2021-02-05 2023-08-29 International Business Machines Corporation Topological ordering of blockchain associated proposals
US11868657B2 (en) * 2021-02-08 2024-01-09 Samsung Electronics Co., Ltd. Memory controller, method of operating the memory controller, and electronic device including the memory controller
US11645005B2 (en) * 2021-02-26 2023-05-09 PetaIO Inc. Near-memory computing systems and methods
CN115469800A (zh) * 2021-06-10 2022-12-13 三星电子株式会社 数据处理系统以及用于访问异构存储器系统的方法
CN115860079B (zh) * 2023-01-30 2023-05-12 深圳市九天睿芯科技有限公司 神经网络加速装置、方法、芯片、电子设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110352433A (zh) * 2017-02-28 2019-10-18 微软技术许可有限责任公司 用于神经网络处理的具有矩阵-向量相乘区块的硬件节点

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11126657B2 (en) * 2018-06-11 2021-09-21 Alibaba Group Holding Limited Efficient in-memory representation of computation graph for fast serialization and comparison
US10483978B1 (en) * 2018-10-16 2019-11-19 Micron Technology, Inc. Memory device processing
KR20200066953A (ko) * 2018-12-03 2020-06-11 삼성전자주식회사 Pim을 채용하는 반도체 메모리 장치 및 그 동작 방법
KR20210045224A (ko) * 2019-10-16 2021-04-26 삼성전자주식회사 데이터를 처리하는 방법 및 장치
KR20210092078A (ko) * 2020-01-15 2021-07-23 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 그 동작방법, 그리고 메모리 장치를 제어하는 메모리 컨트롤러의 동작방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110352433A (zh) * 2017-02-28 2019-10-18 微软技术许可有限责任公司 用于神经网络处理的具有矩阵-向量相乘区块的硬件节点

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
PPAC: A Versatile In-Memory Accelerator for Matrix-Vector-Product-Like Operations;Castañeda, O等;《30th IEEE International Conference on Application-Specific Systems, Architectures and Processors (ASAP)》;20191231;全文 *
二维矩阵卷积在向量处理器中的设计与实现;张军阳;郭阳;;国防科技大学学报;20180628(03);全文 *

Also Published As

Publication number Publication date
US20210224185A1 (en) 2021-07-22
CN113139648A (zh) 2021-07-20
US11669443B2 (en) 2023-06-06

Similar Documents

Publication Publication Date Title
CN113139648B (zh) 执行神经网络模型的pim架构的数据布局优化
US11714780B2 (en) Compiler flow logic for reconfigurable architectures
CN113748399B (zh) 在异构计算资源上调度计算图的方法、装置及可读介质
US20190130270A1 (en) Tensor manipulation within a reconfigurable fabric using pointers
US20210319289A1 (en) Frequency domain neural network accelerator
US11921814B2 (en) Method and device for matrix multiplication optimization using vector registers
US20220076095A1 (en) Multi-level sparse neural networks with dynamic rerouting
US20210303977A1 (en) Apparatuses and methods for approximating non-linear function
US20230004365A1 (en) Multistage compiler architecture
US11645057B2 (en) Systems and methods for memory layout determination and conflict resolution
CN112906877A (zh) 用于执行神经网络模型的存储器架构中的数据布局有意识处理
WO2022253075A1 (zh) 一种编译方法及相关装置
CN115668125A (zh) 存储器处理单元架构映射技术
CN113077042A (zh) 卷积神经网络的数据重用与高效处理方法
Shahsavani et al. Efficient compilation and mapping of fixed function combinational logic onto digital signal processors targeting neural network inference and utilizing high-level synthesis
WO2021061172A1 (en) System and method of executing neural networks
US11809849B1 (en) Global modulo allocation in neural network compilation
US11836082B2 (en) Neural processing device and load/store method of neural processing device
US20230334304A1 (en) Neural processing device
US20230315336A1 (en) Neural processing device and method for converting data thereof
US20210209462A1 (en) Method and system for processing a neural network
US11934876B1 (en) Compiler-driven storage allocation of runtime values
US20230401480A1 (en) Hardware acceleration of machine learning designs
US11775268B1 (en) Color selection schemes for storage allocation
US20230325464A1 (en) Hpc framework for accelerating sparse cholesky factorization on fpgas

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