针对神经网络处理器的可执行程序生成装置和方法与流程

文档序号:18830687发布日期:2019-10-09 03:18阅读:158来源:国知局
针对神经网络处理器的可执行程序生成装置和方法与流程

本披露涉及计算机领域,进一步涉及人工智能领域。



背景技术:

深度神经网络算法是最近非常流行的一种机器学习算法,被广泛的应用在了各种领域,比如图像识别,语音识别,自然语言处理等。由于深度神经网络在各种任务上都取得了良好的效果,各种各样的网络结构和算法层出不穷,给编程开发带来了挑战。而对于神经网络处理器来说,由于其独特的硬件结构,以及其上运行的神经网络算法所具有的计算密集和访存密集的特点,编程也就变得更加的复杂和困难。现在提出的神经网路处理器都是通过手写指令的方式进行编程的,这种方式非常耗时,耗损人力,同时也容易出现错误,不易调试。

在实施本披露的过程中,申请人发现上述现有技术中存在以下问题:神经网络处理器缺乏有效的编程手段,和高效的代码生成装置,导致其编程非常困难,生成出来的代码效率低下,难以充分发挥神经网络处理器的优势。



技术实现要素:

(一)要解决的技术问题

有鉴于此,本披露的目的在于提供针对神经网络处理器的可执行程序生成装置和方法,以解决以上所述的至少部分技术问题。

(二)技术方案

根据本披露的一方面,提供一种针对神经网络处理器的可执行程序生成装置,包括:

源程序分割模块,接收源文件为输入,根据源文件中的格式,识别并提取代码段和数据段的位置,并生成包含代码段的中间文件和包含数据段的中间文件;

数据处理模块,用于输入包含数据的中间文件,处理数据的摆放,输出内存分配信息和数据摆放方式;

神经网络算法映射模块,用于输入包含代码段的中间文件,将代码中的用块表示的神经网络算法映射为宏语句构成的算法流程,之后再映射成硬件相关的指令。

在进一步的方案中,还包括并行代码生成模块,用于输入硬件相关的指令,对其进行并行化的处理和优化,输出优化后的程序。

在进一步的方案中,还包括重定位模块,输入数据摆放方式、内存分配信息和优化后的程序,将优化后的程序中的相对地址替换为绝对地址。

在进一步的方案中,还包括机器码生成模块,用于将所述重定位模块将重定位之后的程序翻译成神经网络处理器可以识别的字符串。

在进一步的方案中,所述数据处理模块还用于进行数据划分,将神经网络每一层的输入输出数据进行划分,划分后能放入神经网络处理器的片上存储单元中。

在进一步的方案中,所述神经网络算法映射模块包括:

计算划分模块,用于将大规模的计算划分成规模相对小的子计算模块;

指令映射模块,用于将算法映射成神经网络处理器指令集中的指令。

在进一步的方案中,所述代码段中包含了神经网络算法的语句、块、以及相应的定义。

根据本披露的另一方面,还提供一种采用上述装置生成可执行程序的方法,包括:采用源程序分割模块,接收源文件为输入,并根据源文件中的格式,识别出代码段和数据段的位置并提取,并生成包含代码段的中间文件和包含数据段的中间文件;

采用数据处理模块,输入包含数据的中间文件,处理数据的摆放,输出内存分配信息和数据摆放方式;

采用神经网络算法映射模块,输入包含代码段的中间文件,将代码中的用块表示的神经网络算法映射为宏语句构成的算法流程,之后再映射成硬件相关的指令。

在进一步的方案中,还包括:采用并行代码生成模块,输入硬件相关的指令,对其进行并行化的处理和优化,输出优化后的程序。

在进一步的方案中,还包括:采用重定位模块,输入数据摆放方式、内存分配信息和优化后的程序,将优化后的程序中的相对地址替换为绝对地址。

在进一步的方案中,还包括:采用机器码生成模块,将所述重定位模块将重定位之后的程序翻译成神经网络处理器可以识别的字符串。

在进一步的方案中,还包括:采用所述数据处理模块进行数据划分,将神经网络每一层的输入输出数据进行划分,划分后放入神经网络处理器的片上存储单元中。

在进一步的方案中,所述代码段中包含了神经网络算法的语句、块、以及相应的定义。

在进一步的方案中,并行代码生成模块中的并行化处理和优化包括:通过模拟和/或推理方法,调整语句顺序提高并行效果。

在进一步的方案中,采用数据处理模块将神经元被分割为多个数据块,将多个数据块顺序的存储到存储单元中,在计算过程中,所述数据块会被加载到片上存储器中进行进一步的计算

(三)有益效果

本披露中提出的可执行文件生成装置专门针对神经网络加速器上设计,为用户提供了一种方便快捷的使用神经网络处理器的方法。由于设计紧贴神经网络算法,并且独立于硬件本身,用户不需要去考虑硬件的特点就可以生成出高效的神经网络算法运行文件。

本披露中的装置可以生成能够高效运行的可执行代码,保证了神经网络加速器的效率。

附图说明

图1为本披露实施例中含可执行程序生成装置的框架图。。

图2为本披露实施例中包含可执行程序生成装置的整体结构示意图。

图3示出了本披露实施例中数据处理模块进行的数据划分。

图4说明了本披露实施例数据处理模块进行的数据摆放功能。

图5为应用本披露实施例进行源文件处理的流程示意图。

图6描述了一个两层全连接层的网络结构的正向计算示意过程。

图7示出了图6中的正向计算块的具体展开。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。

在本披露中,由于神经网络处理器具有特殊的硬件结构,因此需要特殊的编程方法对其进行编程,即运用编程语言,将语言映射成可以被生成装置所理解的源文件。图1为本披露实施例从神经网络算法至神经网络处理器可执行文件的生成过程。本披露实施例中的编程方法包含两个步骤,首先,将神经网络算法中的概念,映射成编程语言中的抽象概念,比如将神经网络中的神经元,突触映射成编程语言中的数据结构;第二步,将编程语言中的抽象概念,映射成具体的源程序中的代码,比如:一块神经元数据会在源文件的数据段进行声明。

编程语言由一组既定的规则(语法,语义)构成。本披露中,汇编语言从以下方面被约束:数据类型(datatype),语句(statement),和块(block)。

数据类型用于存储,组织和表达神经网络算法中的各种数据结构,以及将这些数据结构映射到神经网络处理器的具体硬件中。本披露中包括三种数据类型:神经元(neuron),突触(synapse),以及参数(parameter)。其中,神经元为一种多维数组,用于存储和表达神经网络算法中各层的输入输出数值。突触数据结构用于表达和存储神经网络算法中用于连接某些层(如卷积层,全连接层)输入和输出的权值,也是一个多维数组。参数数据结构是一种标量结构,用于表示神经网络算法中的标量数据,尤其是学习率等训练参数。数据结构分为动态数据和静态数据两种。动态数据指在运行过程中才可以得知数据的大小的数据,因此需要在运行过程中进行数据分配;静态数据为在运行之前,程序生成过程中就已知数据大小的那些数据,因此这一部分数据在程序生成的过程中就被分配完毕。

语句用于表达算法的具体执行过程,用户通过以特定顺序写出特定语句来实现神经网络算法。语句包括基本语句(basicstatement)和宏语句(macrostatement)。基本语句和神经网络处理器的指令集对应,代表了可以支持的最基础的功能。宏语句用于提供语言的抽象,宏语句由宏定义和宏调用来实现。宏定义用于定义该宏语句的具体执行过程,其由基本语句组成。宏调用是指该宏语句的具体使用。

块(block)用于表达一个具体的神经网络算法,块由一段宏语句和基本语句构成。块的使用也分为定义和调用两部分,块定义即通过宏语句和基本语句的组合排列,描述一个神经网络算法的计算过程。块的调用即该算法的使用。

以上,介绍了源文件的生成方式以及源文件的组成,下面将结合附图具体说明本披露实施例的针对神经网络处理器的可执行程序生成装置,其用于对源文件进行处理,通过对源文件进行解析,优化等步骤,将其处理为神经网络处理器上可以运行的可执行程序。

本披露的可执行程序生成装置用于生成可以在神经网络处理器上运行的可执行程序。其输入为存储在存储单元中的,以某种固定格式写成的源文件(字符串),输出为一段连续的可以被目标处理器识别并运行的指令序列,指令序列可以是以二进制,十进制,八进制,十六进制等任意进制存储的,存储在存储单元中的字符串文件。生成装置可以包括以下模块,源程序分割模块、数据处理模块以及神经网络算法映射模块。

源程序分割模块用于解析源文件中不同含义的段,并将其送给不同的处理模块。具体而言,分割模块接收源文件为输入,根据源文件中的格式,识别出代码段和数据段的位置,将其提取出来,并生成两个中间文件,一个包含了代码段,一个包含了数据段。代码段中包含了所有的语句,块,以及其相应的定义,这部分代码将被发送给神经网络算法映射模块;另一部分被发送到数据处理模块,进行数据的分配和摆放。数据段中包含了所有数据(静态和动态,各种类型)的声明和定义。

数据处理模块用于处理内存的分配和数据的摆放。该模块以所有数据的声明和定义为输入,输出内存分配信息(例如包括数据首地址,大小等),以及摆放方式。图3示出了本披露实施例中数据处理模块进行的数据划分功能,每一层的输入输出规模可能很大,因此,需要将这些数据进行划分,从而使他们能够放入神经网络处理器的片上存储单元中。

图4说明了本披露实施例数据处理模块进行的数据摆放功能。一块完整的数据会被分割成若干个数据块,图中,一个神经元数据块,被分割成了三个数据块,这三个数据块会顺序的存储到存储单元中。进行数据摆放之前,数据以一个完整的块为单位进行摆放,而数据摆放模块将其划分成多个数据块,并将每一个当作一个独立的神经元数据块进行处理和摆放。在计算过程中,这样的一个数据块会被加载到片上存储器中进行进一步的计算。

神经网络算法映射模块用于对将源程序中的块(表述不同的神经网络算法)映射成相应的基础语句(和硬件指令集紧密相关),具体包括计算划分模块,指令映射模块。计算划分模块用于将大规模的计算划分成规模相对小的子计算模块。比如将一个全连接层算法的输出分成三段,则这个算法被划分成三个子计算,每个子计算计算一个输出的段。指令映射模块则将具体的算法映射成硬件指令集(神经网络处理器指令集)中的指令。比如,一个全连接计算可以被映射为一条矩阵乘向量的基本语句。其映射后的代码将被送入并行优化模块。

在一些实施例中,生成装置还可以包括并行代码生成模块、并行代码生成模块的输入为映射成基本语句和宏语句的程序,输出为优化后的代码。该模块通过模拟,推理等方法,调整语句顺序达到最好的并行效果。

在一些实施例中,生成装置还可以包括重定位模块,其中该重定位模块用于根据内存分配的地址信息对程序中的相应数据的首地址进行替换。

在一些实施例中,生成装置还可以包括机器码生成模块,其中,该机器码生成模块用于将重定位之后的代码翻译成机器可以识别的二进制字符串。

图2为本披露实施例中包含具体可执行程序生成装置的整体结构示意图。首先源文件被送入源程序分割模块进行切分,划分成数据段,代码段。之后数据段被送入数据处理器模块,进行内存的分配以及数据的摆放;代码段被送入神经网络算法映射模块,将代码中的用块表示的神经网络算法映射为宏语句构成的算法流程,之后再映射成硬件相关的指令。神经网络算法映射模块的输出会被送入并行代码生成模块,进行并行化的处理和优化。这一步骤中,并行代码生成模块会针对硬件的具体并行机制特性调整代码中指令的顺序,以达到最优化。之后,数据处理模块输出的地址信息和并行代码模块输出的优化后的程序被送入重定位模块中,将程序中的相对地址替换成绝对地址。最后,程序被送入机器码生成模块,该模块将用助记符表示的代码翻译成机器能够识别的形式(比如:二进制文件)。

为了进一步描述,以下采用一个具体的实施例,描述整个可执行程序生成过程。但应理解的是,该实施例中的具体实施细节仅用于具体说明本披露,并不应理解为对本披露的限定;此外,其中该实施例可能会简化或省略本技术领域已熟知的组件或步骤,以免模糊本披露的特点。

图5为应用本披露实施例进行源文件处理的流程示意图,图6描述了一个两层全连接层的网络结构的正向计算。其具体的可执行文件生成过程如下:

(1)将源文件送入源文件分割模块,文件按照其相应的标志.code(表示代码段),.static_rw,.static_ro和.dynamic(分别为静态可读写、静态只读和动态数据段)被分割成四部分。

(2).code部分被送入神经网络算法映射模块。其中,@block_fw_fc被映射成具体的计算宏和访存宏语句。映射后的结果如图7所示。该宏的参数fc1_out,fc1_inp,和fc1_weight会替换块定义中的参数。

(3)步骤(2)中输出的程序被送入并行优化模块进行优化。

(4)数据段(.static_rw,.static_ro,.dynamic)被送入数据处理模块进行处理。首先,数据处理模块计算出这些数据的大小,比如:fc1_inp里包含为1024个数,即2048字节。因此从相对地址0开始给fc1_inp分配2048个字节的数据,首地址则偏移到2048,再给第二个数据进行地址分配,直到全部分配结束。这些地址信息为这个模块的输出信息。

(5)数据段的数据会依照数据声明的分段信息等进行摆放。

(6)步骤4中输出的地址信息和步骤3中输出的优化后的程序被送入重定位模块。该模块会将相对地址修改成绝对地址。

(7)步骤6的输出程序被送入机器码生成模块中,该模块将程序翻译成机器可以理解的文件形式,即最终的可执行程序。

以上,通过本披露实施例,提出一种用于神经网络处理器的可执行程序生成装置和方法。通过使用该方法和装置,程序员们可以更高效的在神经网络处理器上编程。

另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

各功能单元/模块都可以是硬件,比如该硬件可以是电路,包括数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器等等。所述计算装置中的计算模块可以是任何适当的硬件处理器,比如cpu、gpu、fpga、dsp和asic等等。所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如rram,dram,sram,edram,hbm,hmc等等。

还应该理解,在本披露中,对,例如,“一些实施例”、“实施例”、“一个或多个实施例”引用,表示特定特征可以被包括在本披露的实施中。类似地,应该理解,在描述中,各种特点有时分组在单一实施例、图形或其描述中,以便简化说明,并帮助理解本披露的各个方面。然而,该公开方法不应被解释成反映本披露需要比每项权利要求中所明确记载的更多特征的意图。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1