CN117075902A - 基于张量的编译方法、设备及其计算机可读存储介质 - Google Patents

基于张量的编译方法、设备及其计算机可读存储介质 Download PDF

Info

Publication number
CN117075902A
CN117075902A CN202210501826.0A CN202210501826A CN117075902A CN 117075902 A CN117075902 A CN 117075902A CN 202210501826 A CN202210501826 A CN 202210501826A CN 117075902 A CN117075902 A CN 117075902A
Authority
CN
China
Prior art keywords
tensor
register
statement
data
data structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210501826.0A
Other languages
English (en)
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Cambricon Information Technology Co Ltd
Original Assignee
Shanghai Cambricon Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Cambricon Information Technology Co Ltd filed Critical Shanghai Cambricon Information Technology Co Ltd
Priority to CN202210501826.0A priority Critical patent/CN117075902A/zh
Publication of CN117075902A publication Critical patent/CN117075902A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本公开涉及一种基于张量的编译方法及其相关产品,其中该相关产品包括设备和计算机可读存储介质。该设备可以包括在组合处理装置的计算处理装置中,该计算处理装置可以包括一个或多个数据处理装置。前述的组合处理装置还可以包括接口装置和其他处理装置。所述计算处理装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与设备和其他处理装置连接,用于存储该设备和其他处理装置的数据。通过本公开的方案,可以优化针对于张量的编译操作,显著减少程序代码量。

Description

基于张量的编译方法、设备及其计算机可读存储介质
技术领域
本公开一般地涉及程序编译领域。更具体地,本公开涉及一种基于张量的编译方法、用于执行前述方法的设备和计算机可读存储介质。
背景技术
常量传播是广泛应用于编译操作的高级中间表达(“IntermediateRepresentation”,IR)阶段优化方法之一。通过该常量传播,可以解决在运行时静态检测代码表达式是否总是求值为唯一常数的问题。如果在程序调用过程时知道哪些变量将具有常量值以及这些值将是什么,则编译器可以在编译期间简化常数。就当前的应用形式来说,常量传播算法通常有简单常量传播(“Simple Constant Propagation”)、稀疏简单常量传播(“Sparse Simple Constant Propagation”)、条件常量传播(“Condition ConstantPropagation”)和稀疏条件常量传播(“Sparse Condition Constant Propagation”)等算法。
尽管上述的常量传播方案对于编译操作具有优化的作用,但这些传统编译技术是应用于传统编程语言和编程模型的(如C或C++语言等),其仅适用于标量的处理。换句话说,现有的编译技术无法应用于张量的处理。鉴于此,如何实现张量在中间表达中的传播成为亟需解决的技术问题。
发明内容
鉴于上述背景技术部分所提及的技术问题,本公开提出一种用于针对于张量的编译方法。利用本公开的方案,可以在编译的中间表达阶段实现张量的局部传播,也即实现张量在中间表达内的每个基本块(“basic block,BB”)范围内的传播。由此,可以有效减少编译期间的编译处理复杂度并实现对编译操作的显著优化。为此,本公开在如下的多个方面中提供解决用于编译期间的张量传播的方案。
在第一方面中,本公开提供了一种基于张量的编译方法,包括:针对编译操作的中间表达阶段的每个基本块,创建和维护对应的第一数据结构,其中所述第一数据结构包括寄存器编号以及与张量数据属性关联的属性标识;以及基于所述第一数据结构,遍历每个基本块中的语句,以便处理使用张量寄存器的使用语句和/或创建张量寄存器的创建语句。
在第二方面中,本公开提供了一种基于张量的编译的设备,包括:处理器;以及存储器,其存储有用于对张量进行编译的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现上文的方法及其下文将讨论到的多个实施例。
在第三方面中,本公开提供了一种计算机可读存储介质,其存储有基于张量进行编译的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现上文的方法及其下文将讨论到的多个实施例。
通过本公开如上多个方面中所提供的编译方案,特别是通过执行针对于张量的一个或多个创建语句,可以在编译的中间表达阶段创建与张量相关的目标张量寄存器,即而可以通过对目标张量寄存器中数据结构的读取和操作来实现张量数据在编译的中间表达阶段内各个基本块范围内的传播。由此,编译器可以直接对目标张量寄存器所关联的张量进行操作而不需要在代码执行时才操作,从而优化代码和编译操作并适配涉及张量操作的编程模型。进一步,本公开跳过了将参数存储到寄存器中,待使用时再从寄存器中读取参数的步骤,基于本公开的创建语句,可以在编译过程中消除多余的指令,特别是与张量迁移相关的指令数量。基于此,本公开的方案可以极大的减少冗余指令的产生,从而提高用户程序的整体性能。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1是示出根据本公开实施例的板卡的结构图;
图2是示出根据本公开实施例的组合处理装置的结构图;
图3是示出根据本公开实施例的计算装置的内部结构示意图;
图4是示出根据本公开实施例的处理器核的内部结构示意图;
图5是示出根据本公开实施例的不同集群的处理器核间的数据写入过程示意图;
图6是示出根据本公开实施例的数据流编程的软硬件架构的结构示意图;
图7是示出根据本公开实施例的基于张量的编译方法的简化流程图;
图8是示出根据本公开实施例的张量寄存器的示意图;以及
图9是示出根据本公开实施例的编译方法的示例性详细流程图。
具体实施方式
下面将结合本公开实施方式中的附图,对本公开实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本公开一部分实施方式,而不是全部的实施方式。基于本公开中的实施方式,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本公开保护的范围。
应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施方式的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
下面结合附图来详细描述本公开的具体实施方式。
图1示出本披露实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和大量的计算能力。
芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或WIFI接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(Micro Controller Unit,MCU)。
图2是示出此实施例的芯片101中的组合处理装置20的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和DRAM 204。
计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
DRAM 204用以存储待处理的数据,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。在一个或多个实施场景中,本申请的内存管理方案可以应用于该DDR的管理和维护,从而实现对事件的重用或回收操作。在该情形中,本申请的板卡可以视为人工智能计算系统中的设备侧。
图3示出了计算装置201的内部结构示意图。计算装置201用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,图中的计算装置201采用多核分层结构设计,计算装置201作为一个片上系统,其包括多个集群(cluster),每个集群又包括多个处理器核。换言之,计算装置201是以片上系统-集群-处理器核的层次所构成的。
以片上系统的层级来看,如图3所示,计算装置201包括外部存储控制器301、外设通信模块302、片上互联模块303、同步模块304以及多个集群305。
外部存储控制器301可以有多个,在图中示例性地展示2个,其用以响应处理器核发出的访问请求,访问外部存储设备,例如图2中的DRAM 204,从而自片外读取数据或是将数据写入。外设通信模块302用以通过接口装置202接收来自处理装置203的控制信号,启动计算装置201执行任务。片上互联模块303将外部存储控制器301、外设通信模块302及多个集群305连接起来,用以在各个模块间传输数据和控制信号。同步模块304是一种全局同步屏障控制器(global barrier controller,GBC),用以协调各集群的工作进度,确保信息的同步。多个集群305是计算装置201的计算核心,在图中示例性地展示4个,随着硬件的发展,本披露的计算装置201还可以包括8个、16个、64个、甚至更多的集群305。
以集群的层级来看,如图3所示,每个集群305包括多个处理器核(IPU core)306及一个存储核(MEM core)307。
处理器核306在图中示例性地展示4个,本披露不限制处理器核306的数量。其内部架构如图4所示。每个处理器核306包括三大模块:控制模块41、运算模块42及存储模块43。
控制模块41用以协调并控制运算模块42和存储模块43的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,IFU)411及指令译码单元(instructiondecode unit,IDU)412。取指单元411用以获取来自处理装置203的指令,指令译码单元412则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块42和存储模块43。
运算模块42包括向量运算单元421及矩阵运算单元422。向量运算单元421用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元422负责深度学习算法的核心计算,即矩阵乘及卷积。
存储模块43用来存储或搬运相关数据,包括神经元存储单元(neuron RAM,NRAM)431、权值存储单元(weight RAM,WRAM)432、输入/输出直接内存访问模块(input/outputdirect memory access,IODMA)433、搬运直接内存访问模块(move direct memoryaccess,MVDMA)434。NRAM 431用以存储供处理器核306计算的输入、输出数据及中间结果;WRAM 432则用以存储深度学习网络的权值;IODMA 433通过广播总线309控制NRAM 431/WRAM 432与DRAM 204的访存;MVDMA 434则用以控制NRAM 431/WRAM 432与SRAM 308的访存。
回到图3,存储核307主要用以存储和通信,即存储处理器核306间的共享数据或中间结果、以及执行集群305与DRAM 204之间的通信、集群305间彼此的通信、处理器核306间彼此的通信等。在其他实施例中,存储核307具有标量运算的能力,用以执行标量运算。
存储核307包括共享存储单元(SRAM)308、广播总线309、集群直接内存访问模块(cluster direct memory access,CDMA)310及全局直接内存访问模块(global directmemory access,GDMA)311。SRAM 308承担高性能数据中转站的角色,在同一个集群305内不同处理器核306之间所复用的数据不需要通过处理器核306各自向DRAM 204获得,而是经SRAM 308在处理器核306间中转,存储核307只需要将复用的数据从SRAM 308迅速分发给多个处理器核306即可,以提高核间通讯效率,亦大大减少片上片外的输入/输出访问。
广播总线309、CDMA 310及GDMA 311则分别用来执行处理器核306间的通信、集群305间的通信和集群305与DRAM 204的数据传输。以下将分别说明。
广播总线309用以完成集群305内各处理器核306间的高速通信,此实施例的广播总线309支持核间通信方式包括单播、多播与广播。单播是指点对点(即单一处理器核至单一处理器核)的数据传输,多播是将一份数据从SRAM 308传输到特定几个处理器核306的通信方式,而广播则是将一份数据从SRAM 308传输到所有处理器核306的通信方式,属于多播的一种特例。
CDMA 310用以控制在同一个计算装置201内不同集群305间的SRAM 308的访存。图5示出当一个处理器核欲将数据写入至另一个集群的处理器核时的示意图,以说明CDMA310的工作原理。在此应用场景中,同一个计算装置包括多个集群,为方便说明,图中仅展示集群0与集群1,集群0与集群1分别包括多个处理器核,同样为了说明方便,图中的集群0仅展示处理器核0,集群1仅展示处理器核1。处理器核0欲将数据写入至处理器核1。
首先,处理器核0发送单播写请求将数据写入本地的SRAM 0中,CDMA 0作为主(master)端,CDMA 1作为从(slave)端,主端向从端推送写请求,即主端发送写地址AW和写数据W,将数据传送到集群1的SRAM 1中,接着从端发送写响应B作为回应,最后集群1的处理器核1发送单播读请求将数据从SRAM 1中读取出来。
回到图3,GDMA 311与外部存储控制器301协同,用以控制集群305的SRAM 308到DRAM 204的访存,或是将数据自DRAM 204读取至SRAM 308中。从前述可知,DRAM 204与NRAM431或WRAM 432间的通信可以经由2个渠道来实现。第一个渠道是通过IODAM 433直接联系DRAM 204与NRAM 431或WRAM 432;第二个渠道是先经由GDMA 311使得数据在DRAM 204与SRAM 308间传输,再经过MVDMA 434使得数据在SRAM 308与NRAM 431或WRAM 432间传输。虽然表面上看来第二个渠道需要更多的元件参与,数据流较长,但实际上在部分实施例中,第二个渠道的带宽远大于第一个渠道,因此DRAM 204与NRAM 431或WRAM 432间的通信通过第二个渠道可能更有效率。本披露的实施例可根据本身硬件条件选择数据传输渠道。
在其他实施例中,GDMA 311的功能和IODMA 433的功能可以整合在同一部件中。本披露为了方便描述,将GDMA 311和IODMA 433视为不同部件,对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与本披露类似,即属于本披露的保护范围。进一步地,GDMA 311的功能、IODMA 433的功能、CDMA 310的功能、MVDMA 434的功能亦可以由同一部件来实现,同样地,只要其实现的功能以及达到的技术效果与本披露类似,均属于本披露的保护范围。
以上结合图1-图5对本公开的硬件架构及其内部结构进行了详细的描述。可以理解的是上述描述仅仅是示例性的而非限制性的。根据不同的应用场景和硬件规格,本领域技术人员也可以对本公开的板卡(或者说人工智能设备)及其内部结构进行改变,而这些改变依然落入本公开的保护范围内。除了图1-图5所示出的硬件架构,本公开的方案还涉及软硬件架构,下面将对其进行描述。
图6示出本公开一实施例中数据流编程的软硬件架构的设计图。从图中所示可以看出,此实施例中的软硬件架构可以包括AI处理器601、驱动及操作系统602、编译器及编译语言603、库604、框架层605和应用层606。可以理解的是,这里的软硬件架构可以应用于本申请的人工智能计算系统中,从而在对张量寄存器的编译过程中实现对张量的局部传播,也即每个基本块内的传播。
具体来说,AI处理器601(其例如可以包括在上文结合附图所描述的板卡中)在硬件设计上同时考虑运算优化和数据搬运优化。为此,其采用定制化的运算单元来加速运算,并且使用片上存储来加速数据搬运,从而获得极高的性能和能效比。另外,为了支持各种算法优化,AI处理器601可以具有定制化的运算单元和指令集,其中指令集可以提供不同粒度的运算指令(标量、向量和/或矩阵)。进一步,当考虑算法访存特征、硬件成本、验证难度等多方面的因素,则可以采用片上存储的方式,并且优化数据搬运。在实际操作中,本公开的AI处理器可以实现超出主流GPU(图形处理单元)几十倍以上的速度。
驱动及操作系统602主要负责实现任务在AI处理器601上的调度。该调度操作例如可以实现根据任务优先级进行调度、多设备之间的通信及同步等。对于编译后的程序,其可以通过操作系统和驱动实现待实施的任务在特定处理器上的调度执行,包括但不限于如下的操作:分配、释放设备内存、实现设备之间数据传输、维护任务队列,以及根据优先级调度任务,实现多设备间的同步和协作。
编译器及编译语言603可以是针对AI处理器601的指令集研发的一套汇编语言。在应用中,其可以将面向AI处理器601开发的深度学习算子翻译成处理器指令组合,以便于调用AI处理器601,从而高效地使用该AI处理器601。根据本公开的方案,可以利用编译器执行编译的中间表达阶段来优化编译,以支持张量在每个基本块范围内的局部创建和传播,从而显著提升编译的效率并优化代码。
库604可以包括运行时库614和机器学习库624。在一个实施场景中,前述库604可以使用AI处理器601的指令集并根据AI处理器601的指令集进行部分优化,以提高算子的运行速度。运行时库614可以是针对AI处理器601专门开发的一套高性能算子库,并且其可以用于完成通用处理器和人工智能处理器之间的交互。进一步,该运行时库614还可以提供一套面向人工智能处理器的接口。对于机器学习库624,其可以用于在人工智能处理器上加速各种机器学习或者深度学习算法。具体地,该机器学习库624可以提供一套高效、通用、灵活且可扩展的编程接口,其上层的机器学习应用可以直接采用各种编程框架(例如pytorch、TensorFlow、Caffe、MXNet等)的编程接口,也可以使用机器学习库624提供的接口来直接编程。另外,本公开的机器学习库624可以方便硬件平台的调用,而运行时库614可以实现一些基础的常用算子,如卷积、池化等各种操作。
框架层605可以增加对面向AI处理器开发的算子的封装,并且主要是对运行时库614的算子的封装。除此之外,框架层605还可以修改相关的任务调度或内存管理等部分。在一个应用场景中,框架层605可以采用TensorFlow等框架的架构。
图7是示出根据本公开实施例的基于张量的编译方法700的简化流程图。如前所述,这里的编译方法可以由计算设备来执行。在主从异构架构的人工智能系统中,此处的编译方法可以由主机侧来执行。
如图7中所示,在步骤S702处,针对编译操作的中间表达阶段的每个基本块,创建和维护对应的第一数据结构。在一个实施例中,此处的第一数据结构可以包括寄存器编号以及与张量数据属性关联的属性标识。作为一个具体的示例,该第一数据结构可以表达为TMap<UINT,UINT>trno2tiid的形式,该数据结构的键值(“key-value”)分别是张量寄存器编号(即前述的寄存器编号)和tensor_info_id(即前述的属性标识),从而可以用于记录该张量寄存器(“TR”)被创建时对应的tensor_info_id信息。进一步,在基本块中的一个或多个创建语句和/或使用语句中存在多个相同的属性标识时,表示该属性标识对应的张量数据信息在基本块内被多次使用和传播。关于张量数据信息的介绍参见下文中具体介绍。作为一个应用示例,本公开的第一数据结构可以在本公开的算法开始遍历每个基本块之前进行创建并且初始化,而在算法结束每个基本块的遍历后删除。通过维护第一数据结构,可以为一个或多个使用语句或创建语句建立联系,从而实现张量数据在基本块内的传播。
在一个实施例中,此处的张量局部传播与中间表达阶段的每个基本块相关。如前所述,在本公开的上下文中,中间表达(或者称中间代码)可以按基本块来划分。具体地,每个基本块是程序中最大限度顺序执行的语句序列并且其仅有一个入口和出口,其中入口是其第一个语句,而出口是其最后一个语句。每个基本块中包括一个或多个创建语句和/或使用语句,基于此,本公开的张量局部传播也即是在中间代码的每个基本块的范围内的一个或多个创建和/或使用语句间进行张量的传播。
在本公开的上下文中,上文的寄存器编号是与张量寄存器关联并且起到标识张量寄存器的作用,并且张量数据属性关联的属性标识用于标识张量寄存器的信息属性,该张量数据属性关联的属性标识与寄存器的信息属性为一一对应关系。根据不同的人工智能系统硬件架构,张量接口单元(Tensor Interface Unit,TIU)可以包含例如32~46个通用的张量寄存器(TensorRegister,TR)。这里,每个TR代表一个被映射到例如随机访问存储器(RAM)中的三维张量。该三维张量实际存储于内存空间中例如RAM空间内,并且由TR中包含的物理地址指定。为了便于理解,下面将结合图8对本公开的张量寄存器做详细介绍。
图8是示出根据本公开实施例的张量寄存器的示意图。如图8中所示,该TR中包括有效标识位(Active Flag)和前述的张量数据属性(TensorInfo),其中张量数据属性总体包括张量的地址信息和维度信息(Dim Info)。具体地,该地址信息可以是张量的起始物理地址(Base Address),维度信息可以包括张量数据的各维度大小(Dim Size)、各维度的起始位置(Dim Offset)和各维度间的物理地址间隔(Dim Stride),其中各项具有如下的示例性含义:
Base Address:TR的起始物理地址,49位(包括off-chip的标志位,该标志位用于指示数据位于片上系统还是片外系统)。
Dim Offset:每一维的起始位置,其例如可以包括Dim0 Offset(维度0的起始位置)、Dim1 Offset(维度1的起始位置)、Dim2 Offset(维度2的起始位置),其中最低维可以为32位,而其它维可以为16位。
Dim Size:每一维的大小,其例如可以包括Dim0 Size(维度0的大小)、Dim1 Size(维度1的大小)和Dim2 size(维度2的大小),其中最低维可以为32位,而其它维可以为16位。
Dim Stride:除最高维(本例中的Dim0)外每一维的物理地址间隔,其例如可以包括Dim1 stride(维度1的物理地址间隔)、Dim2 stride(维度2的物理地址间隔),其中最低维可以为32位,其它维可以为16位。
基于上述的张量数据属性(TensorInfo),在一个可选的实施例中,本公开提出设置用于表征张量寄存器的第二数据结构,以用于配合前述的第一数据结构的使用来实现编译中的张量在基本块内的张量局部传播。作为示例,该第二数据结构可以包括与张量数据属性关联的张量寄存器参数和属性标识。可选地,该第二数据结构还可以包括参数有效位。根据本公开的实施方式,与张量数据属性关联的张量寄存器参数可以指代张量的地址信息和维度信息相关的参数,包括用于指代张量数据的起始物理地址(或称基地址,BaseAddress)、各个维度的大小(dim_size)、偏移(dim_offset)和步长(dim_stride)。在额外设置有参数有效位的场景中,参数有效位(valid)可以用于指示前述各个参数是否有效。进一步,属性标识(“tensor_info_id”)可以起到对该张量数据进行标识的作用。举例来说,张量寄存器参数和参数有效位(以“*_valid”表示)可以如下来表示:
1m_base_addr(IR*),bool m_base_addr_valid(IR,一种指令的中间表达)
2m_dim0_size(OpndVal),bool m_dim0_size_valid(OpndVal,参数表示)
3m_dim1_size(OpndVal),bool m_dim1_size_valid
4m_dim2_size(OpndVal),bool m_dim2_size_valid
5m_dim0_offset(OpndVal),bool m_dim0_offset_valid
6m_dim1_offset(OpndVal),bool m_dim1_offset_valid
7m_dim2_offset(OpndVal),bool m_dim2_offset_valid
8m_dim0_stride(OpndVal),bool m_dim0_stride_valid
9m_dim1_stride(OpndVal),bool m_dim1_stride_valid
基于上述的第二数据结构可以进一步构建数据结构Vector<TensorInfo*>m_infos,其用于记录所创建的TensorInfo,其中数据结构的m_infos内每个TensorInfo的下标可以表示为tensor_info_id。基于这样的数据结构,可以将对TensorInfo的直接读写转换成通过tensor_info_id进行操作。通过数据结构的设置,本公开的方案可以有效地表达张量数据的数据属性,并且方便张量数据的定位,从而也便于中间表达阶段各个基本块内的张量局部传播。需要注意的是本公开张量数据属性的属性标识与张量数据属性的对应关系不限于以上述第二数据结构的形式进行存储,而是还可以字典、队列等其他形式来进行存储,本公开对此不做任何限制。
上文结合图8对本公开的张量寄存器及其相关数据结构进行了详细地描述。现在返回图7所示流程,在步骤S704处,基于上文所提到的第一数据结构,遍历每个基本块中的语句,以便处理使用张量寄存器的使用语句和/或创建张量寄存器的创建语句。
在一个实施例中,本公开的代码中间表达阶段的基本块中包括基于张量的使用语句,该使用语句可以基于张量数据属性的属性标识来确定执行运算所需的张量寄存器,从而借助于该使用语句来使用创建的张量寄存器,由此执行基本块内不同张量寄存器间的张量运算(例如张量的加减法运算等)。作为一个实施方式,使用TR的使用语句可以表示为usetr。
类似地,在一个实施例中,本公开的代码中间表达阶段的基本块中可以包括基于张量的一个或多个相同和/或不同的创建语句。根据不同的应用场景,本公开的不同类型的创建语句可以用于在基本块内以不同方式创建出保存张量数据属性的张量寄存器。例如,创建语句可以根据给定的张量数据属性来创建出对应的张量寄存器。又例如,创建语句可以根据给定的张量数据属性并且结合源张量寄存器的张量数据属性来创建出一个目标张量寄存器。关于更多不同的创建语句,将在后文进一步具体描述。
通过上述图7所示出的基于张量的编译方法,特别是通过处理针对于张量的一个或多个创建语句或使用语句,可以在编译的中间表达阶段创建或使用与张量相关的目标张量寄存器。基于此,本公开的编译方案可以通过对目标张量寄存器中数据结构的读取操作来实现在编译阶段对张量数据在中间表达内的基本块范围内的传播,也即本公开所称的张量局部传播。由此,相对于现有技术无法支持张量的数据传播,本公开的编译方案可以直接在基本块的范围内对目标张量寄存器所关联的张量进行操作,而不需要在代码运行时才执行对应的操作,从而优化代码和编译操作并适配涉及张量操作的编程模型。进一步,相对于传统的将参数首先存储到某个或某些中间寄存器中,并且待使用时再从这些寄存器中读取参数的操作来说,本公开的方案借助于数据结构的巧妙应用,从而可以直接读取所需的参数而无需再执行前述的先存储后读取操作。特别地,基于数据结构的使用和多个创建语句或使用语句的设置,本公开的编译方案可以在编译过程中消除多余的指令,特别是与张量迁移相关的指令数量。由此,本公开的方案可以极大的减少冗余指令的产生,从而提高用户程序的整体性能。
在上述方法700的一个实施例中,其中遍历每个基本块中的语句以便处理所述使用语句可以包括判断遍历到的当前语句是否是使用所述张量寄存器的使用语句。响应于遍历到的当前语句是使用语句,则获取使用语句中的张量寄存器参数,由此可以根据张量寄存器参数指示的寄存器编号从第一数据结构中获取对应的属性标识,以执行该使用语句。在一个场景中,前述的获取可以是遍历一个基本块内的所有语句,并且对于每个语句,判断其是否使用了TR。对于判断当前的语句使用了TR(也即其是使用语句),则可以利用递归函数来递归遍历获取该语句中的每一个张量寄存器参数,该寄存器参数指的是该使用语句中使用到的一个或多个寄存器。进一步可以根据张量寄存器参数指示的寄存器编号从第一数据结构中获取对应的属性标识,以执行该使用语句。在一个场景中,还可以选择将属性标识(“tensor_info_id”)与所述张量寄存器参数的属性标识项(“AttachInfo-1”)关联,从而可以在使用TR的过程中仅通过属性标识即可找到张量寄存器参数的属性标识项,以便获得张量的数据属性。其中,根据张量寄存器参数指示的寄存器编号能够从第一数据结构中获取对应的属性标识,表示该寄存器参数指示的寄存器编号对应的张量数据属性在该创建语句被执行前已经存储在该第一数据结构中了,并且该创建语句所需的寄存器参数与该创建语句在同一基本块中,从而可以通过第一数据结构实现对该寄存器参数(张量)在基本块中的局部传播。在另一个场景中,当未获取到使用语句中的张量寄存器参数时,表示该使用语句中的张量寄存器参数与创建语句不在同一基本块中,而是可能在其他的基本块中,则此时本公开方案选择不做进一步操作,而是选择在编译的化简阶段,通过插入其他指令来从寄存器中获取参数,也即通过其他指令来获取张量寄存器参数。
在上述方法700的一个实施例中,其中遍历每个基本块中的语句以便处理所述创建语句可以包括判断遍历到的当前语句是否是创建语句;以及响应于遍历到的当前语句是创建语句,则根据所述创建语句的张量寄存器参数所指示的寄存器编号,利用所述第一数据结构获取对应的属性标识,以创建出所述张量寄存器。与使用语句的张量寄存器参数略有不同,创建语句的张量寄存器参数指的是张量寄存器相关的参数,除了包括待创建的张量寄存器的编号(简称“寄存器编号”)外,还可以额外地包括各类关于张量数据属性的参数,例如张量的起始位置地址、张量每一维的起始位置、各维度大小及每一维之间的物理地址间隔等。
进一步,上文的创建语句表示根据给定的张量数据属性并且结合源张量寄存器的张量数据属性来创建出一个目标张量寄存器,比如第二创建语句、第三创建语句和第四创建语句(在下文中具体说明三种创建语句)。本公开可以通过第一数据结构根据源张量寄存器的寄存器编号定位到源张量寄存器的张量数据属性,从而实现对目标寄存器的创建。在一种可选的实施例中,创建语句可只根据给定的张量数据属性,无需根据第一数据结构即可完成对目标寄存器的创建例如第一创建语句(在下文中具体说明该创建语句)。附加地,在执行创建语句以创建所述张量寄存器后,可以将创建的张量寄存器的寄存器编号与属性标识进行关联,并记录至所述第一数据结构,从而实现对第一数据结构的更新和维护。本公开在执行创建语句时,基于第一数据结构找到创建语句所需的源张量寄存器,实现该源张量寄存器在基本块中的局部传播。
根据不同的应用场景,本公开的上述创建语句可以包括一种或多种创建语句,例如具有不同创建方式的第一至第四创建语句。具体地,第一创建语句可以用于根据已知的维度信息创建目标张量寄存器,其在本公开的上下文中可以表示为createtr语句。第二创建语句可以用于将特定的存储区域处的张量寄存器所关联的张量数据赋给目标张量寄存器,以创建出目标张量寄存器,其在本公开的上下文中可以表示为tld.tr.xram语句。第三创建语句可以用于根据预定的张量维度信息和源张量寄存器对张量数据执行切分,以创建出目标张量寄存器,其在本公开的上下文中可以表示为slicetr语句。第四创建语句,其用于将源张量寄存器的数据结构赋给目标张量寄存器,以创建出所述目标张量寄存器,其在本公开的上下文中可以表示为tmv.tr.tr语句。
下面将给出该四个创建语句的示例性语句表达。
1、第一创建语句createtr语句,其根据给定的维度信息(如上面所提到的每维度的大小、每维度的偏移或步长等)创建TR,示例性语句如下:
createtr dst_tr,base_addr,
dim0_offset,dim0_size,dim0_stride,
dim1_offset,dim1_size,dim1_stride,
dim2_offset,dim2_size;
2、第二创建语句tld.tr.xram语句,其可以从xram(内存,寄存器或者栈空间等)中加载一个源TR(src_tr),并且将该源TR的TensorInfo的BaseAddr指向的数据赋给目标TR(dst_tr)。示例性语句如下:
tld.tr.xram dst_tr,src_tr;
3、第三创建语句slicetr语句,其用于对张量数据进行切分。即,根据给定的维度参数信息和源TR的TensorInfo维度信息,对源TR进行切分以创建出新的TR。示例性语句如下。
slicetr dst_tr,src_tr+[<dim0_offset,dim0_size>,
<dim1_offset,dim1_size>,
<dim2_offset,dim2_size>];
4、第四创建语句tmv.tr.tr语句,其用于将一个源TR的TensorInfo信息赋给目标TR。示例性语句如下:
tmv.tr.tr dst_tr,src_tr
上述四种创建语句均创建了一个新的TR,也被称为定值语句,即定义TR的语句的地方。在本公开的上下文中,定值语句即是用于定义张量具体数值的语句,包括其维度数目、大小、偏移或步长等张量数据属性。
在一些实施场景中,每个创建语句(包括但不限于上述四种创建语句)中还可以包括属性标识项。该属性标识项也可以是一种数据结构或数组,本公开对属性标识项的表示形式不做限定,其可以用于存放一些中间表达的属性(例如指示计算时的执行模式“running mode”、请求模式、是否有融合操作、片上或片外操作等)。
在一个实施场景中,在根据创建语句创建得到目标张量寄存器后,可以将创建语句的属性标识项与创建得到的目标张量寄存器相关联。具体来说,创建语句的属性标识项可以表示为AttachInfo-2,该属性标识项还可以包括一类成员变量m_id,用于存放TensorInfo的tensor_info_id,以将该创建语句与其创建的目标寄存器相关联。通过将创建语句的属性标识项目与目标张量寄存器的数据结构的标识相关联,即可根据创建语句找到目标张量寄存器的张量数据属性,从而可以实现对张量数据的基本块内的局部传播。
在一个实施场景中,使用语句还可以包括如上的第三创建语句和第四创建语句。第三创建语句和第四创建语句既可以用于创建新的TR(即二者是一种创建语句),同时这两种语句也可以对已有的TR进行使用(即二者也是一种使用语句)。
作为示例,使用TR的语句中,张量寄存器TR可以出现切分(“slice”)操作(即第三创建语句),例如如下使用语句所示。
tadd tr3,tr1,tr0+[<...>,<...>,<...>];
其中“tr0+[<...>,<...>,<...>]”表达对tr0执行切分操作,该“tadd”表示将tr1和从tr0中“切分”出的张量进行相加,并且将结果赋给tr3。该张量相加的使用语句等于如下两条语句之和:
slicetr tr2,tr0+[<...>,<...>,<...>];(表示从tr0中“切分”出部分张量数据并且赋给tr2)
tadd tr3,tr1,tr2;(表示将tr1和tr2相加后赋值给tr3)
结合本公开的教导,可以理解的是当创建语句带有谓词时(此时的语句也即谓词语句),一般只有在运行时才知道具体执行哪条谓词语句。然而,就本公开的方案而言,在编译阶段分析时,谓词的使用有可能传递错误的TensorInfo信息。例如,对于分别带有正反谓词的第一createtr语句和第二createtr语句,二者参数不同。当第一createtr语句的谓词为是(即“正谓词”)而第二createtr语句的谓词为负(即“反谓词”)时,则在执行静态分析时,第一createtr和第二createtr语句会按顺序被执行,从而第二createtr语句的参数会覆盖第一createtr语句。然而,实际运行的结果可能是执行第一createtr语句而第二createtr语句根本就不执行,这样就相当于传递了错误的TensorInfo信息。正是考虑到类似于这样的潜在错误,本公开提出如下的谓词判断有无和执行相应操作的处理方式。
具体地,在一些实施场景中,本公开的创建语句有可能带有谓词,该谓词具有关联的谓词寄存器,用于指示执行哪条创建语句。由此,可以通过是否获取到谓词寄存器来确定创建语句是否具有谓词。例如,当可以获取到谓词寄存器时,则可以认为该创建语句带有谓词;否则,可以认为该创建语句不带有谓词。在该场景下,在执行将创建的张量寄存器的寄存器编号与属性标识进行关联,并记录至所述第一数据结构中。
在另一些实施场景中,响应于判断创建语句包含谓词并且对应的属性标识无效(也即在第一数据结构中未找到该对应的属性标识),则将设置为无效值(例如“0”)的属性标识和对应的寄存器编号记录于第一数据结构中。在判断创建语句包含谓词并且创建的张量寄存器的属性标识有效时,则本公开的方法提出执行属性标识与从第一数据结构中获得的属性标识的冲突处理操作,以便将二者关联的相同参数保留并且将不同参数置为无效值(例如“0”)。此后,可以将冲突处理操作后的属性标识和张量寄存器编号记录至第一数据结构中。
具体到前述本公开所给出的四种创建语句,createtr、slicetr和tmv.tr.tr创建语句可能带有谓词而tld.tr.xram一定不带有谓词。因此,在执行createtr、slicetr和tmv.tr.tr创建语句时,本公开的方案可以对前三类创建语句执行谓词有无判断和相应的处理操作。对于tld.tr.xram创建语句,由于其是直接加载一个源TR(src_tr)并且将该源TR的TensorInfo的BaseAddr指向的数据赋给目标TR(dst_tr),因此其不具有有效的属性标识。鉴于此,在执行tld.tr.xram创建语句时,可以直接将该语句中设置为无效值(例如“0”)的属性标识和对应的寄存器编号记录于第一数据结构中。
上文对本公开的基于张量的使用语句和创建语句进行了详细的描述,从而本领域技术人员可以理解本公开的张量局部传播方案可以在编译操作中的中间表达阶段的基本块内实现,由此简化编译操作并且提高编译操作的效率。
图9是示出根据本公开实施例的编译方法900的示例性流程图。基于前文的描述,本领域技术人员可以理解的是编译方法900可以视为图7所示编译方法700的一种可能实现方式,因此关于图7所做的描述同样适用于下文关于图9的描述。另外,需要注意的是下文的描述仅仅是示例性而非限制性的,本领域技术人员基于本公开的教导也可以想到其他各种变型的实施方式。
如图9中所示,在步骤S902处流程开始,并且在步骤S904处开始遍历基本块,以处理使用语句,即使用TR的语句。具体地,流程可以判断遍历到的当前语句是否是使用张量寄存器的使用语句。响应于遍历到的所述当前语句是使用语句,则可以获取使用语句中的张量寄存器参数(包括前文提到的利用递归函数来进行递归遍历)。通过该张量寄存器参数所指示的寄存器编号,可以从第一数据结构中获取与该寄存器编号对应的属性标识,从而可以依据该属性标识来获取关于张量的张量数据属性。基于获得的张量数据属性,使用语句可以执行关于张量的各种运算,例如两个或多个张量之间的加法、减法和/或乘法。
在步骤S906处,流程可以处理createtr/slicetr/tmv.tr.tr创建语句。鉴于该三类创建语句都存在带谓词的可能性并且处理操作类似,因此为了简明的目的,在后续步骤中将三者一并描述。
首先,在步骤S908处,首先遍历每个基本块内的createtr、slicetr或tmv.tr.tr创建语句,从而利用已知的维度信息来创建包含TensorInfo的TR。具体地,如步骤S910所示,可以根据三类创建语句中所包含的张量寄存器参数所指示的寄存器编号,利用前文所描述的第一数据结构来获取对应的属性标识,也即tensor_info_id。由此,通过例如步骤S910中所示出的Trno2tiid.get()函数来创建出新的TR。对于从所述第一数据结构获取不到tensor_info_id的情形,则此时默认该tensor_info_id为0,也即该对应的属性标识为无效。
接着,在步骤S912处,判断createtr、slicetr或tmv.tr.tr创建语句是否带有谓词。作为一个实施方式,可以通过是否能获取到谓词寄存器来进行判断。如果获取不到谓词寄存器,则说明不带谓词。相反地,当能够获取谓词寄存器时,则说明该创建语句带有谓词。当不带谓词时,则可以在步骤S914处将新创建的TR记录到第一数据结构(即“Trno2tiid”)中,以便实现对与基本块关联的第一数据结构的更新和维护。
对于createtr、slicetr或tmv.tr.tr创建语句带谓词的情形,在步骤S916处,可以接着判断属性标识tensor_info_id是否有效。当判断该tensor_info_id无效时,则在步骤S918处,可以将作为无效值的0和作为该创建语句的寄存器参数的寄存器编号记录至第一数据结构中,以实现对第一数据结构的更新和维护。相对应地,当判断该创建语句的tensor_info_id有效时,并且能够从第一数据结构获取到相同的属性标识,则说明当前新创建的TR在当前的基本块中已经被创建过,例如由该基本块之前的某条创建语句创建过。在该情形下,本公开提出在步骤S920处执行冲突处理操作。具体地,可以将两个不同的TensorInfo信息里相同的参数保留,不相同的参数置为invalid(例如设置为0)。例如,通过比较可以保留相同的维度信息,而对于找到其中不同的维度信息,则可以将对应参数的有效位设置为invalid,以表明当前该参数是无效的。
在通过上述冲突处理后,在步骤S922处,将执行冲突处理后的tensor_info_id(其包含新的参数,即图中示出的new_id)和TR的寄存器编号记录至Trno2tiid中。
接着,流程在S924处执行处理tld.tr.xram创建语句,即一定不带谓词的创建语句。具体地,流程可以遍历基本块并且判断当前的语句是否是tld.tr.xram创建语句。响应于该语句是tld.tr.xram创建语句,则可以根据该创建语句所创建的目标张量寄存器的张量寄存器编号和作为标识的无效标识符(如“0”)记录至第一数据结构中。当遍历了基本块内的所有基于张量的使用语句和创建语句后,流程结束于步骤S926处。可以理解的是,步骤S904、S906、S908的执行没有顺序的要求,可以根据当前语句的语句类型执行对应的步骤。
基于上文的描述,本领域技术人员可以理解本申请通过软件方式(也即程序指令)实现对编译的优化。鉴于此,本申请实际上也公开了一种设备,其包括处理器和存储器。具体地,存储器可以存储用于人工智能计算系统的张量编译的程序指令,当所述程序指令由处理器执行时,实现本申请结合图7-图9所描述的方法步骤。另外,由于本申请的方案可以通过计算程序指令来实现,因此本申请也公开了一种计算机可读存储介质或计算机程序产品,其上存储有基于张量编译的计算机程序/指令,从而实现结合图7-图9所描述的方法步骤。
以上结合附图对本公开的方案进行了详细的描述。根据不同的应用场景,本披露的设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。
进一步,本披露的设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的功耗高的设备或装置可以应用于云端设备(例如云端服务器),而功耗小的设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本披露的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本披露实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于U盘、闪存盘、只读存储器(“Read Only Memory”,简写为ROM)、随机存取存储器(“Random Access Memory”,简写为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如CPU、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(“Resistive Random Access Memory”,简写为RRAM)、动态随机存取存储器(“DynamicRandom Access Memory”,简写为DRAM)、静态随机存取存储器(“Static Random AccessMemory”,简写为SRAM)、增强动态随机存取存储器(“Enhanced Dynamic Random AccessMemory”,简写为“EDRAM”)、高带宽存储器(“High Bandwidth Memory”,简写为“HBM”)、混合存储器立方体(“Hybrid Memory Cube”,简写为“HMC”)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款A1、一种基于张量的编译方法,包括:
针对编译操作的中间表达阶段的每个基本块,创建和维护对应的第一数据结构,其中所述第一数据结构包括寄存器编号以及与张量数据属性关联的属性标识;以及
基于所述第一数据结构,遍历每个基本块中的语句,以便处理使用张量寄存器的使用语句和/或创建张量寄存器的创建语句。
条款A2、根据条款A1所述的编译方法,其中遍历每个基本块中的语句,以便处理所述使用语句包括:
判断遍历到的当前语句是否是使用所述张量寄存器的使用语句;
响应于遍历到的所述当前语句是所述使用语句,获取所述使用语句中的张量寄存器参数;以及
根据张量寄存器参数指示的寄存器编号从所述第一数据结构中获取对应的属性标识,以执行所述使用语句。
条款A3、根据条款A2所述的编译方法,其特征在于,所述方法还包括:
将所述属性标识与所述张量寄存器参数的属性标识项关联。
条款A4、根据条款A1所述的编译方法,其中遍历每个基本块中的语句,以便处理所述创建语句包括:
判断遍历到的当前语句是否是创建语句;
响应于遍历到的当前语句是创建语句,根据所述创建语句的张量寄存器参数所指示的寄存器编号,利用所述第一数据结构获取对应的属性标识,以创建出所述张量寄存器。
条款A5、根据条款A4所述的编译方法,还包括:
在执行完创建张量寄存器的创建语句后,将创建的张量寄存器的寄存器编号与属性标识进行关联,并记录至所述第一数据结构。
条款A6、根据条款A5所述的编译方法,其中将创建的张量寄存器的寄存器编号与属性标识进行关联,并记录至所述第一数据结构包括:
判断所述创建语句是否包含谓词;以及
根据所述创建语句是否包含谓词来执行对应操作,以便将所述寄存器编号与对应的属性标识记录至所述第一数据结构。
条款A7、根据条款A6所述的编译方法,还包括:
响应于判断所述创建语句不包含谓词,将所述寄存器编号和对应的属性标识记录至所述第一数据结构。
条款A8、根据条款A6所述的编译方法,还包括:
响应于判断所述创建语句包含谓词并且所述对应的属性标识无效,则将设置为无效值的属性标识和对应的寄存器编号记录至于所述第一数据结构中。
条款A9、根据条款A6所述的编译方法,还包括:
响应于判断所述创建语句包含谓词并且创建的张量寄存器的属性标识有效,执行属性标识与从所述第一数据结构中获得的属性标识的冲突处理操作,以便将二者关联的相同参数保留并且将不同参数置为无效值;以及
将所述冲突处理操作后的属性标识和张量寄存器编号记录至所述第一数据结构中。
条款A10、根据条款A4所述的编译方法,其中所述创建语句包括以下的一种或多种创建语句:
第一创建语句,其用于创建目标张量寄存器;
第二创建语句,其用于将特定的存储区域处的张量寄存器所关联的张量数据赋给目标张量寄存器,以创建出目标张量寄存器;
第三创建语句,其用于根据预定的张量维度信息和源张量寄存器对张量数据执行切分,以创建出目标张量寄存器;以及
第四创建语句,其用于将源张量寄存器的张量数据属性赋给目标张量寄存器,以创建出所述目标张量寄存器。
条款A11、根据条款A1-A10的任意一项所述的编译方法,还包括:
基于张量数据属性设置用于表征张量寄存器的第二数据结构,以用于实现编译中的张量在基本块内的张量局部传播,其中所述第二数据结构包括与所述张量数据属性关联的张量寄存器参数和属性标识。
条款A12、根据条款A11所述的编译方法,其中所述张量数据属性包括张量数据的地址信息和维度信息。
条款A13、根据条款A12所述的编译方法,其中所述地址信息包括张量数据的起始物理地址,所述维度信息包括张量数据的各维度大小、各维度的起始位置和各维度间的物理地址间隔。
条款A14、一种基于张量的编译的设备,包括:
处理器;以及
存储器,其存储有用于对张量进行编译的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现根据条款A1-A13的任意一项所述的方法。
条款A15、一种计算机可读存储介质,其存储有基于张量进行编译的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现根据条款A1-A13的任意一项所述的方法。
虽然本公开的实施方式如上,但所述内容只是为便于理解本公开而采用的实施例,并非用以限定本公开的范围和应用场景。任何本公开所述技术领域内的技术人员,在不脱离本公开所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本公开的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (15)

1.一种基于张量的编译方法,包括:
针对编译操作的中间表达阶段的每个基本块,创建和维护对应的第一数据结构,其中所述第一数据结构包括寄存器编号以及与张量数据属性关联的属性标识;以及
基于所述第一数据结构,遍历每个基本块中的语句,以便处理使用张量寄存器的使用语句和/或创建张量寄存器的创建语句。
2.根据权利要求1所述的编译方法,其中遍历每个基本块中的语句,以便处理所述使用语句包括:
判断遍历到的当前语句是否是使用所述张量寄存器的使用语句;
响应于遍历到的所述当前语句是所述使用语句,获取所述使用语句中的张量寄存器参数;以及
根据张量寄存器参数指示的寄存器编号从所述第一数据结构中获取对应的属性标识,以执行所述使用语句。
3.根据权利要求2所述的编译方法,其特征在于,所述方法还包括:
将所述属性标识与所述张量寄存器参数的属性标识项关联。
4.根据权利要求1所述的编译方法,其中遍历每个基本块中的语句,以便处理所述创建语句包括:
判断遍历到的当前语句是否是创建语句;
响应于遍历到的当前语句是创建语句,根据所述创建语句的张量寄存器参数所指示的寄存器编号,利用所述第一数据结构获取对应的属性标识,以创建出所述张量寄存器。
5.根据权利要求4所述的编译方法,还包括:
在执行完创建张量寄存器的创建语句后,将创建的张量寄存器的寄存器编号与属性标识进行关联,并记录至所述第一数据结构。
6.根据权利要求5所述的编译方法,其中将创建的张量寄存器的寄存器编号与属性标识进行关联,并记录至所述第一数据结构包括:
判断所述创建语句是否包含谓词;以及
根据所述创建语句是否包含谓词来执行对应操作,以便将所述寄存器编号与对应的属性标识记录至所述第一数据结构。
7.根据权利要求6所述的编译方法,还包括:
响应于判断所述创建语句不包含谓词,将所述寄存器编号和对应的属性标识记录至所述第一数据结构。
8.根据权利要求6所述的编译方法,还包括:
响应于判断所述创建语句包含谓词并且所述对应的属性标识无效,则将设置为无效值的属性标识和对应的寄存器编号记录至所述第一数据结构中。
9.根据权利要求6所述的编译方法,还包括:
响应于判断所述创建语句包含谓词并且创建的张量寄存器的属性标识有效,执行属性标识与从所述第一数据结构中获得的属性标识的冲突处理操作,以便将二者关联的相同参数保留并且将不同参数置为无效值;以及
将所述冲突处理操作后的属性标识和张量寄存器编号记录至所述第一数据结构中。
10.根据权利要求4所述的编译方法,其中所述创建语句包括以下的一种或多种创建语句:
第一创建语句,其用于创建目标张量寄存器;
第二创建语句,其用于将特定的存储区域处的张量寄存器所关联的张量数据赋给目标张量寄存器,以创建出目标张量寄存器;
第三创建语句,其用于根据预定的张量维度信息和源张量寄存器对张量数据执行切分,以创建出目标张量寄存器;以及
第四创建语句,其用于将源张量寄存器的张量数据属性赋给目标张量寄存器,以创建出所述目标张量寄存器。
11.根据权利要求1-10的任意一项所述的编译方法,还包括:
基于张量数据属性设置用于表征张量寄存器的第二数据结构,以用于实现编译中的张量在基本块内的张量局部传播,其中所述第二数据结构包括与所述张量数据属性关联的张量寄存器参数和属性标识。
12.根据权利要求11所述的编译方法,其中所述张量数据属性包括张量数据的地址信息和维度信息。
13.根据权利要求12所述的编译方法,其中所述地址信息包括张量数据的起始物理地址,所述维度信息包括张量数据的各维度大小、各维度的起始位置和各维度间的物理地址间隔。
14.一种基于张量的编译的设备,包括:
处理器;以及
存储器,其存储有用于基于张量进行编译的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现根据权利要求1-13的任意一项所述的方法。
15.一种计算机可读存储介质,其存储有基于张量进行编译的计算机程序指令,当所述计算机程序指令由处理器执行时,使得实现根据权利要求1-13的任意一项所述的方法。
CN202210501826.0A 2022-05-09 2022-05-09 基于张量的编译方法、设备及其计算机可读存储介质 Pending CN117075902A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210501826.0A CN117075902A (zh) 2022-05-09 2022-05-09 基于张量的编译方法、设备及其计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210501826.0A CN117075902A (zh) 2022-05-09 2022-05-09 基于张量的编译方法、设备及其计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN117075902A true CN117075902A (zh) 2023-11-17

Family

ID=88701050

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210501826.0A Pending CN117075902A (zh) 2022-05-09 2022-05-09 基于张量的编译方法、设备及其计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN117075902A (zh)

Similar Documents

Publication Publication Date Title
CN110096309B (zh) 运算方法、装置、计算机设备和存储介质
CN109284815B (zh) 神经网络模型算法编译方法、装置及相关产品
CN109543825B (zh) 神经网络模型算法编译方法、装置及相关产品
US11900113B2 (en) Data flow processing method and related device
US20220114429A1 (en) Method and device for generating operation data and related product
CN112465133B (zh) 控制流多核并行方法、计算机设备和存储介质
CN112070202B (zh) 一种融合图的生成方法、生成装置和计算机可读存储介质
US20210158131A1 (en) Hierarchical partitioning of operators
CN114580606A (zh) 数据处理方法、装置、计算机设备和存储介质
CN114035916A (zh) 计算图的编译、调度方法及相关产品
WO2023030507A1 (zh) 编译优化方法、装置、计算机设备以及存储介质
CN112052040A (zh) 处理方法、装置、计算机设备和存储介质
CN117075902A (zh) 基于张量的编译方法、设备及其计算机可读存储介质
CN115840894A (zh) 一种用于处理多维张量数据的方法及其相关产品
CN111966399B (zh) 指令处理方法、装置及相关产品
CN115329923A (zh) 用于神经网络模型的编译方法和相关产品
CN112465116A (zh) 运算方法、装置、电子设备和存储介质
CN117075903A (zh) 基于张量的编译方法、设备及其计算机可读存储介质
CN112463158B (zh) 编译方法、装置、电子设备和存储介质
CN111026440B (zh) 运算方法、装置、计算机设备和存储介质
CN111338694B (zh) 运算方法、装置、计算机设备和存储介质
CN111339060B (zh) 运算方法、装置、计算机设备和存储介质
CN115904344A (zh) 一种混合编程的方法和相关产品
CN115543328A (zh) 对运行于人工智能芯片上的神经网络模型进行转换的编译方法及其相关产品
CN116302459A (zh) 用于人工智能计算系统的内存管理的方法及其相关产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination