CN117827282A - 指令生成方法、数据处理的方法及电子设备 - Google Patents

指令生成方法、数据处理的方法及电子设备 Download PDF

Info

Publication number
CN117827282A
CN117827282A CN202311864215.3A CN202311864215A CN117827282A CN 117827282 A CN117827282 A CN 117827282A CN 202311864215 A CN202311864215 A CN 202311864215A CN 117827282 A CN117827282 A CN 117827282A
Authority
CN
China
Prior art keywords
data
sub
neural network
network processor
processing
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
CN202311864215.3A
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.)
Beijing Horizon Information Technology Co Ltd
Original Assignee
Beijing Horizon 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 Beijing Horizon Information Technology Co Ltd filed Critical Beijing Horizon Information Technology Co Ltd
Priority to CN202311864215.3A priority Critical patent/CN117827282A/zh
Publication of CN117827282A publication Critical patent/CN117827282A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本公开提供了一种指令生成方法、数据处理的方法及电子设备。该指令生成方法中,首先确定执行数据处理的神经网络处理器的硬件参数;确定待处理数据的数据参数,该数据参数包括待处理数据的数据类型和数据位数,数据类型包括:有符号整型和无符号整型;基于硬件参数和数据参数,生成神经网络处理器可执行的用于数据处理的指令。本公开在生成神经网络处理器可执行的用于数据处理的指令时,综合考虑了该神经网络处理器的硬件参数和待处理数据的数据参数。因此,本公开能够解决在神经网络处理器不支持对高位数的有符号整型数据进行数据处理的情况下,所存在的数据处理结果准确度差的问题,能够满足对较高位数的有符号整型数据进行数据处理的需求。

Description

指令生成方法、数据处理的方法及电子设备
技术领域
本公开涉及数据处理技术领域,尤其涉及一种指令生成方法、数据处理的方法及电子设备。
背景技术
目前,多种领域均涉及到数据处理的任务,例如,在图像处理领域中,有时需要对图像数据进行处理;在智能驾驶领域,有时需要对图像数据和雷达点云数据等进行处理。并且随着科技水平的发展,需要处理的数据日益多样化,相应的需要处理的数据的位数越来越高。例如,有些场景下,之前需要处理的数据为有符号整型的8位数据,而目前往往需要处理有符号整型的16位数据。
发明内容
为了满足较高位数的数据的处理需求,本公开提供一种用于神经网络处理器进行数据处理的方法、数据处理的方法及电子设备。
本公开的第一个方面,提供了一种用于神经网络处理器进行数据处理的指令生成方法,包括:
确定执行数据处理的神经网络处理器的硬件参数;
确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
基于所述硬件参数和所述数据参数,生成所述神经网络处理器可执行的用于数据处理的指令。
本公开的第二个方面,提供了一种数据处理的方法,包括:
确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
基于所述数据参数和所述神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令;
基于所述指令对所述待处理数据进行数据处理,得到数据处理后的数据。
本公开的第三个方面,提供了一种用于神经网络处理器进行数据处理的指令生成装置,包括:
第一确定模块,用于确定执行数据处理的神经网络处理器的硬件参数;
第二确定模块,用于确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
指令生成模块,用于基于所述第一确定模块确定的所述硬件参数和所述第二确定模块确定的所述数据参数,生成所述神经网络处理器可执行的用于数据处理的指令。
本公开的第四个方面,提供了一种数据处理的装置,包括:
参数确定模块,用于确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
指令确定模块,用于基于所述参数确定模块确定的所述数据参数和所述神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令;
数据处理模块,用于基于所述指令确定模块确定的所述指令对所述待处理数据进行处理,得到数据处理后的数据。
本公开的第五个方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行本公开的第一个方面所述的用于神经网络处理器进行数据处理的指令生成方法,或者,执行本公开的第二个方面所述的数据处理的方法。
本公开的第五个方面,提供了一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现本公开的第一个方面所述的用于神经网络处理器进行数据处理的指令生成方法,或者,实现本公开的第二个方面所述的数据处理的方法。
本公开实施例提供的用于神经网络处理器进行数据处理的指令生成方法,在生成神经网络处理器可执行的用于数据处理的指令时,综合考虑了该神经网络处理器的硬件参数和待处理数据的数据参数,而该数据参数包括数据类型和数据位数。因此,本公开能够解决神经网络处理器不支持对高位数的有符号整型数据进行数据处理的问题,从而满足对较高位数的有符号整型数据进行数据处理的需求。
其中,该数据处理可包括运算处理(例如乘法运算或加法运算等),这种情况下,通过本公开实施例提供的方案,能够使神经网络处理器对高位数的有符号整型数据进行运算,提高运算的准确度,满足神经网络处理器对较高位数的有符号整型数据进行运算的需求。
附图说明
图1(a)是本公开所适用的一种系统的示例性结构图。
图1(b)是本公开一示例性实施例提供的一种电子设备的结构示意图。
图1(c)是本公开一示例性实施例提供的另一种电子设备的结构示意图。
图2是本公开一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。
图3是本公开另一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。
图4是本公开另一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。
图5是本公开另一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。
图6是本公开另一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。
图7是本公开另一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。
图8是本公开一示例性实施例提供的数据处理的方法的流程示意图。
图9是本公开另一示例性实施例提供的数据处理的方法的流程示意图。
图10是本公开一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成装置的结构图。
图11是本公开一示例性实施例提供的数据处理的装置的结构图。
图12是本公开一示例性实施例提供的电子设备的结构图。
具体实施方式
为了解释本公开,下面将参考附图详细地描述本公开的示例实施例,显然,所描述的实施例仅是本公开的一部分实施例,而不是全部实施例,应理解,本公开不受示例性实施例的限制。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
申请概述
随着科学技术的不断发展,人工智能在人们的生活中的应用越来越普遍。在人工智能技术中,经常会应用神经网络处理器。另外,神经网络处理器中通常设置有大量的乘累加(Multiply Accumulate,简称MAC)单元,该单元可用于对神经网络处理器获取的数据进行处理,例如,对数据进行运算(例如乘法运算或加法运算等)。
另外,随着神经网络处理器应用领域的日益广泛,神经网络处理器需要进行运算的数据的种类也日益增加,例如,该数据可包括图像数据、点云数据、语音数据等。
其中,数据的类型可划分为有符号(signed)整型和无符号(unsigned)整型。有符号整型的数据可表示为intX,X为该数据的数据位数,并且,该数据的最高位用于表示该数据的正负,如果该数据的最高位为1,表示该数据为负数,如果该数据的最高位为0,表示该数据为正数。
例如,int8表示8位有符号整型数据,占1个字节,比特值为8,int8类型数据的取值范围是[-128,127];int16表示16位有符号整型数据,占2个字节,比特值为16,其取值范围是[-32768,32767];int32表示32位有符号整型数据,占4个字节,比特值为32,取值范围是[-2147483648,2147483647];int64表示64位有符号整型数据,占8个字节,比特值为64,取值范围为[-9223372036854775808,9223372036854775807]。
无符号整型的数据可表示为uintY,Y为该数据的数据位数,并且,该数据仅用于表示0和正数。
例如,uint8表示8位无符号整型数据,取值范围为[0,255];uint16表示16位无符号整型数据,取值范围为[0,65535];uint32表示32位无符号整型数据,取值范围为[0,4294967295];uint64表示64位无符号整型数据,取值范围为[0,18446744073709551615]。
在相关技术中,神经网络处理器通常仅支持对int8类型的数据进行乘法运算,即神经网络处理器在进行“C=A*B”这一乘法运算时,需要A和B均为int8类型的数据。
但是,随着对算法精度要求的日益提高,有些情况下,神经网络处理器还需要对更高位数的有符号整型数据进行运算。例如,有时需要神经网络处理器对int16类型的数据、int32类型的数据或其他更高位数的有符号整型数据进行运算。
而神经网络处理器往往不支持对更高位数的有符号整型数据进行运算,即使通过该神经网络处理器对高位数的有符号整型数据进行运算,得到的运算结果与实际结果之间也会存在较大差距,因此神经网络处理器无法满足对更高位数的有符号整型数据进行运算的需求。
例如,在神经网络处理器仅能够支持对int8类型的数据进行运算的情况下,如果需要神经网络处理器对int16类型的数据进行运算,则神经网络处理器往往会将int16类型的数据看作int8类型的数据并进行运算,导致得到的运算结果准确度较差。
示例性设备
参见图1(a),本公开实施例涉及到编译侧设备10和运行侧设备20,其中,编译侧设备10用于生成神经网络处理器可执行的指令,运行侧设备20用于通过运行编译侧设备提供的指令执行相应的运算,这些运算包括但不限于:乘法运算或加法运算等。
在一些实施例中,编译侧设备10可以包括但不限于个人计算机、服务器计算机、多处理器系统、基于微处理器的系统等。
在一些实施例中,运行侧设备20可以包括但不限于神经网络处理器或者神经网络芯片等。
图1(b)为本公开实施例提供的一种编译侧设备10的结构示意图,如图1(b)所示,编译侧设备10包括至少一个处理器11和存储器12。
处理器11用于执行本公开实施例中的用于神经网络处理器的指令生成方法,该处理器11可以为支持神经网络指令序列编译的处理器,或者具有编译处理能力和/或指令执行能力的其他形式的处理单元。
存储器12可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器11可以运行程序指令,以实现下文的用于神经网络处理器进行数据处理的指令生成方法。
在一些实施例中,如图1(b)所示,编译侧设备10还可以包括输入装置13和输出装置14。输入装置13可以包括例如键盘、鼠标等等,可供编译人员输入神经网络的参数,例如,神经网络每层的输入特征图的尺寸、输出特征图的尺寸、卷积核等,以及,还可输入待处理数据等。输出装置14可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等,可供编译人员查看编译的最终结果或编译过程中的中间数据等。
需要说明的是,本公开实施例对于编译侧设备10的具体结构不作限定,编译侧设备10可以包括比图1(b)所示的更多或更少的部件。例如,编译侧设备10还可以包括总线、输入/输出接口等组件。
图1(c)为本公开实施例提供的一种运行侧设备20的结构示意图,如图1(c)所示,运行侧设备20可以包括:控制单元21和计算单元22,控制单元21用于运行指令以控制计算单元22执行数据处理,在本申请中,该数据处理可包括数据运算(例如乘法运算、加法运算等)。
在一些实施例中,运行侧设备20还可以包括缓冲存储器23和片外存储器24。缓冲存储器23可以包括一个或多个独立的缓存存储器或者具有数据高速缓存能力的处理单元,并且可以在控制单元21的控制下对片外存储器24进行访存。片外存储器24可以包括一个或多个独立的存储器或者具有数据存储能力的处理单元,并且可以在控制单元21的控制下供缓冲存储器23进行访存。
需要说明的是,本公开实施例对于运行侧设备20的具体结构不作限定,运行侧设备20可以包括比图1(c)所示的更多或更少的部件。例如,运行侧设备20还可以包括总线等组件。
示例性方法1
图2是本公开一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成方法的流程示意图。本实施例可应用在编译侧设备上,如图2所示,包括如下步骤:
步骤201,确定执行数据处理的神经网络处理器的硬件参数。
神经网络处理器可以为任意一种能够进行运算的处理器。示例性的,该神经网络处理器可包括大脑处理器(brain processing unit,BPU)、神经网络处理器(neuralnetwork processing unit,NPU)等。在本公开中,神经网络处理器还可为其他类型的处理器,本公开对此不作限定。
其中,神经网络处理器的硬件参数包括对数据进行运算这一处理的硬件参数,例如,该硬件参数可包括该神经网络处理器支持进行运算的数据的数据类型和数据位数。
例如,如果神经网络处理器支持进行运算的数据为int8的数据,则该神经网络处理器的硬件参数为支持对有符号整型并且数据位数为8位的数据进行运算。
步骤202,确定待处理数据的数据参数,数据参数包括待处理数据的数据类型和数据位数,数据类型包括:有符号整型和无符号整型。
例如,如果待处理数据为int16类型的数据,则该待处理数据的数据类型为有符号整型,数据位数为16位;如果待处理数据为int32类型的数据,则该待处理数据的数据类型为有符号整型,数据位数为32位。
其中,待处理数据可为图像数据或点云数据,当然也可为其他数据,本公开对此不作限定。
步骤203,基于硬件参数和数据参数,生成神经网络处理器可执行的用于数据处理的指令。
在一种可行的设计中,神经网络处理器进行的数据处理为运算,该神经网络处理器可执行的用于数据处理的指令可使神经网络处理器对待处理数据进行运算,并得到准确的运算结果。
进一步的,在编译侧设备生成神经网络处理器可执行的用于数据处理的指令之后,运行侧设备还可基于该指令对待处理数据进行处理,以得到相应的数据处理结果。
本公开实施例提供的用于神经网络处理器进行数据处理的指令生成方法,在生成神经网络处理器可执行的用于数据处理的指令时,综合考虑了该神经网络处理器的硬件参数和待处理数据的数据参数。因此,本公开能够解决在神经网络处理器不支持对高位数的有符号整型数据进行数据处理的情况下,所存在的数据处理结果准确度差的问题,能够满足对较高位数的有符号整型数据进行数据处理的需求。
其中,该数据处理可包括运算处理,这种情况下,通过本公开实施例提供的方案,能够使神经网络处理器对高位数的有符号整型数据进行运算,提高运算的准确度,满足神经网络处理器对较高位数的有符号整型数据进行运算的需求。
该运算处理可包括乘法运算或加法运算等,当然,也可包括其他对较高位数的有符号整型数据所进行的运算,本申请实施例对此不作限定。
在一种可行的设计中,如图3所示,在上述图2所示实施例的基础上,步骤203可包括如下步骤:
步骤301,基于数据参数以及硬件参数所指示的神经网络处理器可执行数据处理的数据精度,确定待处理数据和硬件参数之间的支持关系。
其中,该数据精度用于表征神经网络处理器在能够获得较高准确度的情况下,可处理的数据的数据精度,该数据精度可通过数据类型和数据位数体现。
例如,如果神经网络处理器在处理int8类型的数据时,准确度较高,则该硬件参数指示的神经网络处理器可执行数据处理的数据精度为8位的有符号整型数据。
另外,待处理数据和硬件参数之间的支持关系包括两种:第一种支持关系为硬件参数不支持对待处理数据进行处理;第二种支持关系为硬件参数支持对待处理数据进行处理。
其中,不支持对待处理数据进行处理,指的是该硬件参数对应的神经网络处理器不支持对待处理数据进行处理,即使通过该神经网络处理器对待处理数据进行处理,得到的处理结果与实际结果之间也会存在较大差距,即无法获取准确的数据处理结果。
另外,支持对待处理数据进行处理,指的是该硬件参数对应的神经网络处理器支持对待处理数据进行处理,通过该神经网络处理器对待处理数据进行处理,得到的处理结果与实际结果较接近,即能够获取较准确的数据处理结果。
其中,如果待处理数据为int16类型的数据,而硬件参数表示神经网络处理器仅支持对int8类型的数据进行数据处理,则待处理数据和硬件参数之间的支持关系为第一种支持关系;如果待处理数据为int8类型的数据,而硬件参数表示神经网络处理器仅支持对int8类型的数据进行数据处理,则待处理数据和硬件参数之间的支持关系为第二种支持关系。
步骤302,基于支持关系,生成神经网络处理器可执行的用于数据处理的指令。
其中,如果该支持关系为第二种支持关系,则该指令可用于使神经网络处理器直接执行相应的数据处理。
另外,如果该支持关系为第一种支持关系,为了使神经网络处理器能够获取较准确的数据处理结果,往往需要对待处理数据进行相应的处理,然后基于处理后的数据,生成相应的指令。
在一种应用场景中,待处理数据包括第一数据和第二数据,数据处理包括对第一数据和第二数据进行运算。这种情况下,在一种可行的设计中,如图4所示,在上述图3所示实施例的基础上,步骤302可包括如下步骤:
步骤401,响应于支持关系表示硬件参数不支持对第一数据和第二数据进行运算,对第一数据进行数据转换,得到硬件参数支持的能够进行运算的第三数据,以及对第二数据进行数据转换,得到硬件参数支持的能够进行运算的第四数据。
例如,如果第一数据和第二数据均为int16类型的数据,而神经网络处理器的硬件参数指示该神经网络处理器仅支持对int8类型的数据进行运算,因此可将第一数据和第二数据转换为int8类型的数据。
步骤402,基于第三数据和第四数据,生成神经网络处理器可执行的用于运算的指令。
由于第三数据和第四数据均能够得到神经网络处理器的硬件参数的支持,因此,可通过第三数据和第四数据生成该指令。
如果神经网络处理器的硬件参数不支持对第一数据和第二数据进行运算,通过步骤401至步骤402公开的方案,可对第一数据和第二数据分别进行数据转换,获取经过数据转换的第三数据和第四数据,由于第三数据和第四数据能够得到硬件参数的支持,因此,基于第三数据和第四数据,即可生成神经网络处理器可执行的用于运算的指令,满足对更高位数的数据进行运算的需求。
在一种应用场景中,神经网络处理器只能支持较低位数的有符号整型数据的运算,而待处理数据为较高位数的有符号整型数据,则需要通过数据转换,将待处理数据转换为较低位的有符号整型数据。
在本公开提供的一种数据转换的方法中,可将第一数据和第二数据中的至少一者作为第一目标数据。其中,第一目标数据的数据类型为有符号整型,第一目标数据的数据位数为s位,硬件参数支持数据位数为t位的有符号整型数据进行运算,s为t的二倍,s和t均为正整数。
例如,t可以为8,s为16;或者,t可为16,s为32。当然,t和s还可以为其他正整数,本公开对此不作限定。
这种情况下,如图5所示,在上述图4所示实施例的基础上,步骤401可包括如下步骤:
步骤501,基于第一数据拆分规则,将第一目标数据拆分为由对第一目标数据的高t位部分进行拆分得到的第一子数据,以及由对第一目标数据的低t位部分进行拆分得到的第二子数据。其中,该第一子数据为有符号整型数据,该第二子数据为无符号整型数据。
另外,由于第一目标数据本身为有符号整型数据,即第一目标数据的最高位可用于表示正负,而且第一子数据包括高t位部分,则第一子数据的最高位也可用于表示正负,即第一子数据为有符号整型数据。
但是,第二子数据为第t位部分,第二子数据的最高位在第一目标数据中用于表示数值,并非表示正负,因此,无法直接将第二子数据看作有符号整型数据。
步骤502,对第一子数据进行左移t位的移位运算,得到第三子数据。
由于第一子数据仅有t位,为了使第一子数据的数值与其在第一目标数据中表示的数值大小相同,因此,可对第一子数据进行左移t位的移位运算。经过移位计算,第一子数据的数值大小与第一目标数据的高t位部分的数值大小相同。
步骤503,基于所述第二子数据的最高位,确定第二子数据的正负。
其中,如果第二子数据的最高位为1,则第二子数据为负数,并执行步骤504的操作;或者,如果第二子数据的最高位为0,则第二子数据为正数,并执行步骤505的操作。
步骤504,响应于第二子数据为正数,计算第二子数据与第三子数据的和值,将第二子数据与第三子数据的和值作为第一目标数据。
如果第二子数据为正数,则可将第二子数据看作t位的有符号整型数据,将该第二子数据与第三子数据之和作为第一目标数据。
步骤505,响应于第二子数据为负数,计算第二子数据、第三子数据与补偿数值的和值,将第二子数据、第三子数据与补偿数值的和值作为转换后的数据,其中,补偿数值为2的t次方。
如果第二子数据为负数,则表示第二子数据的最高位(即第一目标数据的第t+1位)为1,但是第一目标数据中的第t+1位仅用于表示数值大小,并非用于表示正负,因此,如果将第二子数据看作负数,则在第二子数据和第三子数据的和值的基础上通过补偿数值进行补偿,即第二子数据、第三子数据与补偿数值之和作为转换后的数据。
其中,如果第一目标数据为第一数据,则转换后的数据为第三数据;如果第一目标数据为第二数据,则转换后的数据为第四数据。
也就是说,在这一实施例中,将第一目标数据从中间拆分,得到低t位的数据和高t位的数据,如果低t位的数据为正数,则将高t位的数据进行左移t位的移位运算后,将移位运算的结果与低t位的数据的和值作为转换后的数据;如果低t位的数据为正数,则将高t位的数据进行左移t位的移位运算后,将移位运算的结果、低t位的数据以及补偿数值的和值作为转换后的数据,该补偿数值为2的t次方。
以公式进行说明,设定A1为第一目标数据,则可将A1拆分成Dt1和Dt0这两部分,Dt1为A1的高t位,Dt0为A1的低t位。
如果Dt0的最高位为1,即Dt0为负数,则A1=(intt)(Dt1<<t)+2t+(int t)Dt0。其中,int t表示该数据为int t类型,Dt1<<t表示对Dt1进行左移t位的移位运算后得到的数据,(intt)(Dt1<<t)表示对Dt1进行左移t位的移位运算后得到的数据为intt类型的数据,2t表示补偿数值,(int t)Dt0表示Dt0为int t类型的数据。
如果Dt0的最高位为0,即Dt0为正数,则A1=(int t)(Dt1<<t)+(intt)Dt0
通过步骤501至步骤505的方案,可在第一目标数据和神经网络处理器的硬件参数支持的数据类型均为有符号整型,且第一目标数据的数据位数为该硬件参数支持的数据位数的二倍的情况下,分别对第一数据和第二数据进行数据转换,得到相应的第三数据和第四数据,以便神经网络处理器通过第三数据和第四数据进行运算,满足神经网络处理器对较高位数的数据进行运算的需求。
为了明确步骤501至步骤505所提供的方案,以下公开一个示例。在该示例中,第一目标数据a=0x1af4,其中,0x1af4为int16类型的数据,其中的“x”表示该数据为十六进制的数据,十六进制通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(或者a、b、c、d、e、f)表示,其中,A~F(或者a~f)表示十进制的10~15,则0x1af4中的“a”表示十进制的10,f表示十进制中的15,该数据在十进制中的数值大小为6900(即4+15×16+10×16×16+16×16×16=6900)。并且,神经网络处理器的硬件参数仅支持对int8类型的数据进行运算。
在基于步骤501至步骤505提供的方案对该第一目标数据进行数据转换的过程中,首先可到的第一子数据和第二子数据,其中,第一子数据为0x1a,且为int8类型的数据,第二子数据为0xf4,并且第二子数据为负数。
通过对第一子数据进行左移t位的移位运算,得到第三子数据,该第三子数据可表示为(0x1a(int8)<<8,其中的int8表示该第三子数据为int8类型的数据。
另外,由于第二子数据为负数,则在获取转换后的数据时,需要补偿数值,该补偿数值为2的8次方,可表示为0x1(int8)<<8,该式表示补偿数值的数值大小为对0x1进行左移8位的移位运算后得到的数值大小,int8表示该补偿数值为int8类型的数据。以及,第二子数据可表示为0xf4(int8),其中的int8表示该第二子数据为int8类型的数据。
这种情况下,转换后的数据可表示为(0x1a(int8)<<8+0x1(int8)<<8+0xf4(int8)),进一步的,(0x1a(int8)<<8+0x1(int8)<<8+0xf4(int8))=(26+1)*256-12=6912-12=6900。
据此可知,第一目标数据和转换后的数据均为6900,二者相等,即通过本公开所提供的方案,可实现对第一目标数据的数据转换,得到符合神经网络处理器的运算需求的数据。
在本公开提供的另一种数据转换的方法中,可将第一数据和第二数据中的至少一者作为第二目标数据。其中,第二目标数据的数据类型为有符号整型,第二目标数据的数据位数为g位,硬件参数支持数据位数为h位的有符号整型数据进行运算,g和h均为正整数。
其中,g可以为h的整数倍,例如,h可以为8,g为16、32或64等;或者,h可为16,g为32或64等。或者,g也可以不为h的整数倍,例如,h可以为8,g为20等。当然,g和h还可以为其他正整数,本公开对此不作限定。
这种情况下,如图6所示,在上述图4所示实施例的基础上,步骤401可包括如下步骤:
步骤601,基于第二数据拆分规则,将第二目标数据拆分为由对第二目标数据的高位部分进行拆分得到的第四子数据,以及由对第二目标数据的低位部分进行至少一次拆分得到的至少一个第五子数据。
其中,各第五子数据对应的第二目标数据的低位部分的数据位数不同,该第四子数据为有符号整型数据,第五子数据为无符号整型数据,并且每个第五子数据为h位,第四子数据的位数不大于h。
在这一实施例的一种情况中,g为h的整数倍,设定g=k*h,其中,k为正整数,则可将第二目标数据拆分成k个子数据,每个子数据的数据位数为h。其中,第四子数据为第二目标数据中的高h位部分,第五子数据为(k-1)个。
在一个示例中,第二目标数据为32位的有符号整型数据,即g为32,神经网络处理器的硬件参数仅支持对8位的有符号整型数据进行运算,即h为8,则第四子数据为第二目标数据中的高8位部分,第五子数据为3个。如果在对第二目标数据进行数据拆分时按照从左到右的顺序,则第一个第五子数据为第二目标数据中的第9位至第16位部分,第二个第五子数据为第二目标数据中的第17位至第24位部分,第三个第五子数据为第二目标数据中的第25位至第32位部分。
或者,在另一情况下,g不是h的整数倍,则对第二目标数据进行拆分之后,每个第五子数据为h位,第四子数据的位数小于h。
这种情况下,在实际的拆分过程中,可从低位向高位的顺序进行拆分,最后一次拆分后剩余的小于h位的数据为第四子数据。或者,可对第二目标数据的高位填充0,以使填充后的第二目标数据的数据位数为h的正整数倍,然后再进行拆分,得到多个h位的数据,其中最高位的h位的数据即为第四子数据。
例如,如果h为8,g为12,则可在第二目标数据的高位填充4个0,以使填充后的第二目标数据的位数为16,然后再进行拆分,这种情况下,拆分后的第四子数据和第五子数据均为8位。
另外,由于第四子数据的最高位为第二目标数据的最高位,可用于表示数据的正负,因此,第四子数据可看作有符号整型数据。而各第五子数据的最高位均并非第二目标数据的最高位,均不可用于表示数据的正负,这种情况下,第五子数据可看作无符号整型数据。
步骤602,将至少一个第五子数据转换为h位的有符号整型数据,得到第六子数据。
由于第五子数据为无符号整型数据,因此,需对第五子数据进行数据转换,以得到相应的第六子数据,该第六子数据即为有符号整型数据。
步骤603,通过对第四子数据和至少一个第六子数据进行组合,确定转换后的数据。
在本公开实施例中,第四子数据和第六子数据均为h位,其在第二目标数据中的数值大小与第四子数据和第六子数据本身所表示的数值大小可能不同,因此,在组合过程中,首先需要基于第四子数据和第六子数据在第二目标数据中的位置进行向左移位的移位运算,然后再对移位运算的结果进行组合。
其中,第四子数据作为第二目标数据中的高h位部分,在对第四子数据进行移位运算时,通常将第四子数据进行向左移位(g-h)位的移位运算;如果在对第二目标数据进行数据拆分时按照从左到右的顺序,第一个拆分得到的第五子数据对应的第六子数据进行向左移位(g-2h)位的移位运算;第二个拆分得到的第五子数据对应的第六子数据进行向左移位(g-3h)位的移位运算;并以此类推,最后一个第六子数据不进行移位处理,或可认为对最后一个第六子数据进行向左移位(g-k*h)位的移位运算。
然后移位运算之后,将移位运算得到的结果组合,得到的即为转换后的数据。其中,如果第二目标数据为第一数据,则转换后的数据为第三数据,如果第二目标数据为第二数据,则转换后的数据为第四数据。
在步骤602中,公开将至少一个第五子数据转换为h位的有符号整型数据,得到第六子数据的步骤。如图7所示,在上述图6所示实施例的基础上,步骤602可包括如下步骤:
步骤701,确定第五子数据对应的符号位。其中,符号位用于将第五子数据的数据类型由无符号整型转换为有符号整型。
在本公开实施例中,可通过多种方式确定符号位。在其中一种方式中,可基于第五子数据的数值是否超出int类型数据的取值范围,确定符号位。其中,若超出int类型数据的取值范围,则可确定其对应的符号位的取值为-1,若未超出int类型数据的取值范围,则可确定其对应的符号位的取值为0。
在一个示例中,第五子数据为矩阵数据,为:其数据类型为uint8,需要将其转换为int8类型的数据。其中,在该矩阵中,将各个数据以各个二进制数对应的十进制数进行表示,即128、127、126、131、132、133、255、254、253均为像素值的二进制数对应的十进制数。
在上述矩阵B中,128、131、132、133、255、254、253均超出int8类型的数据的取值范围(-128,127),因此,可以将符号位中对应的元素确定为-1。而上述的127、126并未超出int8类型的数据的取值范围,因此,可以将符号位中对应的元素确定为0。这种情况下,得到的符号位为:
或者,在另一种方式中,可通过以下操作确定符号位:
第一步,如果第五子数据的二进制值超出有符号整型的二进制取值范围,对该二进制数值进行溢出饱和处理,得到第一处理后数据。
在一个示例中,若第五子数据其数据类型为uint8,需要将其转换为int8类型的第六子数据。由于int8类型的数据的取值范围为(-128,127),因此,可将矩阵A中超出最大取值127的元素进行溢出饱和处理,进而即可得到第一处理后数据其中,溢出饱和处理,是对各超出int8数据取值范围的像素值均减去256,即可得到第一处理后数据。
第二步,对处理后数据的二进制值取反后减一,得到第二处理后数据。
在一个示例中,对第一处理后数据中各个二进制数值取反后减去1,即A**(-1)-1,则可得到相应的第二处理后数据:
第三步,通过对第二处理后数据进行右移f位的移位运算,确定符号位,f为将第五子数据占用的字节对应的比特值减1后得到的值。
在一个示例中,若第五子数据为unit8类型的数据,则第五子数据占用的字节对应的比特值为8,则f为7,这种情况下,对第二处理后数据右移7位,则得到符号位为:
通过上述操作,可确定第五子数据对应的符号位。另外,在确定符号位后,可继续执行步骤702的操作。
步骤702,基于符号位,对第五子数据的数据类型进行转换,得到第六子数据。
其中,第五子数据和第六子数据的数据位数相同,即如果第五子数据为8位的无符号整型数据(即unit8类型的数据),则第六子数据为8位的有符号整型数据(即int8类型的数据)。
在一种可行的设计中,步骤702可通过以下操作实现:
第一步,基于神经网络处理器的硬件参数所支持的数据的二进制取值范围,确定补偿参数,其中,补偿参数为该二进制取值范围中取值个数的二分之一。
例如,如果神经网络处理器的硬件参数所支持的数据类型为int8,其对应的二进制取值范围(-128,127),则该二进制取值范围中取值个数为256,相应的,补偿参数为128。
第二步,将符号位与该二进制取值范围中二进制数的个数相乘,得到符号变换位。
其中,该二进制取值范围中二进制数的个数,为将二进制数字1按照第五子数据的比特值进行左移后得到的值。
继续以第五子数据为为例,该第五子数据的数据类型为uint8,对应的比特值为8,则将二进制数字1左移8位,得到该二进制取值范围中二进制数的个数,在这一示例中,该个数为256。
相应的,符号变换位
第三步,将补偿参数、符号变换位和第一处理后数据相加,得到第六子数据。
也就是说,C=A*+T+Y,其中,C为第六子数据,A*为第一处理后数据,T为符号变换位,Y为补偿参数。
继续以第五子数据为为例,则
即第六子数据为
通过上述实施例,可实现对第二目标数据的转换,得到满足神经网络处理器的硬件参数支持的转换后的数据。
在本公开另一实施例中,还提供一种对待处理数据进行数据转换的公式。在该实施例中,设定神经网络处理器的硬件参数支持x位的有符号整型数据的数据处理,y为待处理数据的数据位数,且y为有符号整型数据,并且x与y均为正整数,例如,x可以为8,y可以为12、16或32等。
这种情况下,设定A2为第二目标数据,则可通过第二数据拆分规则,对A2进行拆分,通过拆分A2得到的第四子数据为Dxn,Dxn表示最高的x位的bit数(有符号数),而第五子数据包括Dxn-1、…、Dxi、…、Dx1和Dx0,其中,Dx0表示A2中最低x位的bit数(无符号数),Dx1表示A2中次低x位的bit数(无符号数),以此类推,Dxn-1表示第五子数据中位数最高的x位的bit数(无符号数)。
其中,或者,n=float div[(y+x-1)/x],这两个公式均表示对(y+x-1)/x的计算结果进行向上取整。
或者,如果y为x的a倍,a为正整数,也可设定n=a-1,例如,x为8,则y为16或32等,则a为2或4,n为1或3。
另外,Dx0表示A2中最低x位的bit数(无符号数),Dx1表示A2中次低x位的bit数(无符号数),…Dxi表示A2中(i-1)次低x位的bit数(无符号数)……以此类推,Dxn表示最高的x位的bit数(有符号数)。这种情况下,可将Dxn看作第四子数据,其他拆分后的数据(例如Dx0、Dx1和Dxi)看作第五子数据。
如果在这一实施例中,y并非x的正整数倍,则在通过第二数据拆分规则对第二目标数据进行拆分时,可在第二目标数据的高位填充0,以使填充后的第二目标数据的数据位数为x的正整数倍,然后再进行拆分。
例如,如果x为8,y为12,则可在第二目标数据的高位填充4个0,以使填充后的第二目标数据的位数为16,然后再进行拆分。
设定对第五子数据Dxi进行转换后得到的转换后数据为Dxi′,则Dxi′=(Fxi<<2x *(i+1))+2(x*(i+1)-1)。该公式中,Dxi为第五子数据,x为神经网络处理器的硬件参数支持的数据位数,Fxi为Dxi的数值部分,例如,如果x为8,y为24,i为1,第二目标数据通过二进制表示的话,为:110100111100011001011100,则Fxi为11000110,<<2x*(i+1)表示进行x*(i+1)位的右移运算,2(x*(i+1)-1)表示转换过程中对Dxi的补偿。
这种情况下,可得到以下进行数据转换的公式:
A2=(Fxn<<2x*(n+1))+2(x*(n+1)-1)+(Fxn-1<<2x*n)+2(x*(n)-1)+…+(Fxi<<2x*(i+1))+2(x *(i+1)-1)+…+(Fx1<<2x*2)+2(x*2-1)+(Fx0<<2x)+2(x-1)
其中,(Fxn<<2x*(n+1))+2(x*(n+1)-1)为Dxn的转换结果,(Fxn-1<<2x*n)+2(x*(n)-1)为Dxn-1的转换结果,(Fxi<<2x*(i+1))+2(x*(i+1)-1)为Dxi的转换结果,(Fx1<<2x*2)+2(x*2-1)为Dx1的转换结果,(Fx0<<2x)+2(x-1)为Dx0的转换结果。
示例性方法2
相应的,在本公开另一实施例中还公开一种数据处理的方法。该方法可应用于神经网络处理器,参见图8所示的示意图,该方法包括以下步骤:
步骤801,确定待处理数据的数据参数,该数据参数包括待处理数据的数据类型和数据位数,该数据类型包括:有符号整型和无符号整型。
步骤802,基于数据参数和神经网络处理器的硬件参数,生成神经网络处理器可执行的用于数据处理的指令。
如果待处理数据的数据位数高于神经网络处理器的硬件参数能够处理的数据位数,则该指令可用于对待处理数据进行数据转换,将该待处理数据转换为神经网络处理器的硬件参数能够处理的数据。
其中,生成神经网络处理器可执行的用于数据处理的指令的方式可参见上述各个实施例,本公开实施例不再赘述。
步骤803,基于该指令对待处理数据进行数据处理,得到数据处理后的数据。
通过本公开实施例提供的方案,神经网络处理器能够实现对待处理数据的处理,解决相关技术无法对较高位数的数据进行处理的问题。
其中,该数据处理可包括运算处理,这种情况下,通过本公开实施例提供的方案,神经网络处理器能够实现对高位数的有符号整型数据进行运算,从而满足神经网络处理器对较高位数的有符号整型数据进行运算的需求。
在本公开的一种应用场景中,该待处理数据包括第一数据和第二数据,数据处理包括对第一数据和第二数据进行运算。这种情况下,如图9所示,在上述图8所示实施例的基础上,步骤802可包括如下步骤:
步骤901,基于硬件参数指示的神经网络处理器可执行数据处理的数据精度以及数据参数,确定数据类型和硬件参数之间的支持关系。
其中,待处理数据和硬件参数之间的支持关系包括两种:第一种支持关系为硬件参数不支持对待处理数据进行处理;第二种支持关系为硬件参数支持对待处理数据进行处理。
步骤902,响应于该支持关系表示硬件参数不支持对第一数据和第二数据进行运算,对第一数据进行数据转换,得到硬件参数支持的能够进行运算的第三数据,以及对第二数据进行数据转换,得到硬件参数支持的能够进行运算的第四数据。
其中,对第一数据和第二数据进行数据转换的方式可参见上述实施例,本公开实施例对此不再赘述。
步骤903,基于第三数据和第四数据,生成神经网络处理器可执行的用于运算的指令。
如果神经网络处理器的硬件参数不支持对第一数据和第二数据进行运算,通过这一方案,可对第一数据和第二数据分别进行数据转换,获取经过数据转换的第三数据和第四数据,由于第三数据和第四数据能够得到硬件参数的支持,因此,基于第三数据和第四数据,即可生成神经网络处理器可执行的用于运算的指令,满足对更高位数的数据进行运算的需求。
示例性装置1
图10是本公开一示例性实施例提供的用于神经网络处理器进行数据处理的指令生成装置的结构图。该用于神经网络处理器进行数据处理的指令生成装置可设置在神经网络处理器内,用于执行本公开上述任一实施例的用于神经网络处理器进行数据处理的指令生成方法。
如图10所示,该实施例的用于神经网络处理器进行数据处理的指令生成装置包括:第一确定模块101、第二确定模块102和指令生成模块103。
其中,该第一确定模块101用于确定执行数据处理的神经网络处理器的硬件参数;
第二确定模块102,用于确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
指令生成模块103,用于基于所述第一确定模块101确定的所述硬件参数和所述第二确定模块102确定的所述数据参数,生成所述神经网络处理器可执行的用于数据处理的指令。
在一种可行的设计中,指令生成模块103用于基于所述数据参数以及所述硬件参数所指示的所述神经网络处理器可执行数据处理的数据精度,确定所述待处理数据和所述硬件参数之间的支持关系;以及用于基于所述支持关系,生成所述神经网络处理器可执行的用于数据处理的指令。
示例性的,所述待处理数据包括第一数据和第二数据,所述数据处理包括对所述第一数据和所述第二数据进行运算,所述指令生成模块103基于所述支持关系,生成所述神经网络处理器可执行的用于数据处理的指令,包括:
响应于所述支持关系表示所述硬件参数不支持对所述第一数据和所述第二数据进行运算,对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据;
基于所述第三数据和所述第四数据,生成所述神经网络处理器可执行的用于运算的指令。
在一种可行的设计中,将所述第一数据和所述第二数据中的至少一者作为第一目标数据,所述第一目标数据的数据类型为有符号整型,所述第一目标数据的数据位数为s位,所述硬件参数支持数据位数为t位的有符号整型数据进行运算,s为t的二倍,s和t均为正整数。这种情况下,所述指令生成模块103对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据,包括:
基于第一数据拆分规则,将所述第一目标数据拆分为由对所述第一目标数据的高t位部分进行拆分得到的第一子数据,以及由对所述第一目标数据的低t位部分进行拆分得到的第二子数据,所述第一子数据为有符号整型数据;
对所述第一子数据进行左移t位的移位运算,得到第三子数据;
基于所述第二子数据的最高位,确定所述第二子数据的正负;
响应于所述第二子数据为正数,计算所述第二子数据与所述第三子数据的和值,将所述第二子数据与所述第三子数据的和值作为所述第一目标数据;或者,
响应于所述第二子数据为负数,计算所述第二子数据、所述第三子数据与补偿数值的和值,将所述第二子数据、所述第三子数据与补偿数值的和值作为转换后的数据,其中,所述补偿数值为2的t次方。
在另一种可行的设计中,将所述第一数据和所述第二数据中的至少一者作为第二目标数据,所述第二目标数据的数据类型为有符号整型数据,所述第二目标数据的数据位数为g位,所述硬件参数支持数据位数为h位的有符号整型数据进行运算,g为h的整数倍,g和h均为正整数。这种情况下,所述指令生成模块103对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据,包括:
基于第二数据拆分规则,将所述第二目标数据拆分为由对所述第二目标数据的高位部分进行拆分得到的第四子数据,以及由对所述第二目标数据的低位部分进行至少一次拆分得到的至少一个第五子数据,各所述第五子数据对应的所述第二目标数据的低位部分的数据位数不同,所述第四子数据为有符号整型数据,所述第五子数据为无符号整型数据,每个所述第五子数据为h位,所述第四子数据的位数不大于h;
将至少一个所述第五子数据转换为h位的有符号整型数据,得到第六子数据;
通过对所述第四子数据和至少一个所述第六子数据进行组合,确定所述转换后的数据。
本公开实施例提供的用于神经网络处理器进行数据处理的指令生成装置在生成神经网络处理器可执行的用于数据处理的指令时,综合考虑了该神经网络处理器的硬件参数和待处理数据的数据参数。因此,本公开能够解决在神经网络处理器不支持对高位数的有符号整型数据进行数据处理的情况下,所存在的数据处理结果准确度差的问题,能够满足对较高位数的有符号整型数据进行数据处理的需求。
其中,该数据处理可包括运算处理,这种情况下,通过本公开实施例提供的方案,能够使神经网络处理器对高位数的有符号整型数据进行运算,提高运算的准确度,满足神经网络处理器对较高位数的有符号整型数据进行运算的需求。
示例性装置2
图11是本公开一示例性实施例提供的数据处理的装置的结构图。该数据处理的装置可用于执行本公开上述实施例的数据处理的方法。
如图11所示,该实施例的数据处理的装置包括:参数确定模块201、指令确定模块202和数据处理模块203。
其中,参数确定模块201,用于确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
指令确定模块202,用于基于所述参数确定模块201确定的所述数据参数和所述神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令;
数据处理模块203,用于基于所述指令确定模块202确定的所述指令对所述待处理数据进行处理,得到数据处理后的数据。
在一种可行的设计中,所述待处理数据包括第一数据和第二数据,所述数据处理包括对所述第一数据和所述第二数据进行运算,指令确定模块202基于所述数据参数和神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令,包括:
基于所述硬件参数所指示的所述神经网络处理器可执行数据处理的数据精度以及所述数据参数,确定所述数据类型和所述硬件参数之间的支持关系;
响应于所述支持关系表示所述硬件参数不支持对所述第一数据和所述第二数据进行所述运算,对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据;
基于所述第三数据和所述第四数据,生成所述神经网络处理器可执行的用于数据处理的指令。
通过本公开实施例提供的方案,神经网络处理器能够实现对待处理数据的处理,解决相关技术无法对较高位数的数据进行处理的问题。
其中,该数据处理可包括运算处理,这种情况下,通过本公开实施例提供的方案,神经网络处理器能够实现对高位数的有符号整型数据进行运算,从而满足神经网络处理器对较高位数的有符号整型数据进行运算的需求。
示例性电子设备
图12为本公开实施例提供的一种电子设备100的结构图,包括至少一个处理器111和存储器112。
处理器111可以是神经网络处理器或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备100中的其他组件以执行期望的功能。
存储器112可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器111可以运行一个或多个计算机程序指令,以实现上文中本公开的各个实施例的用于神经网络处理器进行数据处理的指令生成方法、数据处理的方法和/或其他期望的功能。
在一个示例中,电子设备100还可以包括:输入装置13和输出装置14,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
该输入装置113还可以包括例如键盘、鼠标等等。
该输出装置114可以向外部输出各种信息,其可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图10中仅示出了该电子设备100中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备100还可以包括任何其他适当的组件。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以提供一种计算机程序产品,包括计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行上述“示例性方法”部分中描述的本公开各种实施例的用于神经网络处理器进行数据处理的指令生成方法和/或数据处理的方法中的步骤。
计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行上述“示例性方法”部分中描述的本公开各种实施例的用于神经网络处理器进行数据处理的指令生成方法和/或数据处理中的步骤。
计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如但不限于包括电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为其是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。

Claims (11)

1.一种用于神经网络处理器进行数据处理的指令生成方法,包括:
确定执行数据处理的神经网络处理器的硬件参数;
确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
基于所述硬件参数和所述数据参数,生成所述神经网络处理器可执行的用于数据处理的指令。
2.根据权利要求1所述的方法,其中,所述基于所述硬件参数和所述数据参数,生成所述神经网络处理器可执行的用于数据处理的指令,包括:
基于所述数据参数以及所述硬件参数所指示的所述神经网络处理器可执行数据处理的数据精度,确定所述待处理数据和所述硬件参数之间的支持关系;
基于所述支持关系,生成所述神经网络处理器可执行的用于数据处理的指令。
3.根据权利要求2所述的方法,其中,所述待处理数据包括第一数据和第二数据,所述数据处理包括对所述第一数据和所述第二数据进行运算,所述基于所述支持关系,生成所述神经网络处理器可执行的用于数据处理的指令,包括:
响应于所述支持关系表示所述硬件参数不支持对所述第一数据和所述第二数据进行运算,对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据;
基于所述第三数据和所述第四数据,生成所述神经网络处理器可执行的用于运算的指令。
4.根据权利要求3所述的方法,其中,将所述第一数据和所述第二数据中的至少一者作为第一目标数据,所述第一目标数据的数据类型为有符号整型,所述第一目标数据的数据位数为s位,所述硬件参数支持数据位数为t位的有符号整型数据进行运算,s为t的二倍,s和t均为正整数;
所述对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据,包括:
基于第一数据拆分规则,将所述第一目标数据拆分为由对所述第一目标数据的高t位部分进行拆分得到的第一子数据,以及由对所述第一目标数据的低t位部分进行拆分得到的第二子数据,所述第一子数据为有符号整型数据;
对所述第一子数据进行左移t位的移位运算,得到第三子数据;
基于所述第二子数据的最高位,确定所述第二子数据的正负;
响应于所述第二子数据为正数,计算所述第二子数据与所述第三子数据的和值,将所述第二子数据与所述第三子数据的和值作为所述第一目标数据;
或者,
响应于所述第二子数据为负数,计算所述第二子数据、所述第三子数据与补偿数值的和值,将所述第二子数据、所述第三子数据与补偿数值的和值作为转换后的数据,其中,所述补偿数值为2的t次方。
5.根据权利要求3所述的方法,其中,将所述第一数据和所述第二数据中的至少一者作为第二目标数据,所述第二目标数据的数据类型为有符号整型数据,所述第二目标数据的数据位数为g位,所述硬件参数支持数据位数为h位的有符号整型数据进行运算,g和h均为正整数;
所述对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据,包括:
基于第二数据拆分规则,将所述第二目标数据拆分为由对所述第二目标数据的高位部分进行拆分得到的第四子数据,以及由对所述第二目标数据的低位部分进行至少一次拆分得到的至少一个第五子数据,各所述第五子数据对应的所述第二目标数据的低位部分的数据位数不同,所述第四子数据为有符号整型数据,所述第五子数据为无符号整型数据,每个所述第五子数据为h位,所述第四子数据的位数不大于h;
将至少一个所述第五子数据转换为h位的有符号整型数据,得到第六子数据;
通过对所述第四子数据和至少一个所述第六子数据进行组合,确定所述转换后的数据。
6.一种数据处理的方法,包括:
确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
基于所述数据参数和所述神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令;
基于所述指令对所述待处理数据进行数据处理,得到数据处理后的数据。
7.根据权利要求6所述的方法,其中,所述待处理数据包括第一数据和第二数据,所述数据处理包括对所述第一数据和所述第二数据进行运算,所述基于所述数据参数和神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令,包括:
基于所述硬件参数所指示的所述神经网络处理器可执行数据处理的数据精度以及所述数据参数,确定所述数据类型和所述硬件参数之间的支持关系;
响应于所述支持关系表示所述硬件参数不支持对所述第一数据和所述第二数据进行所述运算,对所述第一数据进行数据转换,得到所述硬件参数支持的能够进行运算的第三数据,以及对所述第二数据进行数据转换,得到所述硬件参数支持的能够进行运算的第四数据;
基于所述第三数据和所述第四数据,生成所述神经网络处理器可执行的用于数据处理的指令。
8.一种用于神经网络处理器进行数据处理的指令生成装置,包括:
第一确定模块,用于确定执行数据处理的神经网络处理器的硬件参数;
第二确定模块,用于确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
指令生成模块,用于基于所述第一确定模块确定的所述硬件参数和所述第二确定模块确定的所述数据参数,生成所述神经网络处理器可执行的用于数据处理的指令。
9.一种数据处理的装置,包括:
参数确定模块,用于确定待处理数据的数据参数,所述数据参数包括所述待处理数据的数据类型和数据位数,所述数据类型包括:有符号整型和无符号整型;
指令确定模块,用于基于所述参数确定模块确定的所述数据参数和所述神经网络处理器的硬件参数,生成所述神经网络处理器可执行的用于数据处理的指令;
数据处理模块,用于基于所述指令确定模块确定的所述指令对所述待处理数据进行处理,得到数据处理后的数据。
10.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-5中任一所述的用于神经网络处理器进行数据处理的指令生成方法,或者,执行上述权利要求6或7所述的数据处理的方法。
11.一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-5中任一所述的用于神经网络处理器进行数据处理的指令生成方法,或者,实现上述权利要求6或7所述的数据处理的方法。
CN202311864215.3A 2023-12-29 2023-12-29 指令生成方法、数据处理的方法及电子设备 Pending CN117827282A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311864215.3A CN117827282A (zh) 2023-12-29 2023-12-29 指令生成方法、数据处理的方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311864215.3A CN117827282A (zh) 2023-12-29 2023-12-29 指令生成方法、数据处理的方法及电子设备

Publications (1)

Publication Number Publication Date
CN117827282A true CN117827282A (zh) 2024-04-05

Family

ID=90520499

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311864215.3A Pending CN117827282A (zh) 2023-12-29 2023-12-29 指令生成方法、数据处理的方法及电子设备

Country Status (1)

Country Link
CN (1) CN117827282A (zh)

Similar Documents

Publication Publication Date Title
US10402725B2 (en) Apparatus and method for compression coding for artificial neural network
CN106990937B (zh) 一种浮点数处理装置和处理方法
CN111695671B (zh) 训练神经网络的方法及装置、电子设备
US20190138922A1 (en) Apparatus and methods for forward propagation in neural networks supporting discrete data
CN114461221A (zh) 编译方法、编译装置、电子设备、存储介质
US10747501B2 (en) Providing efficient floating-point operations using matrix processors in processor-based systems
JP2021517301A (ja) 確率的丸めロジック
US10210137B2 (en) Binary multiplier for binary vector factorization
US7478363B2 (en) Method for translating a given source program into an object program containing computing expressions
CN112835551B (zh) 用于处理单元的数据处理方法、电子设备和计算机可读存储介质
CN111966473A (zh) 一种线性回归任务的运行方法及装置、电子设备
WO2020256836A1 (en) Sparse convolutional neural network
US20230161555A1 (en) System and method performing floating-point operations
CN117827282A (zh) 指令生成方法、数据处理的方法及电子设备
CN114444667A (zh) 训练神经网络的方法及装置、电子设备
CN108229668B (zh) 基于深度学习的运算实现方法、装置和电子设备
CN113570053A (zh) 一种神经网络模型的训练方法、装置以及计算设备
CN113869517A (zh) 一种基于深度学习模型的推理方法
JP2020067897A (ja) 演算処理装置、学習プログラム及び学習方法
CN112148371B (zh) 基于单指令多数据流的数据运算方法、装置、介质和设备
US20230214447A1 (en) Data processing apparatus, data processing method, and recording medium
WO2022174542A1 (zh) 一种数据处理的方法、装置、处理器和计算设备
Milutinovic et al. Polynomial and rational functions
TW202219739A (zh) 藉由算數及/或逐位元單元的條件敘述執行
Isupov et al. Parallel computation of normalized legendre polynomials using graphics processors

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