CN108229668B - 基于深度学习的运算实现方法、装置和电子设备 - Google Patents

基于深度学习的运算实现方法、装置和电子设备 Download PDF

Info

Publication number
CN108229668B
CN108229668B CN201710906965.0A CN201710906965A CN108229668B CN 108229668 B CN108229668 B CN 108229668B CN 201710906965 A CN201710906965 A CN 201710906965A CN 108229668 B CN108229668 B CN 108229668B
Authority
CN
China
Prior art keywords
bit
operand
bits
module
operation module
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
CN201710906965.0A
Other languages
English (en)
Other versions
CN108229668A (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.)
Beijing Sensetime Technology Development Co Ltd
Original Assignee
Beijing Sensetime Technology Development 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 Beijing Sensetime Technology Development Co Ltd filed Critical Beijing Sensetime Technology Development Co Ltd
Priority to CN201710906965.0A priority Critical patent/CN108229668B/zh
Publication of CN108229668A publication Critical patent/CN108229668A/zh
Application granted granted Critical
Publication of CN108229668B publication Critical patent/CN108229668B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • 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/3001Arithmetic instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • General Engineering & Computer Science (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Neurology (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)

Abstract

本申请实施方式公开了一种基于深度学习的运算实现方法、装置、电子设备以及计算机可读介质,其中的方法主要包括:将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果;其中,所述N2不小于N1与N3之和。

Description

基于深度学习的运算实现方法、装置和电子设备
技术领域
本申请涉及计算机技术,尤其是一种基于深度学习的运算实现方法、装置、电子设备以及计算机可读存储介质。
背景技术
在图像处理以及语音识别等需要进行大量数据分析的应用场景中,深度学习算法正在被越来越广泛地使用。很多深度学习算法是利用卷积神经网络来实现的,而卷积神经网络中的卷积层往往需要进行大量的乘加运算。
目前,FPGA(Field-Programmable Gate Array,现场可编程门阵列)等数据处理器中往往会针对定点乘加运算设置大量的专用模块,从而使数据处理器可以同时执行大量的乘加运算;例如,在型号为XC7Z045FFG900的异构FPGA中,通常设置有900个DSP48E(DigitalSignal Processing,数字信号处理)模块,由于每一个DSP48E模块可以在一个时钟周期内实现一次基于25位定点数和18位定点数相乘的乘加运算,因此,型号为XC7Z045FFG900的异构FPGA可以在一个时钟周期内完成900次基于25位定点数和18位定点数相乘的乘加运算。
在卷积神经网络的输入和输出过程中,卷积神经网络中的卷积层的运算量占整个卷积神经网络的运算量的比例通常较高,如有时会达到百分之七十甚至更高,由此通常会导致卷积层所消耗的时间占整个卷积神经网络的in-out(入-出)时间的比例较高。
由上述描述可知,提高卷积层的乘加运算效率,对于降低卷积层所消耗的时间是非常有利的,从而有利于降低整个卷积神经网络的in-out时间。
发明内容
本申请实施方式提供一种基于深度学习的运算实现技术方案。
根据本申请实施方式的其中一个方面,提供了一种用基于深度学习的运算实现方法,该方法包括:将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果;其中,所述N2不小于N1与N3之和。
在本申请一实施方式中,所述第一运算数和第二运算数分别为:带符号位的定点数。
在本申请又一实施方式中,所述N1与N3相等,所述N2等于N1与N3之和。
在本申请再一实施方式中,所述A个N1比特的第一运算数包括:两个8比特的第一运算数;所述N2比特的第一运算单元包括:16比特的第一运算单元;所述N3比特的第二运算数包括:8比特的第二运算数;所述M比特的第一运算模块包括:32比特的第一运算模块。
在本申请再一实施方式中,所述将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的步骤包括:将两个8比特的第一运算数分别扩展为16比特的第一运算数,将其中一个16比特的第一运算数输入第一运算模块中,并左移16比特,使其位于第一运算模块中的高16比特的第一运算单元中;在判断出另一个16比特的第一运算数与第二运算数同号的情况下,计算第一运算模块与另一个16比特的第一运算数之和,使另一个16比特的第一运算数位于第一运算模块中的低16比特的第一运算单元中;在判断出另一个16比特的第一运算数与第二运算数异号的情况下,计算第一运算模块与另一个16比特的第一运算数之差,使另一个16比特的第一运算数在取负后位于第一运算模块中的低16比特的第一运算单元中。
在本申请再一实施方式中,所述方法还包括:将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;且所述方法在将所述第一运算模块与N3比特的第二运算数进行相乘运算之后还包括:将所述第一运算模块与第二运算模块进行相加运算,使所述方法实现乘加器;从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
在本申请再一实施方式中,所述N1、N3以及N4相等。
在本申请再一实施方式中,所述将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的步骤包括:将两个8比特的第三运算数分别扩展为16比特的第三运算数,将其中一个16比特的第三运算数输入第二运算模块中,并左移16比特,使其位于第二运算模块中的高16比特的第二运算单元中;计算第二运算模块与另一个16比特的第三运算数之和,使另一个16比特的第三运算数位于第二运算模块中的低16比特的第二运算单元中。
在本申请再一实施方式中,所述从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果的步骤包括:将32比特的第一运算模块中的高16比特的第一运算单元中的数作为一个乘加运算结果;在相应第一运算数与第二运算数同号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数作为另一个乘加运算结果;在相应第一运算数与第二运算数异号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数取负后作为另一个乘加运算结果。
在本申请再一实施方式中,所述实现乘加器的方法通过高层次综合HLS语言实现。
在本申请再一实施方式中,一个所述乘加器形成FPGA中的一个数字信号处理DSP模块。
根据本申请实施方式的其中另一个方面,提供了一种基于深度学习的运算实现的装置,该装置包括:第一输入模块,用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;乘运算模块,用于将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令;其中,所述N2不小于N1与N3之和。
在本申请再一实施方式中,所述装置还包括:第二输入模块,用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;加运算模块,用于在乘运算模块将所述第一运算模块与N3比特的第二运算数进行相乘运算之后,将第一运算模块与第二运算模块进行相加运算,使所述装置实现乘加器;提取模块,用于从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
根据本申请实施方式的其中再一个方面,提供了一种电子设备,该电子设备包括:存储器,用于存储计算机程序;处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,下述指令被运行:用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;用于将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令;其中,所述N2不小于N1与N3之和。
在本申请一实施方式中,所述第一运算数和第二运算数分别为:带符号位的定点数。
在本申请又一实施方式中,所述N1与N3相等,所述N2等于N1与N3之和。
在本申请再一实施方式中,所述A个N1比特的第一运算数包括:两个8比特的第一运算数;所述N2比特的第一运算单元包括:16比特的第一运算单元;所述N3比特的第二运算数包括:8比特的第二运算数;所述M比特的第一运算模块包括:32比特的第一运算模块。
在本申请再一实施方式中,所述用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令包括:用于将两个8比特的第一运算数分别扩展为16比特的第一运算数,将其中一个16比特的第一运算数输入第一运算模块中,并左移16比特,使其位于第一运算模块中的高16比特的第一运算单元中的指令;用于在判断出另一个16比特的第一运算数与第二运算数同号的情况下,计算第一运算模块与另一个16比特的第一运算数之和,使另一个16比特的第一运算数位于第一运算模块中的低16比特的第一运算单元中的指令;用于在判断出另一个16比特的第一运算数与第二运算数异号的情况下,计算第一运算模块与另一个16比特的第一运算数之差,使另一个16比特的第一运算数在取负后位于第一运算模块中的低16比特的第一运算单元中的指令。
在本申请再一实施方式中,所述电子设备还包括:用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的指令;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;用于在将所述第一运算模块与N3比特的第二运算数进行相乘运算之后,将所述第一运算模块与第二运算模块进行相加运算,使所述电子设备实现乘加器;用于从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果的指令。
在本申请再一实施方式中,所述N1、N3以及N4相等。
在本申请再一实施方式中,所述用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的指令包括:用于将两个8比特的第三运算数分别扩展为16比特的第三运算数,将其中一个16比特的第三运算数输入第二运算模块中,并左移16比特,使其位于第二运算模块中的高16比特的第二运算单元中的指令;用于计算第二运算模块与另一个16比特的第三运算数之和,使另一个16比特的第三运算数位于第二运算模块中的低16比特的第二运算单元中的指令。
在本申请再一实施方式中,所述用于从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果的指令包括:用于将32比特的第一运算模块中的高16比特的第一运算单元中的数作为一个乘加运算结果的指令;用于在相应第一运算数与第二运算数同号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数作为另一个乘加运算结果的指令;用于在相应第一运算数与第二运算数异号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数取负后作为另一个乘加运算结果的指令。
在本申请再一实施方式中,所述乘加器通过高层次综合HLS语言实现。
在本申请再一实施方式中,一个所述乘加器形成FPGA中的一个数字信号处理DSP模块。
根据本申请实施方式的再一个方面,提供的一种计算机存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,执行本申请方法实施方式中的各步骤,例如,用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;用于将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令;其中,所述N2不小于N1与N3之和。
根据本申请实施方式的再一个方面,提供的一种计算机程序,该计算机程序被处理器执行时,执行本申请方法实施方式中的各步骤,例如,用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;用于将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令;其中,所述N2不小于N1与N3之和。
基于本申请上述实施方式提供的基于深度学习的运算实现的方法、装置、电子设备以及计算机存储介质,本申请实施方式通过将两个甚至更多第一运算数输入一个第一运算模块中,第一运算模块中的相邻的两个第一运算数之间间隔足够的零比特位,这样,在第一运算模块与第二运算数进行相乘运算时能够避免第一运算模块中的不同第一运算数与第二运算数相乘结果的相互干扰现象,从而可以在一个时钟周期内完成至少两次相乘运算,有利于提高卷积层的乘运算效率;从而非常有利于降低卷积层所消耗的时间,最终有利于降低整个卷积神经网络的输入输出时间。
下面通过附图和实施方式,对本申请的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本申请的实施方式,并且连同描述一起用于解释本申请的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本申请,其中:
图1为本申请方法一个实施方式的流程图;
图2为本申请方法的另一个实施方式的流程图;
图3为本申请装置一个实施方式的结构示意图;
图4为本申请计算机可读存储介质的一个实施方式的示意图;
图5为本申请电子设备的一个实施方式的结构示意图;
图6为本申请的一个应用场景示意图。
具体实施方式
现在将参照附图来详细描述本申请的各种示例性实施方式。应该注意到:除非另外具体说明,否则在这些实施方式中阐述的部件和步骤的相对布置、数字表达式和数值不限制本申请的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施方式的描述实际上仅仅是说明性的,决不作为对本申请及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本申请实施方式可以应用于计算机系统/服务器,其可与众多其它通用或者专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统、大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑以及数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或者远程计算系统存储介质上。
示例性实施例
本申请提供的基于深度学习的运算实现技术方案可以由智能移动电话、台式计算机、笔记型计算机、单片机、平板电脑或者服务器等能够运行计算机程序(也可以称为程序代码或程序产品或程序软件等)的电子设备实现,且该计算机程序可以存储于闪存、缓存、硬盘或光盘等计算机可读存储介质中。
下面结合图1至图6对本申请提供的基于深度学习的运算实现技术方案进行说明。
图1为本申请的基于深度学习的运算实现方法的流程图。本申请的基于深度学习的运算实现方法主要包括:步骤S100以及步骤S110。本申请的方法还可以可选的包括:步骤S120、步骤S130以及步骤S140。在本申请的方法包括步骤S120、步骤S130以及步骤S140的情况下,本申请提供的技术方案可以称为用于实现乘加器的技术方案。用于实现乘加器的技术方案所包含的各操作可以利用HLS(High Level Synthesis,高层次综合)语言来实现,即本申请所实现的乘加器可以为基于HLS语言的乘加器。在一个可选的示例中,本申请可以利用HLS语言来实现FPGA中的所有DSP模块,且其中的每一个DSP模块即为一个乘加器。上述HLS语言可以为C或者C++等。
S100、将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中。
在一个可选示例中,本申请中的步骤S100可以由处理器调用存储器中存储的用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令执行,也可以由被处理器运行的第一输入模块300执行。
在一个可选示例中,第一运算数通常为带符号位的定点数。第一运算模块可以为数据处理器中的M比特的寄存器等存储单元。第一运算模块可以包括A个N2比特的第一运算单元,通常情况下,M等于A与N2的乘积,N1等于N2。当然,M也可以大于A与N2的乘积,N1也可以小于N2。本申请在将A个N1比特的第一运算数输入至第一运算模块中的时候,一个第一运算数位于一个第一运算单元中,不同的第一运算数位于不同的第一运算单元中。一个可选的例子,第一运算模块为32比特的寄存器,该寄存器包括两个16比特的第一运算单元,本申请可以将两个8比特的第一运算数分别输入至该寄存器的两个16比特的第一运算单元中。当然,第一运算数和第一运算单元的数量可以为三个或者更多。
在一个可选示例中,本申请可以通过对第一运算数扩展移位,并执行相加减的操作使A个N1比特的第一运算数输入至一个M比特的第一运算模块中,例如,本申请可以将两个8比特的第一运算数分别扩展为16比特的第一运算数,并将其中一个16比特的第一运算数输入第一运算模块中,左移16比特,使其位于第一运算模块中的高16比特的第一运算单元中;之后,在判断出另一个16比特的第一运算数与第二运算数同号的情况下,计算第一运算模块与另一个16比特的第一运算数之和,使另一个16比特的第一运算数位于第一运算模块中的低16比特的第一运算单元中;而在判断出另一个16比特的第一运算数与第二运算数异号的情况下,计算第一运算模块与另一个16比特的第一运算数之差,使另一个16比特的第一运算数在取负后位于第一运算模块中的低16比特的第一运算单元中。
下面以将8比特的第一运算数a和8比特的第一运算数b输入至一个32比特的第一运算模块为例,对本申请的将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的过程进行详细说明:
设定8比特的第一运算数a和8比特的第一运算数b均为带有符号位的定点数;
首先,本申请可以先将8比特的第一运算数a扩展为16比特的第一运算数a,即在8比特的第一运算数a的左侧添加8比特的零,形成16比特的第一运算数a;然后,本申请将16比特的第一运算数a输入至第一运算模块m1中,并左移16比特,使16比特的第一运算数a位于第一运算模块m1的最高16比特位中,第一运算模块m1的最低16比特位均为零;同时,本申请可以将8比特的第一运算数b扩展为16比特的第一运算数b,即在8比特的第一运算数b的左侧添加8比特的零,形成16比特的第一运算数b;然后,将16比特的第一运算数b输入第一运算模块m2中,使16比特的第一运算数b位于第一运算模块m2的最低16比特位中,第一运算模块m2的最高16比特位均为零;
其次,本申请判断8或者16比特的第一运算数b与第二运算数c是否同号(即符号位是否相同),如果判断出8比特或者16比特的第一运算数b与第二运算数c同号,则本申请针对第一运算模块m1与第一运算模块m2进行和计算,使16比特的第一运算数b位于第一运算模块m1的最低16比特位中;如果判断出8比特或者16比特的第一运算数b与第二运算数c异号,则本申请针对第一运算模块m1与第一运算模块m2进行差计算,使16比特的第一运算数b位于第一运算模块m1的最低16比特位中。
在一个可选示例中,本申请可以将第一运算数b的符号位和第二运算数c的符号位进行异或运算来判断第一运算数b的符号位和第二运算数c是否同号。在需要明确获知第一运算数b和第二运算数c的正负的情况下,本申请可以通过直接提取第一运算数b和第二运算数c来判断第一运算数b和第二运算数c的正负,也可以通过将第一运算数b的符号位与1相与的结果来判断第一运算数b的正负,当然,本申请可以通过将第二运算数c的符号位与1相与的结果来判断第二运算数c的正负。
需要特别说明的是,如果第一运算数、第二运算数以及第三运算数均为不带有符号位的定点数,则M应超过A与N2的乘积,而M超过A与N2的乘积的数量应充分考虑第一运算数与第二运算数的相乘运算的积的位宽以及该积与第三运算数相加运算的和的位宽,以避免第一运算模块和第二运算数进行相乘运算以及相乘运算获得的积与第二运算模块进行相加运算过程中由于进位而导致的不同第一运算单元的乘运算/乘加的相互干扰的现象。另外,如果第一运算数、第二运算数以及第三运算数均为不带有符号位的定点数,则在本申请将各第一运算数输入至一个M比特的第一运算模块的过程中,可以不判断第一运算数是否与第二运算数同号,例如,续前例,本申请可以直接针对第一运算模块m1与第一运算模块m2进行和计算,使16比特的第一运算数b位于第一运算模块m1的最低16比特位中。
S110、将第一运算模块与N3比特的第二运算数进行相乘运算,使第一运算模块中的一个第一运算单元获得一个相乘运算结果。
在一个可选示例中,本申请中的步骤S110可以由处理器调用存储器中存储的用于将第一运算模块与N3比特的第二运算数进行相乘运算,使第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令执行,也可以由被处理器运行的乘运算模块310执行。
在一个可选示例中,第二运算数通常为带符号位的定点数。本申请中的N2不小于N1与N3之和,通常情况下,N2等于N1与N3之和。
在一个可选示例中,本申请在针对第一运算模块和第二运算数执行相乘运算的过程中,可以对第二运算数的位宽进行扩展(即在第二运算数的左侧添加若干为零的比特位),以使第二运算数的位宽与第一运算模块的位宽相同;当然,本申请也可以在不对第二运算数的位宽进行扩展的情况下,针对第一运算模块和第二运算数执行相乘运算。第二运算数通常位于另一运算模块中,如位于位宽与第一运算模块位宽相同的第三运算模块中。
由于本申请中的第二运算数的位宽不超过第一运算数的位宽,因此,第二运算数的最大位宽为第一运算数的位宽,进而第一运算数与第二运算数进行相乘运算所获得的乘积的位宽最大为2×N1。由于第一运算模块中的具有前后相邻位置关系的两个第一运算数(未扩展的原第一运算数)之间间隔了N1比特的零(由于扩展而添加的零比特位),因此,本申请对第一运算模块与第二运算数进行相乘运算的过程,其实质上是对不同第一运算数与第二运算数之间分别进行相乘运算的过程,且不同第一运算数与第二运算数之间的相乘运算不会相互干扰,由此可知,本申请使第一运算模块和第二运算数进行相乘运算,其实质上是利用一次相乘运算实现了至少两次相乘运算。
续前例,本申请在使32比特的第一运算模块m1与8比特的第二运算数c(可以为扩展为32比特的第二运算数c)进行相乘运算后,可以获得32比特的乘积。由于32比特的第一运算模块m1中的第一运算数a和第一运算数b分别占据了第一运算模块m1中的最高8比特位以及最低8比特位,第一运算数a和第一运算数b之间间隔了8比特位的零,且8比特的第一运算数与8比特的第二运算数的乘积的位宽为16比特,因此,在本申请针对32比特的第一运算模块m1与8比特的第二运算数c进行相乘运算所获得的32比特的乘积中,最高16比特为第一运算数a与第二运算数c的乘积,而最低16比特为第一运算数b与第二运算数c的乘积。
S120、将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中。
在一个可选示例中,本申请中的步骤S120可以由处理器调用存储器中存储的用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的指令执行,也可以由被处理器运行的第二输入模块320执行。
在一个可选示例中,N4比特的第三运算数通常为带符号位的定点数。第二运算模块可以为数据处理器中的M比特的寄存器等存储单元。第二运算模块包括A个N2比特的第二运算单元。本申请中的N4不大于N2,在通常情况下,N2等于2×N4,N1、N3以及N4相等。本申请在将A个N4比特的第三运算数输入至第二运算模块中的时候,一个第三运算数位于一个第二运算单元中,不同的第三运算数位于不同的第二运算单元中。一个可选的例子,第二运算模块为32比特的寄存器,该寄存器包括两个16比特的第二运算单元,本申请可以将两个8比特的第三运算数分别输入至该寄存器的两个16比特的第二运算单元中。当然,第三运算数和第二运算单元的数量可以为三个或者更多。
在一个可选示例中,本申请可以通过对第三运算数扩展移位,并执行相加减的操作使A个N4比特的第三运算数输入至一个M比特的第二运算模块中,例如,本申请可以将两个8比特的第三运算数分别扩展为16比特的第三运算数,并将其中一个16比特的第三运算数输入第二运算模块中,左移16比特,使其位于第二运算模块中的高16比特的第二运算单元中;之后,在判断出另一个16比特的第三运算数与第二运算数同号的情况下,计算第二运算模块与另一个16比特的第三运算数之和,使另一个16比特的第三运算数位于第二运算模块中的低16比特的第二运算单元中;而在判断出另一个16比特的第三运算数与第二运算数异号的情况下,计算第二运算模块与另一个16比特的第三运算数之差,使另一个16比特的第三运算数在取负后位于第二运算模块中的低16比特的第二运算单元中。
下面以将8比特的第三运算数add_a和8比特的第三运算数add_b输入至一个32比特的第二运算模块为例,对本申请的将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的过程进行详细说明:
设定8比特的第三运算数add_a和8比特的第三运算数add_b均为带有符号位的定点数;
首先,本申请可以先将8比特的第三运算数add_a扩展为16比特的第三运算数add_a,即在8比特的第三运算数add_a的左侧添加8比特的零,形成16比特的第三运算数add_a;然后,本申请将16比特的第三运算数add_a输入至第二运算模块m3中,并左移16比特,使16比特的第三运算数add_a位于第二运算模块m3的最高16比特位中,此时的第二运算模块m3的最低16比特位均被设置为零;与此同时,本申请可以将8比特的第三运算数add_b扩展为16比特的第三运算数add_b,即在8比特的第三运算数add_b的左侧添加8比特的零,形成16比特的第三运算数add_b;然后,将16比特的第三运算数add_b输入第二运算模块m4中,使16比特的第三运算数add_b位于第二运算模块m4的最低16比特位中,此时的第二运算模块m4的最高16比特位均被设置为零;
其次,本申请针对第二运算模块m3与第二运算模块m4进行和计算,使16比特的第三运算数add_b位于第二运算模块m3的最低16比特位中。
另外,步骤S120与步骤S100和步骤S110之间没有先后执行顺序的限制,通常情况下,步骤S120可以与S100和步骤S110同时执行。
S130、将第一运算模块与第二运算模块进行相加运算,使本申请的方法实现乘加器。
在一个可选示例中,本申请中的步骤S130可以由处理器调用存储器中存储的用于将第一运算模块与第二运算模块进行相加运算的指令执行,也可以由被处理器运行的加运算模块330执行。
在一个可选示例中,由于M比特的第一运算模块m1中包含有多个第一运算数分别与第二运算数相乘的乘积,而M比特的第二运算模块中包含有相应数量的第三运算数,因此,本申请使相乘运算获得的M比特的第一运算模块m1与M比特的第二运算模块进行相加运算,其实质上是利用一次相加运算实现了至少两次相加运算。
续前例,在步骤S110获得的32比特的第一运算模块m1中,最高16比特为第一运算数a与第二运算数c的乘积,而最低16比特为第一运算数b与第二运算数c的乘积,而在步骤S120获得的32比特的第二运算模块m3中,最高8比特为0,最高9-16比特为第三运算数add_a,最高17-24比特为零,最低8比特为第三运算数add_b,从而本申请在执行第一运算模块m1与第二运算模块m3的相加运算时,可以一次性实现针对第一运算数a与第二运算数c的乘积与第三运算数add_a之和的运算,以及针对第一运算数b与第二运算数c的乘积与第三运算数add_b之和的运算。
S140、从第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
在一个可选示例中,本申请中的步骤S140可以由处理器调用存储器中存储的用于从第一运算模块的每一个第一运算单元中获取一个乘加运算结果的指令执行,也可以由被处理器运行的提取模块340执行。
在一个可选示例中,上述步骤S130的相加运算所获得的和中包含的乘加运算的结果的数量与第一运算数的数量相同,例如,在第一运算数的数量为2的情况下,上述步骤S130的相加运算所获得的和中包含有两个第一运算数的乘加运算的结果。
续前例,设定通过上述步骤S130的相加运算所获得的和为位于32比特的第二运算模块m3中的Multiply-Add,本申请可以将32比特的第二运算模块m3中的Multiply-Add中的最高16比特作为a×c+add_a的运算结果,并判断第一运算数b与第二运算数c是否同号,如果判断出第一运算数b与第二运算数c同号,则本申请将32比特的Multiply-Add中的最低16比特作为b×c+add_b的运算结果;如果判断出第一运算数b与第二运算数c异号,则本申请将32比特的Multiply-Add中的最低16比特取负后的数值作为b×c+add_b的运算结果。
需要特别说明的是,如果第一运算数、第二运算数以及第三运算数均为不带符号位的定点数,则本申请不需要执行判断是否同号的操作,本社区内可以直接将从相加运算获得的和(例如,上述Multiply-Add)中获取的不同比特位范围内的数值作为相应的第一运算数与第二运算数的乘积与相应的第三运算数之和。具体过程在此不再详细说明。
图2中,S200、将8比特的第一运算数a和8比特的第一运算数b输入第一运算模块中。
具体的,上述第一运算数a(即a[7]、a[6]、a[5]、a[4]、a[3]、a[2]、a[1]和a[0])和第一运算数b(即b[7]、b[6]、b[5]、b[4]、b[3]、b[2]、b[1]和b[0])均为带符号位的定点数。本申请可以先将第一运算数a扩展为16比特的第一运算数a′(即0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、a[7]、a[6]、a[5]、a[4]、a[3]、a[2]、a[1]和a[0]),并将16比特的第一运算数a′输入至32比特的第一运算模块m1中,并左移16比特,使32比特的第一运算模块m1中存储的内容为0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、a[7]、a[6]、a[5]、a[4]、a[3]、a[2]、a[1]、a[0]、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0;同时,本申请先将8比特的第一运算数b扩展为16比特的第一运算数b′(即0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、b[7]、b[6]、b[5]、b[4]、b[3]、b[2]、b[1]和b[0]),并将16比特的第一运算数b′输入至32比特的第一运算模块m2中,并左移16比特,使32比特的第一运算模块m2中存储的内容为0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、b[7]、b[6]、b[5]、b[4]、b[3]、b[2]、b[1]和b[0],然后,本申请判断第一运算数b与第二运算数c是否同号,如果第一运算数b与第二运算数c同号,则本申请计算第一运算模块m1与第一运算模块m2之和;如果第一运算数b与第二运算数c异号,则本申请计算第一运算模块m1与第一运算模块m2之差。上述0x0表示0。
S210、使第一运算模块m1和8比特的第二运算数c进行相乘运算,获得32比特的乘积Multiply。
具体的,上述第二运算数c(即c[7]、c[6]、c[5]、c[4]、c[3]、c[2]、c[1]和c[0])为带符号位的定点数,在相乘运算后,第一运算模块m1中的Multiply中的最高16比特(即前16比特)为第一运算数a与第二运算数c的乘积Multiply1,而最低16比特(即后16比特)为第一运算数b与第二运算数c的乘积Multiply2,且乘积Multiply2的符号位可能并不准确,有待后续步骤的校正。
S320、将8比特的第三运算数add_a和8比特的第三运算数add_b输入第二运算模块。
具体的,上述第三运算数add_a(即add_a[7]、add_a[6]、add_a[5]、add_a[4]、add_a[3]、add_a[2]、add_a[1]和add_a[0])和第三运算数add_b(即add_b[7]、add_b[6]、add_b[5]、add_b[4]、add_b[3]、add_b[2]、add_b[1]和add_b[0])均为带符号位的定点数。本申请可以先将第三运算数add_a扩展为16比特的第三运算数add_a′(即0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、add_a[7]、add_a[6]、add_a[5]、add_a[4]、add_a[3]、add_a[2]、add_a[1]和add_a[0]),并将16比特的第三运算数add_a′输入第二运算模块m3中,并左移16比特,使第二运算模块m3中存储的内容为0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、add_a[7]、add_a[6]、add_a[5]、add_a[4]、add_a[3]、add_a[2]、add_a[1]、add_a[0])、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0和0x0,与此同时,本申请可以将8比特的第三运算数add_b输入第二运算模块m4中,使第二运算模块m4中存储的内容为0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、add_b[7]、add_b[6]、add_b[5]、add_b[4]、add_b[3]、add_b[2]、add_b[1]和add_b[0];然后,本申请计算第二运算模块m3与第二运算模块m4之和,使第二运算模块m3中存储的内容更新为0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、add_a[7]、add_a[6]、add_a[5]、add_a[4]、add_a[3]、add_a[2]、add_a[1]、add_a[0]、0x0、0x0、0x0、0x0、0x0、0x0、0x0、0x0、add_b[7]、add_b[6]、add_b[5]、add_b[4]、add_b[3]、add_b[2]、add_b[1]和add_b[0]。
S230、使第一运算模块与第二运算模块进行相加运算,获得32比特的和Multiply-add。
具体的,在32比特的第一运算模块m1中,最高16比特为第一运算数a与第二运算数c的乘积,而最低16比特为第一运算数b与第二运算数c的乘积,在32比特的第二运算模块m3中,最高8比特为0,最高9-16比特为第三运算数add_a,最高17-24比特为零,最低8比特为第三运算数add_b,从而在执行第一运算模块m1与第二运算模块m3的相加运算后,可以一次性实现针对第一运算数a与第二运算数c的乘积与第三运算数add_a之和的运算,以及针对第一运算数b与第二运算数c的乘积与第三运算数add_b之和的运算。
本申请中的存储于第一运算模块m1中的Multiply-add可以表示为MA[31]、MA[30]、MA[29]、MA[28]、MA[27]、MA[26]、MA[25]、MA[24]、MA[23]、MA[22]、MA[21]、MA[20]、MA[19]、MA[18]、MA[17]、MA[16]、MA[15]、MA[14]、MA[13]、MA[12]、MA[11]、MA[10]、MA[09]、MA[08]、MA[07]、MA[06]、MA[05]、MA[04]、MA[03]、MA[02]、MA[01]和MA[00]。
S240、从相加运算后的第一运算模块m1中获取第一运算数a与第二运算数c的乘积与第三运算数add_a之和、以及第一运算数b与第二运算数c的乘积与第三运算数add_b之和。
具体的,本申请可以将第一运算模块m1中存储的32比特的Multiply-add中最高16比特作为a×c+add_a的运算结果(即MA[31]、MA[30]、MA[29]、MA[28]、MA[27]、MA[26]、MA[25]、MA[24]、MA[23]、MA[22]、MA[21]、MA[20]、MA[19]、MA[18]、MA[17])。在第一运算数b与第二运算数c同号的情况下,本申请可以将第一运算模块m1中存储的32比特的Multiply-Add中的最低16比特作为b×c+add_b的运算结果(即MA[16]、MA[15]、MA[14]、MA[13]、MA[12]、MA[11]、MA[10]、MA[09]、MA[08]、MA[07]、MA[06]、MA[05]、MA[04]、MA[03]、MA[02]、MA[01]和MA[00]);而在第一运算数b与第二运算数c异号的情况下,本申请可以将第一运算模块m1中存储的32比特的Multiply-Add中的最低16比特取负后的数值作为b×c+add_b的运算结果。
在一个可选的示例中,本申请的计算机可读存储介质可以为闪存、缓存、硬盘或者如图4所示的光盘400等。计算机可读存储介质上存储有能够被执行的计算机程序(即程序产品),计算机程序在被处理器执行时,会实现上述方法示例中所记载的各步骤;例如,将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果;其中,所述N2不小于N1与N3之和。将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;且在将所述第一运算模块与N3比特的第二运算数进行相乘运算之后,将所述第一运算模块与第二运算模块进行相加运算,从而实现乘加器;从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
上述各步骤的具体实现方式可以参见上述实施方式中的相关描述,在此不再重复说明。
示例性设备
图5示出了适于实现本申请的示例性设备500,设备500可以是移动终端(例如,智能移动电话等)、个人计算机(PC,例如,台式计算机或者笔记型计算机等)、平板电脑以及服务器等。图5中,设备500包括一个或者多个处理器、通信部等,所述一个或者多个处理器可以为:一个或者多个中央处理单元(CPU)501,和/或,一个或者多个图像处理器(GPU)513等,处理器可以根据存储在只读存储器(ROM)502中的可执行指令或者从存储部分508加载到随机访问存储器(RAM)503中的可执行指令而执行各种适当的动作和处理。通信部512可以包括但不限于网卡,所述网卡可以包括但不限于IB(Infiniband)网卡。处理器可与只读存储器502和/或随机访问存储器530中通信以执行可执行指令,通过总线504与通信部512相连、并经通信部512与其他目标设备通信,从而完成本申请中的相应步骤。
在一个可选的示例中,处理器所执行的步骤包括:将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果;其中,所述N2不小于N1与N3之和。将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;且在将所述第一运算模块与N3比特的第二运算数进行相乘运算之后,将所述第一运算模块与第二运算模块进行相加运算,从而实现乘加器;从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
此外,在RAM 503中,还可以存储有装置操作所需的各种程序以及数据。CPU501、ROM502以及RAM503通过总线504彼此相连。在有RAM503的情况下,ROM502为可选模块。RAM503存储可执行指令,或在运行时向ROM502中写入可执行指令,可执行指令使中央处理单元501执行上述物体分割方法所包括的步骤。输入/输出(I/O)接口505也连接至总线504。通信部512可以集成设置,也可以设置为具有多个子模块(例如,多个IB网卡),并分别与总线连接。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装在存储部分508中。
需要特别说明的是,如图5所示的架构仅为一种可选实现方式,在具体实践过程中,可根据实际需要对上述图5的部件数量和类型进行选择、删减、增加或替换;在不同功能部件设置上,也可采用分离设置或集成设置等实现方式,例如,GPU和CPU可分离设置,再如理,可将GPU集成在CPU上,通信部可分离设置,也可集成设置在CPU或GPU上等。这些可替换的实施方式均落入本申请的保护范围。
特别地,根据本申请的实施方式,上文参考流程图描述的过程可以被实现为计算机软件程序,例如,本申请实施方式包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,计算机程序包含用于执行流程图所示的步骤的程序代码,程序代码可包括对应执行本申请提供的步骤对应的指令。在这样的实施方式中,该计算机程序可以通过通信部分509从网络上被下载及安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本申请中记载的上述指令。
应用场景总览
首先参考图6,示意性地示出了根据本申请实施方式的可以在其中实现的应用场景。
由于FPGA具有低功耗、可重定义以及可根据具体的深度学习算法定制其芯片结构等特点,而在图像处理以及语音识别等需要进行大量数据分析的技术领域中得到了较为广泛的应用。
图6中的FPGA600的内部通常设置有专门针对定点乘加运算而设计的多个乘加器(例如,由一个DSP模块实现一个乘加器),这使得FPGA600在基于定点数相乘的乘加运算方面,具有一定的优势,从而使FPGA600非常适于完成卷积神经网络中的卷积层的定点数乘加运算。
考虑到兼容性等因素,目前的FPGA中的乘加器大多是针对高位宽(相较于8比特等而言)定点数的乘加运算而设计的,例如,FPGA600中设置有大量的支持25位定点数或18位定点数相乘且由DSP模块实现的乘加器,从而在FPGA600的一个时钟周期内,FPGA600中的任意一个DSP模块均可以完成一次高位宽定点数的乘加运算。一个具体的例子,设定FPGA600中设置有n个针对高位宽定点数的乘加运算而设计的DSP,设定FPGA600接收到n组输入,第一组输入包括:第二运算数A1、第二运算数C以及加数ADD1,……,第n组输入包括:第二运算数An、第二运算数C以及加数ADDn,在FPGA600的一个时钟周期内,n个DSP模块分别针对各自对应的一组输入执行乘加运算,从而FPGA600可以在一个时钟周期内获得n个乘加运算结果,即第一乘加运算结果、……以及第n乘加运算结果。
然而,鉴于目前有些卷积神经网络中的卷积层对于低位宽(例如,8比特位宽等)定点数的乘加运算的计算需求,如果直接使用针对高位宽(如25比特或者18比特)定点数的乘加运算而设计的FPGA600来实现低位宽定点数的乘加运算,则FPGA600中的各乘加器中会存在较多空位(如第二运算数、第二运算数以及加数等会被填充多个比特位的零,从而浪费了FPGA600的计算资源。
本申请提供的用于实现乘加器的技术方案可以使针对高位宽定点数乘加运算而设计的FPGA600中的任意一个乘加器(如DSP模块)在一个时钟周期内完成至少两次低位宽定点数的乘加运算,从而不仅可以满足卷积神经网络中的卷积层对于低位宽(例如,8比特位宽等)定点数乘加运算的计算需求,还可以在较大程度上提高乘加运算的计算效率,进而非常有利于降低卷积层所消耗的时间,最终本申请提供的技术方案有利于降低整个卷积神经网络的in-out时间。
然而,本领域技术人员完全可以理解,本申请实施方式的适用场景不受到该框架任何方面的限制,例如,本申请中的乘加器不仅可以为FPGA600中的乘加器,也可以为其他形式的数据处理器中的乘加器等。
可能以许多方式来实现本申请的方法和装置、电子设备以及计算机可读存储介质。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本申请的方法和装置、电子设备以及计算机可读存储介质。用于方法的步骤的上述顺序仅是为了进行说明,本申请的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施方式中,还可将本申请实施为记录在记录介质中的程序,这些程序包括用于实现根据本申请的方法的机器可读指令。因而,本申请还覆盖存储用于执行根据本申请的方法的程序的记录介质。
本申请的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本申请限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施方式是为了更好说明本申请的原理和实际应用,并且使本领域的普通技术人员能够理解本申请从而设计适于特定用途的带有各种修改的各种实施方式。

Claims (29)

1.一种基于深度学习的运算实现方法,其特征在于,包括:
将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;其中,通过对所述第一运算数扩展移位,并执行相加减的操作使所述A个N1比特的第一运算数输入至一个M比特的第一运算模块中;
将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果;
其中,所述N2不小于N1与N3之和。
2.根据权利要求1所述的方法,其特征在于,所述第一运算数和第二运算数分别为:带符号位的定点数。
3.根据权利要求2所述的方法,其特征在于,所述N1与N3相等,所述N2等于N1与N3之和。
4.根据权利要求1至3中任一项所述的方法,其特征在于:
所述A个N1比特的第一运算数包括:两个8比特的第一运算数;
所述N2比特的第一运算单元包括:16比特的第一运算单元;
所述N3比特的第二运算数包括:8比特的第二运算数;
所述M比特的第一运算模块包括:32比特的第一运算模块。
5.根据权利要求4所述的方法,其特征在于,所述将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的步骤包括:
将两个8比特的第一运算数分别扩展为16比特的第一运算数,将其中一个16比特的第一运算数输入第一运算模块中,并左移16比特,使其位于第一运算模块中的高16比特的第一运算单元中;
在判断出另一个16比特的第一运算数与第二运算数同号的情况下,计算第一运算模块与另一个16比特的第一运算数之和,使另一个16比特的第一运算数位于第一运算模块中的低16比特的第一运算单元中;
在判断出另一个16比特的第一运算数与第二运算数异号的情况下,计算第一运算模块与另一个16比特的第一运算数之差,使另一个16比特的第一运算数在取负后位于第一运算模块中的低16比特的第一运算单元中。
6.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;
且所述方法在将所述第一运算模块与N3比特的第二运算数进行相乘运算之后还包括:
将所述第一运算模块与第二运算模块进行相加运算,使所述方法实现乘加器;
从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
7.根据权利要求6所述的方法,其特征在于,所述N1、N3以及N4相等。
8.根据权利要求7所述的方法,其特征在于,所述将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的步骤包括:
将两个8比特的第三运算数分别扩展为16比特的第三运算数,将其中一个16比特的第三运算数输入第二运算模块中,并左移16比特,使其位于第二运算模块中的高16比特的第二运算单元中;
计算第二运算模块与另一个16比特的第三运算数之和,使另一个16比特的第三运算数位于第二运算模块中的低16比特的第二运算单元中。
9.根据权利要求7所述的方法,其特征在于,所述从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果的步骤包括:
将32比特的第一运算模块中的高16比特的第一运算单元中的数作为一个乘加运算结果;
在相应第一运算数与第二运算数同号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数作为另一个乘加运算结果;
在相应第一运算数与第二运算数异号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数取负后作为另一个乘加运算结果。
10.根据权利要求6所述的方法,其特征在于,所述实现乘加器的方法通过高层次综合HLS语言实现。
11.根据权利要求7至9中任一权利要求所述的方法,其特征在于,所述实现乘加器的方法通过高层次综合HLS语言实现。
12.根据权利要求6所述的方法,其特征在于,一个所述乘加器形成FPGA中的一个数字信号处理DSP模块。
13.根据权利要求7至9中任一权利要求所述的方法,其特征在于,一个所述乘加器形成FPGA中的一个数字信号处理DSP模块。
14.一种基于深度学习的运算实现装置,其特征在于,包括:
第一输入模块,用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;其中,通过对所述第一运算数扩展移位,并执行相加减的操作使所述A个N1比特的第一运算数输入至一个M比特的第一运算模块中;
乘运算模块,用于将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令;
其中,所述N2不小于N1与N3之和。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
第二输入模块,用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;
加运算模块,用于在乘运算模块将所述第一运算模块与N3比特的第二运算数进行相乘运算之后,将第一运算模块与第二运算模块进行相加运算,使所述装置实现乘加器;
提取模块,用于从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果。
16.一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,下述指令被运行:
用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令,其中,所述第一运算模块包括A个N2比特的第一运算单元,一个第一运算单元被输入一第一运算数,M不小于A与N2的乘积;其中,通过对所述第一运算数扩展移位,并执行相加减的操作使所述A个N1比特的第一运算数输入至一个M比特的第一运算模块中;
用于将所述第一运算模块与N3比特的第二运算数进行相乘运算,使所述第一运算模块中的一个第一运算单元获得一个相乘运算结果的指令;
其中,所述N2不小于N1与N3之和。
17.根据权利要求16所述的电子设备,其特征在于,所述第一运算数和第二运算数分别为:带符号位的定点数。
18.根据权利要求17所述的电子设备,其特征在于,所述N1与N3相等,所述N2等于N1与N3之和。
19.根据权利要求16至18中任一项所述的电子设备,其特征在于:
所述A个N1比特的第一运算数包括:两个8比特的第一运算数;
所述N2比特的第一运算单元包括:16比特的第一运算单元;
所述N3比特的第二运算数包括:8比特的第二运算数;
所述M比特的第一运算模块包括:32比特的第一运算模块。
20.根据权利要求19所述的电子设备,其特征在于,所述用于将A个N1比特的第一运算数输入至数据处理器的M比特的第一运算模块中的指令包括:
用于将两个8比特的第一运算数分别扩展为16比特的第一运算数,将其中一个16比特的第一运算数输入第一运算模块中,并左移16比特,使其位于第一运算模块中的高16比特的第一运算单元中的指令;
用于在判断出另一个16比特的第一运算数与第二运算数同号的情况下,计算第一运算模块与另一个16比特的第一运算数之和,使另一个16比特的第一运算数位于第一运算模块中的低16比特的第一运算单元中的指令;
用于在判断出另一个16比特的第一运算数与第二运算数异号的情况下,计算第一运算模块与另一个16比特的第一运算数之差,使另一个16比特的第一运算数在取负后位于第一运算模块中的低16比特的第一运算单元中的指令。
21.根据权利要求16至18中任一项所述的电子设备,其特征在于,所述电子设备还包括:
用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的指令;其中,所述第二运算模块包括A个N2比特的第二运算单元,一个第二运算单元被输入一第三运算数,N4不大于N2;
用于在将所述第一运算模块与N3比特的第二运算数进行相乘运算之后,将所述第一运算模块与第二运算模块进行相加运算,使所述电子设备实现乘加器;
用于从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果的指令。
22.根据权利要求21所述的电子设备,其特征在于,所述N1、N3以及N4相等。
23.根据权利要求22所述的电子设备,其特征在于,所述用于将A个N4比特的第三运算数输入至数据处理器的M比特的第二运算模块中的指令包括:
用于将两个8比特的第三运算数分别扩展为16比特的第三运算数,将其中一个16比特的第三运算数输入第二运算模块中,并左移16比特,使其位于第二运算模块中的高16比特的第二运算单元中的指令;
用于计算第二运算模块与另一个16比特的第三运算数之和,使另一个16比特的第三运算数位于第二运算模块中的低16比特的第二运算单元中的指令。
24.根据权利要求22所述的电子设备,其特征在于,所述用于从所述第一运算模块的每一个第一运算单元中获取一个乘加运算结果的指令包括:
用于将32比特的第一运算模块中的高16比特的第一运算单元中的数作为一个乘加运算结果的指令;
用于在相应第一运算数与第二运算数同号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数作为另一个乘加运算结果的指令;
用于在相应第一运算数与第二运算数异号的情况下,将32比特的第一运算模块中的低16比特的第一运算单元中的数取负后作为另一个乘加运算结果的指令。
25.根据权利要求21所述的电子设备,其特征在于,所述乘加器通过高层次综合HLS语言实现。
26.根据权利要求22至24中任一权利要求所述的电子设备,其特征在于,所述乘加器通过高层次综合HLS语言实现。
27.根据权利要求21所述的电子设备,其特征在于,一个所述乘加器形成FPGA中的一个数字信号处理DSP模块。
28.根据权利要求22至24中任一权利要求所述的电子设备,其特征在于,一个所述乘加器形成FPGA中的一个数字信号处理DSP模块。
29.一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述权利要求1-13中任一项所述的方法。
CN201710906965.0A 2017-09-29 2017-09-29 基于深度学习的运算实现方法、装置和电子设备 Active CN108229668B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710906965.0A CN108229668B (zh) 2017-09-29 2017-09-29 基于深度学习的运算实现方法、装置和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710906965.0A CN108229668B (zh) 2017-09-29 2017-09-29 基于深度学习的运算实现方法、装置和电子设备

Publications (2)

Publication Number Publication Date
CN108229668A CN108229668A (zh) 2018-06-29
CN108229668B true CN108229668B (zh) 2020-07-07

Family

ID=62655465

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710906965.0A Active CN108229668B (zh) 2017-09-29 2017-09-29 基于深度学习的运算实现方法、装置和电子设备

Country Status (1)

Country Link
CN (1) CN108229668B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110276072B (zh) * 2019-06-10 2021-07-23 湖北亿咖通科技有限公司 电子设备、存储介质及基于神经网络的语义意图识别方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1478257A (zh) * 2000-09-29 2004-02-25 国际商业机器公司 使得能够每寄存器处理多个带符号独立数据元的装置、方法和编译器
CN1560731A (zh) * 2004-03-03 2005-01-05 浙江大学 32位媒体数字信号处理器
CN1584821A (zh) * 2003-08-19 2005-02-23 中国科学院微电子中心 并行处理的可分割的乘法累加单元
CN103677737A (zh) * 2013-09-26 2014-03-26 中国人民解放军国防科学技术大学 基于进位节省加法器的低延时cordic三角函数实现的方法及装置
CN105892988A (zh) * 2016-04-26 2016-08-24 广州致远电子股份有限公司 一种基于fpga的运算电路、示波器和测量仪器
CN106127302A (zh) * 2016-06-23 2016-11-16 杭州华为数字技术有限公司 处理数据的电路、图像处理系统、处理数据的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102325602B1 (ko) * 2015-07-06 2021-11-12 삼성전자주식회사 데이터를 병렬적으로 처리하는 장치 및 방법

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1478257A (zh) * 2000-09-29 2004-02-25 国际商业机器公司 使得能够每寄存器处理多个带符号独立数据元的装置、方法和编译器
CN1584821A (zh) * 2003-08-19 2005-02-23 中国科学院微电子中心 并行处理的可分割的乘法累加单元
CN1560731A (zh) * 2004-03-03 2005-01-05 浙江大学 32位媒体数字信号处理器
CN103677737A (zh) * 2013-09-26 2014-03-26 中国人民解放军国防科学技术大学 基于进位节省加法器的低延时cordic三角函数实现的方法及装置
CN105892988A (zh) * 2016-04-26 2016-08-24 广州致远电子股份有限公司 一种基于fpga的运算电路、示波器和测量仪器
CN106127302A (zh) * 2016-06-23 2016-11-16 杭州华为数字技术有限公司 处理数据的电路、图像处理系统、处理数据的方法和装置

Also Published As

Publication number Publication date
CN108229668A (zh) 2018-06-29

Similar Documents

Publication Publication Date Title
US10679127B2 (en) Performing average pooling in hardware
US10929746B2 (en) Low-power hardware acceleration method and system for convolution neural network computation
US10032110B2 (en) Performing average pooling in hardware
CN108229648B (zh) 匹配存储器中数据位宽的卷积计算方法和装置、设备、介质
CN112506935B (zh) 数据处理方法、装置、电子设备、存储介质及程序产品
US10747501B2 (en) Providing efficient floating-point operations using matrix processors in processor-based systems
US20200389182A1 (en) Data conversion method and apparatus
US11651198B2 (en) Data processing method and apparatus for neural network
US20220291901A1 (en) Data processing method for processing unit, electronic device and computer readable storage medium
US8694573B2 (en) Method and system for determining a quotient value
TW202109281A (zh) 帶正負號多字乘法器
CN108229668B (zh) 基于深度学习的运算实现方法、装置和电子设备
US20230161555A1 (en) System and method performing floating-point operations
CN116795324A (zh) 混合精度浮点乘法装置和混合精度浮点数处理方法
US9612800B2 (en) Implementing a square root operation in a computer system
US7747669B2 (en) Rounding of binary integers
CN111930674A (zh) 乘累加运算装置及方法、异构智能处理器及电子设备
CN113420841B (zh) 有毒样本数据生成方法及装置
US9141586B2 (en) Method, apparatus, system for single-path floating-point rounding flow that supports generation of normals/denormals and associated status flags
US20220291899A1 (en) Processing unit, method and computer program for multiplication
CN115718586A (zh) 像素颜色混合操作方法、图形绘制方法、装置和设备
JP2000311159A (ja) 確率過程の出力装置、出力方法、および、情報記録媒体
CN117908831A (zh) 数据处理方法、处理阵列及处理装置
CN116661735A (zh) 数据处理装置、方法、电子设备和存储介质
CN118312130A (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
GR01 Patent grant
GR01 Patent grant