CN112148371A - 基于单指令多数据流的数据运算方法、装置、介质和设备 - Google Patents
基于单指令多数据流的数据运算方法、装置、介质和设备 Download PDFInfo
- Publication number
- CN112148371A CN112148371A CN201910566415.8A CN201910566415A CN112148371A CN 112148371 A CN112148371 A CN 112148371A CN 201910566415 A CN201910566415 A CN 201910566415A CN 112148371 A CN112148371 A CN 112148371A
- Authority
- CN
- China
- Prior art keywords
- data
- operated
- simd
- interface function
- fixed point
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 230000006870 function Effects 0.000 claims abstract description 177
- 238000004590 computer program Methods 0.000 claims description 9
- 238000007667 floating Methods 0.000 description 77
- 238000003491 array Methods 0.000 description 24
- 238000007792 addition Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
公开了一种基于单指令多数据流的数据运算方法、装置、介质和设备。其中的方法包括:根据参与同一类型运算的至少一组待运算数据,生成运算数组,其中一组待运算数据包括:参与所述同一类型运算中的同一运算的待运算数据,运算数组包括:至少一个用于表示待运算数据的符号位和尾数的第一定点数、以及至少一个用于表示待运算数据的指数的第二定点数;调用与同一类型运算涉及到的针对尾数和指数的运算对应的SIMD接口函数,根据运算数组中的元素确定SIMD接口函数的输入参数;根据SIMD接口函数基于输入参数的运算结果,生成至少一组待运算数据分别对应的运算结果。本公开有利于提高基于SIMD的接口函数的适用范围以及非定点数运算的效率。
Description
技术领域
本公开涉及数据处理技术,尤其是涉及一种基于单指令多数据流的数据运算方法、基于单指令多数据流的数据运算装置、存储介质以及电子设备。
背景技术
SIMD(Single Instruction Multiple Data,单指令多数据流)技术被引入到ARM(Advanced RISC Machine,进阶精简指令集)v系列等处理器架构中。通过利用SIMD技术,可以实现定点数的并行运算处理。如何基于SIMD技术,实现更多数据类型的运算,是一个值得关注的技术问题。
发明内容
为了解决上述技术问题,提出了本公开。本公开的实施例提供了一种基于单指令多数据流的数据运算方法、装置、存储介质和电子设备。
根据本公开实施例的一个方面,提供了一种基于单指令多数据流的数据运算方法,该方法包括:根据参与同一类型运算的至少一组待运算数据,生成运算数组,其中,一组待运算数据包括:参与所述同一类型运算中的同一运算的待运算数据,所述运算数组包括:至少一个用于表示待运算数据的符号位和尾数的第一定点数、以及至少一个用于表示待运算数据的指数的第二定点数;调用与所述同一类型运算涉及到的针对尾数和指数的运算对应的单指令多数据流SIMD接口函数,并根据所述运算数组中的元素确定所述SIMD接口函数的输入参数;根据所述SIMD接口函数基于所述输入参数的运算结果,生成所述至少一组待运算数据分别对应的运算结果。
根据本公开实施例的另一个方面,提供了一种基于单指令多数据流的数据运算装置,该装置包括:生成运算数组模块,用于根据参与同一类型运算的至少一组待运算数据,生成运算数组,其中,一组待运算数据包括:参与同一运算的所有待运算数据,所述运算数组包括:至少一个用于表示待运算数据的符号位和尾数的第一定点数、以及至少一个用于表示待运算数据的指数的第二定点数;调用接口函数模块,用于根据所述运算涉及到的针对尾数和指数的运算,调用相应的基于单指令多数据流SIMD的接口函数,并根据所述生成运算数组模块生成的运算数组中的元素确定基于SIMD的接口函数的输入参数;生成运算结果模块,用于根据所述调用接口函数模块调用的基于SIMD的接口函数的运算结果,生成所述至少一组待运算数据分别对应的运算结果。
根据本公开实施例的再一方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述基于单指令多数据流的数据运算方法。
根据本公开实施例的又一方面,提供了一种电子设备,该电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述基于单指令多数据流的数据运算方法。
基于本公开上述实施例提供的一种基于单指令多数据流的数据运算方法和装置,通过将待运算数据的符号位、尾数以及指数使用第一定点数和第二定点数来表示,通过基于运算涉及到的针对尾数和指数的运算,调用基于SIMD的接口函数,并利用运算数组中的元素为基于SIMD的接口函数提供输入参数,不仅可以通过调用一次基于SIMD的接口函数,并行实现两次运算操作,而且,还能够利用基于SIMD的接口函数的运算结果形成待运算数据的运算结果,从而实现非定点数的运算。由此可知,本公开提供的技术方案有利于提高基于SIMD的接口函数的适用范围,并有利于提高非定点数运算的效率。
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同描述一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
图1为本公开的基于单指令多数据流的数据运算方法一实施例的流程图;
图2为本公开的参与同一类型运算的多个组待运算数据的一例子的示意图;
图3为单精度浮点数的格式示意图;
图4为本公开生成的第一运算数组的一个例子的示意图;
图5为本公开生成的第二运算数组的一个例子的示意图;
图6为本公开生成的第一运算数组的另一个例子的示意图;
图7为本公开生成的第二运算数组的另一个例子的示意图;
图8为本公开生成的第一运算数组中的再一个例子的示意图;
图9为本公开生成的第二运算数组中的再一个例子的示意图;
图10为本公开的基于单指令多数据流的数据运算装置的一个实施例的结构示意图;
图11是本申请一示例性实施例提供的电子设备的结构图。
具体实施方式
下面将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本公开实施例中,“多个”可以指两个或者两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本公开中术语“和/或”,仅是一种描述关联对象的关联关系,表示可以存在三种关系,如A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本公开的实施例可以应用于终端设备、计算机***、服务器等电子设备,其可与众多其它通用或者专用计算***环境或配置一起操作。适于与终端设备、计算机***或者服务器等电子设备一起使用的众所周知的终端设备、计算***、环境和/或配置的例子包括但不限于:个人计算机***、服务器计算机***、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的***、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机***、大型计算机***和包括上述任何***的分布式云计算技术环境等等。
终端设备、计算机***、服务器等电子设备可以在由计算机***执行的计算机***可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机***/服务器可以在分布式云计算环境中实施。在分布式云计算环境中,任务可以是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算***存储介质上。
本公开概述
在实现本公开的过程中,发明人发现,利用SIMD技术,可以实现定点数(如16比特)的并行运算处理,然而,除了定点数之外,还存在半精度浮点数、单精度浮点数以及复数等类型的数据,SIMD无法针对这些类型的数据进行运算。如果通过软件模拟的方式,实现半精度浮点数、单精度浮点数以及复数等类型的数据的运算,则运算速度通常较慢,很难满足实时性要求。虽然ARMv系列等处理器架构通过引入VFP(Vector Floating-pointCoprocessor,向量浮点协处理器),可以实现针对浮点数的运算,但是,使用VFP往往需要满足一定的条件。在一个例子中,使用VFP需要满足下述三个条件:
条件1、VFP往往是可选项,需要被勾选。
条件2、需要在嵌入式操作***中允许相关的访问权限。
条件3、必须使用相应版本的编译器。
上述三个条件需要同时满足,才能够使用VFP。使用VFP需要满足的条件可能会给VFP的实际应用带来一定的困扰。另外,对于既有的设备而言,如果设备中的处理器架构中没有引入VFP,则意味着无法通过VFP的方式实现浮点数的运算。
示例性概述
假定数据处理器(如ARM11系列的数据处理器等)支持SIMD技术,该数据处理器利用SIMD技术,可以使实现定点数的并行运算处理。
虽然SIMD技术并不支持针对半精度浮点数、单精度浮点数以及复数等类型的数据的运算,但是,无论待运算数据是半精度浮点数,还是单精度浮点数,亦或是复数等非定点数类型的数据,本公开均可以利用第一定点数和第二定点数来表示待运算数据,其中的第一定点数用于表示待运算数据的符号位和尾数,其中的第二定点数用于表示待运算数据的指数。由于针对第一定点数、第二定点数以及待运算数据所对应的运算类型,可以调用相应的SIMD接口函数,实现定点数的并行运算处理,而本公开可以根据并行运算处理的结果,通过指数和尾数组合的方式,获得待运算数据对应的运算结果,因此,本公开可以在该数据处理器的基础上,利用SIMD技术,实现多种数据类型的并行运算处理。
示例性方法
图1为本公开的基于单指令多数据流的数据运算方法一实施例的流程图。如图1所示,该实施例方法包括步骤:S100、S101以及S102。
S100、根据参与同一类型运算的至少一组待运算数据,生成运算数组。
本公开中的运算通常是指代数运算。本公开中的运算包括但不限于:加法运算、减法运算、乘法运算、除法运算、乘方运算、开方运算、倒数运算、求对数运算以及求指数运算等。
一组待运算数据通常是指进行同一运算的所有待运算数据。一组待运算数据可以包括一个待运算数据,也可以包括两个待运算数据。一组待运算数据所包括的待运算数据的数量,通常与待运算数据所需要执行的运算相关。可以认为,一组待运算数据所包括的待运算数据的数量通常与执行运算的参与方数量相关。例如,对于加法运算而言,一组待运算数据包括两个待运算数据,这两个待运算数据均为加数,即第一加数和第二加数。再例如,对于减法运算而言,一组待运算数据包括两个待运算数据,其中一个为被减数,另一个为减数。再例如,对于倒数运算而言,一组待运算数据包括一个待运算数据。
本公开的任一组待运算数据所包含的任一待运算数据可以包括但不限于:定点数(如16比特位)、半精度浮点数(如16比特位)、单精度浮点数(如32比特位)以及复数(如64比特位)等类型的数据。
运算数组包括:多个元素,且每一个元素均为定点数。例如,运算数组中的一个元素可以为用于表示一待运算数据的符号位和尾数的第一定点数,运算数组中的又一个元素可以为用于表示一待运算数据的指数的第二定点数。另外,运算数组的数量可以为一个,也可以为多个。
S101、调用与同一类型运算涉及到的针对尾数和指数的运算对应的SIMD接口函数,并根据运算数组中的元素确定SIMD接口函数的输入参数。
本公开中的同一类型运算涉及到的针对尾数和指数的运算可以表示出:是否针对尾数进行运算和针对尾数进行运算的运算类型、以及是否针对指数进行运算和针对指数进行运算的运算类型。即本公开中的同一类型运算的运算类型,可以决定其所涉及到的针对尾数和指数的运算。例如,加法运算和减法运算等类型的运算,需要针对尾数进行运算,针对指数可不进行运算。再例如,乘法运算、除法运算以及倒数运算等类型的运算,既需要针对尾数进行运算,也需要针对指数进行运算。
本公开可以预先设置不同类型的运算涉及到的针对尾数和指数的运算,各自对应的SIMD接口函数。本公开中的SIMD接口函数的输入参数通常包括:需要进行相应运算的至少一个定点数。
S102、根据SIMD接口函数基于输入参数的运算结果,生成至少一组待运算数据分别对应的运算结果。
在调用SIMD接口函数,并为SIMD接口函数的输入参数赋值后,SIMD接口函数会基于输入参数执行相应的操作,并返回相应的运算结果。该运算结果是针对输入参数对应的运算结果。该运算结果可以包括:针对尾数的运算结果以及针对指数的运算结果中的至少一个。
本公开可以通过对运算结果进行处理(如组合还原数据类型处理),形成各组待运算数据各自对应的运算结果。本公开也可以通过对运算结果和运算数组中的元素进行处理(如组合还原数据类型处理),形成各组待运算数据各自对应的运算结果。
本公开通过将待运算数据的符号位、尾数以及指数使用第一定点数和第二定点数来表示,通过基于运算涉及到的针对尾数和指数的运算,调用基于SIMD的接口函数,并利用运算数组中的元素为基于SIMD的接口函数提供输入参数,不仅可以通过调用一次基于SIMD的接口函数,并行实现两次运算操作,而且,还能够利用基于SIMD的接口函数的运算结果形成待运算数据的运算结果,从而实现非定点数的运算。由此可知,本公开提供的技术方案有利于提高基于SIMD的接口函数的适用范围,并有利于提高非定点数运算的效率。
在一个可选示例中,本公开的第一定点数为16比特,其中的最高位比特位(即最左侧的比特位)为符号位,其他15比特位被尾数占用。本公开中的第二定点数为16比特,这16比特均被指数占用。
在一个可选示例中,本公开的参与同一类型运算的多组待运算数据的一个例子如图2所示。
图2中,假定存在m+1个待运算数据(m为奇数),需要进行参与方为2的同一类型运算(下述以加法运算为例对图2进行描述)。m+1个待运算数据通常为同一类型的非定点数,例如,均为单精度浮点数或者复数等。当然,m+1个待运算数据也可以为不同类型的非定点数。m+1个非定点数分别为:待运算数据n1、待运算数据n2、待运算数据n3、待运算数据n4、……、待运算数据nm和待运算数据nm+1。其中的待运算数据n1和待运算数据n2形成需要进行加法运算的一组待运算数据,即第一组待运算数据。其中的待运算数据n3和待运算数据n4形成需要进行加法运算的一组待运算数据,即第二组待运算数据。以此类推,直到待运算数据nm和待运算数据nm+1形成需要进行加法运算的一组待运算数据,即第(m+1)/2组待运算数据。其中的待运算数据n1、待运算数据n3、……以及待运算数据nm均为第一加数。其中的待运算数据n2、待运算数据n4、……以及待运算数据nm+1均为第二加数。
在一个可选示例中,本公开可以根据参与同一类型运算的所有组待运算数据,生成N个运算数组。其中的N为该运算的参与方数量。本公开中的运算的参与方数量是由该运算的固有特性决定的,并不是由参与该运算的待运算数据的组的数量决定的。例如,对于加法运算、减法运算、乘法运算和除法运算等运算而言,参与方数量均为2。再例如,对于倒数运算等运算而言,参与方数量为1。
可选的,如果一个运算包括N个参与方,则在生成N个运算数组时,通常将各组待运算数据中的所有第一参与方各自对应的第一定点数和第二定点数作为一个运算数组中的元素,将各组待运算数据中的所有第二参与方各自对应的第一定点数和第二定点数作为另一个运算数组中的元素,以此类推,将各组待运算数据中的所有第N个参与方作为第N个运算数组。
一个例子,对于参与加法运算的M组待运算数据,由于加法运算的参与方为2,因此,本公开可以针对M组待运算数据,生成两个运算数组,其中一个运算数组对应M组待运算数据中的所有第一加数,其中另一个运算数组对应M组待运算数据中的所有第二加数。
另一个例子,对于参与减法运算的M组待运算数据,由于减法运算的参与方为2,因此,本公开可以针对M组待运算数据,生成两个运算数组,其中一个运算数组对应M组待运算数据中的所有被减数,其中另一个运算数组对应M组待运算数据中的所有减数。
又一个例子,对于参与乘法运算的M组待运算数据,由于乘法运算的参与方为2,因此,本公开可以针对M组待运算数据,生成两个运算数组,其中一个运算数组对应M组待运算数据中的所有第一乘数,其中另一个运算数组对应M组待运算数据中的所有第二乘数。
再一个例子,对于参与除法运算的M组待运算数据,由于除法运算的参与方为2,因此,本公开可以针对M组待运算数据,生成两个运算数组,其中一个运算数组对应M组待运算数据中的所有被除数,其中另一个运算数组对应M组待运算数据中的所有除数。
再一个例子,对于参与倒数运算的M组待运算数据,由于倒数运算的参与方为1,因此,本公开可以针对M组待运算数据,生成一个运算数组,该运算数组对应M组待运算数据中的所有待运算数据。
在一个可选示例中,本公开可以针对不同类型的待运算数据,采用不同的方式生成运算数组。下面举例说明:
第一个例子,对于一个包括一个尾数和一个指数的第一待运算数据而言,本公开可以将该第一待运算数据中的符号位和尾数转换为第一定点数,并将该第一待运算数据中的指数转换为一个第二定点数。例如,在第一待运算数据为半精度浮点数的情况下,本公开可以将该半精度浮点数的符号位和尾数转换为第一定点数,并将该半精度浮点数的指数转换为第二定点数。再例如,在第一待运算数据为单精度浮点数的情况下,本公开可以将该单精度浮点数的符号位(如图3中的s)和尾数(如图3中的b1b2b3b4......b23)转换为第一定点数(16比特),将该单精度浮点数的指数(如图3中的e1e2e3e4e5e6e7e8)转换为第二定点数(16比特)。在将参与同一类型运算的所有组待运算数据中的所有第一待运算数据分别转换为一个第一定点数和一个第二定点数后,本公开可以根据参与同一类型的运算的参与方数量,将所有第一定点数和第二定点数生成相应数量的运算数组。例如,将所有第一定点数和所有第二定点数生成一个运算数组。再例如,将第一参与方的所有第一定点数和所有第二定点数生成一个运算数组,并将第二参与方的所有第一定点数和所有第二定点数,生成另一个运算数组。
结合图2和上述第一个例子,假定本公开中的m+1个待运算数据均为单精度浮点数,且(m+1)/2组待运算数据均需要进行加法运算,则本公开生成的两个运算数组的一个例子如图4和图5所示。
图4为两个运算数组中的其中一个运算数组,可以称为第一运算数组。第一运算数组包括:各组待运算数据中的第一加数各自对应的第一定点数以及第二定点数。例如,图4中的元素1(即第一定点数n1a)和元素2(即第二定点数n1b)为图2中的待运算数据n1对应的第一定点数和第二定点数;图4中的元素3(即第一定点数n3a)和元素4(即第二定点数n3b)为图2中的待运算数据n3对应的第一定点数和第二定点数;以此类推,图4中的元素m(即第一定点数nma)和元素m+1(即第二定点数nmb)为图2中的待运算数据nm对应的第一定点数和第二定点数。
图5为两个运算数组中的其中另一个运算数组,可以称为第二运算数组。第二运算数组包括:各组待运算数据中的第二加数各自对应的第一定点数以及第二定点数。例如,图5中的元素1(即第一定点数n2a)和元素2(即第二定点数n2b)为图2中的待运算数据n2对应的第一定点数和第二定点数;图5中的元素3(即第一定点数n4a)和元素4(即第二定点数n4b)为图2中的待运算数据n4对应的第一定点数和第二定点数;以此类推,图5中的元素m(即第一定点数nm+1a)和元素m+1(即第二定点数nm+1b)为图2中的待运算数据nm+1对应的第一定点数和第二定点数。
需要特别说明的是,图4和图5中的元素的排列顺序可以根据实际需要灵活设置。例如,图4和图5中的所有第一定点数均按照组的顺序排列,并排列在所有第二定点数的前面,第二定点数也按照组的顺序排列。另外,在一组待运算数据包括多个待运算数据(如两个待运算数据),且运算类型不需要指数部分参与运算的情况下,该组待运算数据中的多个待运算数据各自对应的第二定点数可以相同。下同,不再一一说明。
本公开通过将一个半精度浮点数或者单精度浮点数等第一待运算数据,转换为第一定点数和第二定点数,使本公开可以利用SIMD技术,对半精度浮点数或者单精度浮点数等第一待运算数据进行并行运算处理,从而提高了运算的兼容性。
第二个例子,对于一个包括多个尾数和多个指数的第二待运算数据,本公开可以将该第二待运算数据中的多个符号位和多个尾数分别转换为第一定点数,并将该待运算数据中的多个指数转换为一个共享的第二定点数。例如,在第二待运算数据为复数的情况下,该复数的实部可以是一个单精度浮点数,该复数的虚部也可以是一个单精度浮点数,每一个单精度浮点数均包括:符号位、尾数以及指数,在复数的实部的单精度浮点数的指数和虚部的单精度浮点数的指数不相同的情况下,本公开可以通过调整其中一个单精度浮点数的尾数,使该复数的实部的单精度浮点数和虚部的单精度浮点数具有相同的指数,之后,本公开可以将实部的单精度浮点数的符号位和尾数转换为一个第一定点数,将虚部的单精度浮点数的符号位和尾数转换为另一个第一定点数,并将实部的单精度浮点数的指数和虚部的单精度浮点数的指数,转换为一个共享的第二定点数。在将参与同一类型运算的所有组待运算数据中的所有第二待运算数据分别转换为两个第一定点数和一个共享的第二定点数之后,本公开可以根据参与同一类型的运算的参与方数量,将所有第一定点数和第二定点数生成相应数量的运算数组。例如,将所有第一定点数和所有共享的第二定点数生成一个运算数组。再例如,将第一参与方的所有第一定点数和第一参与方的所有共享的第二定点数生成一个运算数组,并将第二参与方的所有第一定点数和第二参与方的所有第二定点数,生成另一个运算数组。
结合图2和上述第二个例子,假定本公开中的m+1个待运算数据均为复数,且(m+1)/2组待运算数据均需要进行加法运算,则本公开生成的两个运算数组的一个例子如图6和图7所示。
图6为两个运算数组中的其中一个运算数组,可以称为第一运算数组。第一运算数组包括:各组待运算数据中的第一加数的实部各自对应的第一定点数、各组待运算数据中的第一加数的虚部各自对应的第一定点数、以及各组待运算数据中的第一加数的实部和虚部对应的共享的第二定点数。例如,图6中的元素1(即第一定点数n1a)为图2中的待运算数据n1的实部对应的第一定点数,图6中的元素2(即第二定点数n1b)为图2中的待运算数据n1的虚部对应的第一定点数,图6中的元素3(即第二定点数2n1c)为图2中的待运算数据n1的实部和虚部对应的共享的第二定点数;图6中的元素4(即第一定点数n3a)为图2中的待运算数据n3的实部对应的第一定点数,图6中的元素5(即第二定点数n3b)为图2中的待运算数据n3的虚部对应的第一定点数,图6中的元素6(即第二定点数n3c)为图2中的待运算数据n3的实部和虚部对应的共享的第二定点数;以此类推,直到图6中的元素(3m-1)/2(即第一定点数nma)为图2中的待运算数据nm的实部对应的第一定点数,图6中的元素(3m+1)/2(即第二定点数nmb)为图2中的待运算数据nm的虚部对应的第一定点数,图6中的元素(3m+3)/2(即第二定点数nmc)为图2中的待运算数据nm的实部和虚部对应的共享的第二定点数。
图7为两个运算数组中的其中另一个运算数组,可以称为第二运算数组。第二运算数组可以包括:各组待运算数据中的第二加数的实部各自对应的第一定点数、各组待运算数据中的第二加数的虚部各自对应的第一定点数、以及各组待运算数据中的第二加数的实部和虚部对应的共享的第二定点数。例如,图7中的元素1(即第一定点数n2a)为图2中的待运算数据n2的实部对应的第一定点数,图7中的元素2(即第二定点数n2b)为图2中的待运算数据n2的虚部对应的第一定点数,图7中的元素3(即第二定点数n2c)为图2中的待运算数据n1的实部和虚部对应的共享的第二定点数;图7中的元素4(即第一定点数n4a)为图2中的待运算数据n4的实部对应的第一定点数,图7中的元素5(即第二定点数n4b)为图2中的待运算数据n4的虚部对应的第一定点数,图7中的元素6(即第二定点数n4c)为图2中的待运算数据n4的实部和虚部对应的共享的第二定点数;以此类推,直到图7中的元素(3m-1)/2(即第一定点数nma)为图2中的待运算数据nm+1的实部对应的第一定点数,图7中的元素(3m+1)/2(即第二定点数nm+1b)为图2中的待运算数据nm+1的虚部对应的第一定点数,图7中的元素(3m+3)/2(即第二定点数nm+1c)为图2中的待运算数据nm+1的实部和虚部对应的共享的第二定点数。
需要特别说明的是,本公开可以针对所有复数的实部的指数生成一个共享的第二定点数,也可以针对所有复数的虚部的指数生成一个共享的第二定点数,还可以针对所有复数的实部的指数和虚部的指数生成一个共享的第二定点数。在此不再详细的一一说明。另外,图6和图7中的元素的排列顺序可以根据实际需要灵活设置。例如,图6和图7中的所有第一定点数均按照组的顺序排列,且对于同一个待运算数据而言,实部对应的第一定点数排列在虚部对应的第一定点数的前面,所有第一定点数排列在所有第二定点数的前面,第二定点数也按照组的顺序排列。
本公开通过将一个复数等第二待运算数据,转换为多个第一定点数和一个共享的第二定点数,使本公开可以利用SIMD技术,对复数等第二待运算数据进行并行运算处理,从而提高了运算的兼容性,并有利于降低运算过程中的内存消耗。
第三个例子,对于多个第一待运算数据,本公开可以将多个第一待运算数据中的所有符号位和尾数分别转换为第一定点数,并将多个第一待运算数据中的所有指数转换为一个共享的第二定点数。例如,假定多个第一待运算数据均为半精度浮点数,在所有半精度浮点数的指数并不完全相同的情况下,本公开可以通过调整其中至少一半精度浮点数的尾数,使所有半精度浮点数具有相同的指数,之后,针对所有半精度浮点数中的每一个半精度浮点数的符号位和尾数,本公开均将其转换为一个第一定点数,从而获得多个第一定点数,本公开可以将所有半精度浮点数的指数转换为一个共享的第二定点数。再例如,假定多个第一待运算数据均为单精度浮点数,在所有单精度浮点数的指数并不完全相同的情况下,本公开可以通过调整其中至少一个单精度浮点数的尾数,使所有单精度浮点数具有相同的指数,之后,针对所有单精度浮点数中的每一个单精度浮点数的符号位和尾数,本公开均将其转换为一个第一定点数,从而获得多个第一定点数,本公开可以将所有单精度浮点数的指数转换为一个共享的第二定点数。在将参与同一类型运算的所有组待运算数据中的所有第一待运算数据分别转换为一个第一定点数以及各自对应的共享的第二定点数后,本公开可以根据参与同一类型的运算的参与方数量,将所有第一定点数和共享的第二定点数生成相应数量的运算数组。例如,将所有第一定点数和一个共享的第二定点数生成一个运算数组。再例如,将第一参与方的所有第一定点数和第一参与方的共享的第二定点数生成一个运算数组,并将第二参与方的所有第一定点数和第二参与方的共享的第二定点数,生成另一个运算数组。
结合图2和上述第三个例子,假定本公开中的m+1个待运算数据均为单精度浮点数,且(m+1)/2组待运算数据均需要进行加法运算,则本公开生成的两个运算数组的一个例子如图8和图9所示。
图8为两个运算数组中的其中一个运算数组,可以称为第一运算数组。第一运算数组可以包括:各组待运算数据中的第一加数各自对应的第一定点数以及所有第一加数对应的一个共享的第二定点数。例如,图8中的元素1(即第一定点数n1a)为图2中的待运算数据n1对应的第一定点数,元素2(即第一定点数n3a)为图2中的待运算数据n3对应的第一定点数;以此类推,直到图8中的元素(m+1)/2(即第一定点数nma)为图2中的待运算数据nm对应的第一定点数。图8中的第一运算数组中的最后一个元素(m+3)/2(即第二定点数nb1)为图2中的所有第一加数对应的共享的第二定点数。
图9为两个运算数组中的其中另一个运算数组,可以称为第二运算数组。第二运算数组可以包括:各组待运算数据中的第二加数各自对应的第一定点数以及所有第二加数对应的一个共享的第二定点数。例如,图9中的元素1(即第一定点数n2a)为图2中的待运算数据n2对应的第一定点数,图9中的元素2(即第一定点数n4a)为图2中的待运算数据n4对应的第一定点数;以此类推,直到图9中的元素(m+1)/2(即第一定点数nma)为图2中的待运算数据nm+1对应的第一定点数。图9中的第二运算数组中的最后一个元素(m+3)/2(即第二定点数nb1)为图2中的所有第二加数对应的共享的第二定点数。
需要特别说明的是,图8和图9中的元素的排列顺序可以根据实际需要灵活设置。例如,图8和图9中的第二定点数可以排在所有第一定点数的前面。再例如,本公开中的第一运算数组和第二运算数组中的其中一个运算数组可以不包含第二定点数,也就是说,在所有待运算数据具有同一个共享的第二定点数的情况下,本公开可以使所有运算数组均包括该共享的第二定点数,也可以使其中一个运算数组包括该共享的第二定点数,其他运算数组不包括该共享的第二定点数。
本公开通过将多个半精度浮点数或者单精度浮点数等第一待运算数据,转换为多个第一定点数和一个共享的第二定点数,使本公开可以利用SIMD技术,对半精度浮点数或者单精度浮点数等第一待运算数据进行并行运算处理,从而提高了运算的兼容性;并有利于显著降低运算过程中的内存消耗。
在一个可选示例中,本公开中的运算涉及到的针对尾数和指数的运算可以包括:针对尾数进行运算,保持指数不变。在该情况下,本公开可以确定针对尾数的运算所对应的第一SIMD接口函数,并根据运算数组中的对应尾数的元素确定第一SIMD接口函数的输入参数。
在一个可选示例中,本公开中的运算涉及到的针对尾数和指数的运算可以包括:针对尾数和指数均进行运算。在该情况下,本公开可以确定针对尾数的运算所对应的第一SIMD接口函数以及针对指数的运算所对应的第二SIMD接口函数,本公开可以根据运算数组中的对应尾数的元素确定第一SIMD接口函数的输入参数,并根据运算数组中的对应指数的元素确定第二SIMD接口函数的输入参数。
可选的,本公开中的第一SIMD接口函数和第二SIMD接口函数均为SIMD技术提供的接口函数。第一SIMD接口函数和第二SIMD接口函数可以相同,也可以不相同。第一SIMD接口函数和第二SIMD接口函数是否相同,取决于针对尾数的运算和针对指数的运算是否相同。本公开中的SIMD接口函数也可以称为SIMD指令或者SIMD函数等。
本公开通过根据运算涉及到的针对尾数和指数的运算,调用相应的SIMD接口函数,可以针对尾数进行运算,也可以针对尾数和指数分别进行运算,从而使本公开可以利用SIMD技术,对半精度浮点数、单精度浮点数以及复数等待运算数据进行并行运算处理,从而提高了运算的兼容性。另外,在运算涉及到的针对尾数和指数的运算包括:针对尾数进行运算,保持指数不变的情况下,本公开调用一次SIMD接口函数,可以实现两组尾数的运算,从而有利于提高非定点数的运算效率。
在一个可选示例中,本公开可以预先设置运算库,该运算库中通常包括多个预设运算接口函数,每一个预设运算接口函数可以对应运算数组的一种运算。也就是说,一个预设运算接口函数可以表示出针对运算数组的各元素所采用的一种处理方式。本公开中的调用SIMD接口函数,并为SIMD接口函数设置输入参数的操作,均可以由预设运算接口函数来实现。例如,首先,从预先设置的运算库中,调用预设运算接口函数,并将上述获得的运算数组(如图4至图9中的第一运算数组和第二运算数组等)作为调用的预设运算接口函数的输入参数,被调用的预设运算接口函数在获得了输入参数后,根据输入参数执行的操作包括但不限于:调用与同一类型运算涉及到的针对尾数和指数的运算,对应的SIMD接口函数,并根据运算数组中的元素确定调用的SIMD接口函数的输入参数。
可选的,在第一运算数组中的第i个元素和第二运算数组中的第i个元素进行相应运算的情况下,本公开中的预设运算接口函数可以方便快捷的从其输入参数的两个运算数组中获得需要进行运算的元素,为SIMD接口函数设置输入参数。
可选的,在从预先设置的运算库中调用预设运算接口函数时,可以考虑待运算数据的类型以及运算类型。也就是说,在设置运算库中的预设运算接口函数的过程中,可以考虑待运算数据的类型以及运算类型。例如,可以针对单精度浮点数的加法运算设置一个预设运算接口函数,并针对复数的加法运算设置另一个预设运算接口函数。如果针对单精度浮点数的加法运算和复数的加法运算设置同一个预设运算接口函数,则通常应使预设运算接口函数的输入参数体现出参与运算的待运算数据的数据类型(如单精度浮点数类型或者复数类型等),以便于预设运算接口函数执行后续的操作(如调用操作以及组合还原操作等)。
在一个可选示例中,SIMD接口函数的输入参数包括:两个32比特位。在运算类型包括两个参与方的情况下,本公开可以将两个需要进行运算的第一定点数或者两个需要运算的第二定点数形成32比特位,将另外两个需要进行运算的第一定点数或者另外两个需要运算的第二定点数形成32比特位,作为SIMD接口函数的输入参数,从而SIMD接口函数可以一次进行两次运算。在运算类型包括一个参与方的情况下,本公开可以将一个需要进行运算的第一定点数和第二定点数形成32比特位,将另外一个需要进行运算的第一定点数和第二定点数形成32比特位,作为SIMD接口函数的输入参数,从而SIMD接口函数可以一次进行两次运算。
本公开通过设置运算库,并通过调用运算库中的预设运算接口函数,来实现相应的操作,可以使针对多组待运算数据的运算模块化,从而有利于提高本公开的技术方案的可维护性。
在一个可选示例中,本公开在设置预设运算接口函数的输入参数时,除了将运算数组作为预设运算接口函数的输入参数,还可以将运算数组对应的运算次数作为预设运算接口函数的输入参数。其中的运算次数用于表示预设运算接口函数调用SIMD接口函数的次数。运算次数可以作为预设运算接口函数的第一个输入参数。
本公开通过将运算数组对应的次数也作为预设运算接口函数的输入参数,使预设运算接口函数对运算数组的处理更加明确,从而有利于提高预设运算接口函数的可维护性。
在一个可选示例中,本公开中的根据SIMD接口函数基于输入参数的运算结果,生成至少一组待运算数据分别对应的运算结果的操作,也可以由预设运算接口函数来实现。即本公开中的预设运算接口函数在调用了SIMD接口函数,并设置了SIMD接口函数的输入参数之后,SIMD接口函数会根据其输入参数执行相应的操作,从而返回运算结果,预设运算接口函数在获得了SIMD接口函数返回的运算结果后,可以根据针对运算结果预先设置的组合还原方式,生成各组待运算数据各自对应的运算结果,并输出,从而本公开可以根据预设运算接口函数的输出,获得各组待运算数据各自对应的运算结果。需要注意的是,在获得SIMD的接口函数返回的运算结果时,运算结果中的符号位应保留1比特位。
本公开通过设置运算库,并通过调用运算库中的预设运算接口函数,来实现相应的操作,可以使针对多组待运算数据的运算模块化,从而有利于提高本公开的技术方案的可维护性以及可应用性。
在一个可选示例中,在本公开的运算涉及到的针对尾数和指数的运算为:针对尾数进行运算,保持指数不变的情况下,本公开可以根据尾数运算对应的SIMD接口函数的运算结果以及上述生成的第二定点数进行处理(如组合还原等),从而形成各组待运算数据分别对应的运算结果。
结合图4和图5,在所有待运算数据进行加法运算的情况下,本公开可以获得(m+1)/2个运算结果,(m+1)/2个运算结果是针对参与方的尾数进行运算获得的运算结果,本公开可以将运算结果与相应的第二定点数进行组合还原,以形成单精度浮点数,从而实现单精度浮点数的加法运算。而且,本公开可以通过调用一次SIMD接口函数,实现两次单精度浮点数的加法运算。
结合图6和图7,在所有待运算数据进行加法运算的情况下,本公开可以获得(m+1)个运算结果,(m+1)个运算结果包括:针对参与方的实部的尾数进行运算获得的运算结果、针对参与方的虚部的尾数进行运算获得的结果,本公开可以将实部的尾数的运算结果、虚部的尾数的运算结果与相应的第二定点数进行组合还原,以形成复数,从而实现复数的加法运算。而且,本公开可以通过调用一次SIMD接口函数,实现一次复数的加法运算。
结合图8和图9,在所有待运算数据进行加法运算的情况下,本公开可以获得(m+1)/2个运算结果,(m+1)/2个运算结果针对参与方的尾数进行运算获得的结果,本公开可以将一个运算结果与相应的共享第二定点数进行组合还原,以形成单精度浮点数,从而实现单精度浮点数的加法运算。而且,本公开可以通过调用一次SIMD接口函数,实现两次单精度浮点数的加法运算。
在一个可选示例中,在本公开的运算涉及到的针对尾数和指数的运算为:针对尾数和指数均进行运算的情况下,本公开可以根据尾数运算对应的SIMD接口函数的运算结果和指数运算对应的SIMD接口函数的运算结果,生成各组待运算数据分别对应的运算结果。例如,对于乘法运算而言,需要针对尾数和指数均进行运算,其中的尾数运算结果可以为一个16比特位的定点数,其中的指数运算结果可以为一个16比特位的定点数。本公开通过对两个16比特位的定点数进行组合还原,可以形成单精度浮点数,从而实现单精度浮点数的乘法运算。本公开可以通过对四个16比特位的定点数的组合还原,形成复数,从而实现复数的乘法运算。其他运算,形成待运算数据的运算结果的过程,可以参照上述描述,在此不再一一详细说明。
本公开通过根据运算涉及到的针对尾数和指数的运算,对运算结果进行组合还原等处理,可以实现非定点数的运算,从而有利于提高基于SIMD的接口函数的适用范围,并有利于提高非定点数运算的效率。
示例性装置
图10示出了本公开的基于单指令多数据流的数据运算装置一个实施例的结构示意图。该实施例的装置可用于实现本公开上述各方法实施例。
图10中,该实施例的装置包括:生成运算数组模块1000、调用接口函数模块1001以及生成运算结果模块1002。
生成运算数组模块1000主要用于根据参与同一类型运算的至少一组待运算数据,生成运算数组。其中,一组待运算数据包括:参与同一运算的所有待运算数据,其中的运算数组包括:至少一个用于表示待运算数据的符号位和尾数的第一定点数、以及至少一个用于表示待运算数据的指数的第二定点数。
可选的,生成运算数组模块1000可以包括:第一子模块、第二子模块以及第三子模块中的至少一个。
第一子模块用于将一个第一待运算数据中的符号位和尾数转换为一个第一定点数,并将该第一待运算数据中的指数转换为一个第二定点数。其中的第一待运算数据包括一个尾数和一个指数。第一待运算数据可以为半精度浮点数或者单精度浮点数等。例如,第一子模块将待运算数据中的半精度浮点数的尾数转换为第一定点数,并将该半精度浮点数的指数转换为第二定点数。再例如,第一子模块将待运算数据中的单精度浮点数的尾数转换为第一定点数,并将该单精度浮点数的指数转换为第二定点数。
第二子模块用于将一个第二待运算数据中的多个符号位和尾数分别转换为第一定点数,并将该第二待运算数据中的多个指数转换为一个共享的第二定点数。其中的第二待运算数据包括:多个尾数和多个指数。第二待运算数据可以为复数等。例如,第二子模块可以将待运算数据中的复数转换为,对应该复数的实部的尾数的一个第一定点数、对应该复数的虚部的尾数的一个第一定点数、以及对应该复数的实部的指数和虚部的指数的一个共享的第二定点数。
第三子模块可以用于将多个第一待运算数据中的各符号位和尾数分别转换为第一定点数,并将多个第一待运算数据中的各指数转换为一个共享的第二定点数。其中的第一待运算数据包括一个尾数和一个指数。第一待运算数据可以为半精度浮点数或者单精度浮点数等。例如,第三子模块可以将待运算数据中的一组半精度浮点数转换为,对应该组半精度浮点数的尾数的一组第一定点数、以及对应该组半精度浮点数的指数的一个共享的第二定点数。再例如,第三子模块可以将待运算数中的一组单精度浮点数转换为,对应该组单精度浮点数的尾数的一组第一定点数、以及对应该组单精度浮点数的指数的一个共享的第二定点数。
调用接口函数模块1001用于根据运算涉及到的针对尾数和指数的运算,调用相应的基于单指令多数据流SIMD的接口函数,并根据生成运算数组模块1000生成的运算数组中的元素确定基于SIMD的接口函数的输入参数。
可选的,调用接口函数模块1001可以调用与针对尾数的运算对应的第一SIMD接口函数,并根据运算数组中的对应尾数的元素确定第一SIMD接口函数的输入参数。
可选的,调用接口函数模块1001可以调用与针对尾数的运算对应的第一SIMD接口函数,并调用与针对指数的运算对应的第二SIMD接口函数,根据运算数组中的对应尾数的元素和对应指数的元素分别确定所述第一SIMD接口函数和第二SIMD接口函数的输入参数。
可选的,调用接口函数模块1001可以包括:运算库以及调用子模块。运算库包括多个预设运算接口函数,且每一个预设运算接口函数对应一种类型的运算。调用子模块可以从运算库中,调用预设运算接口函数,并将运算数组作为预设运算接口函数的输入参数,这样,本公开可以经由预设运算接口函数执行调用与同一类型运算涉及到的针对尾数和指数的运算,对应的SIMD接口函数,并根据运算数组中的元素确定调用的SIMD接口函数的输入参数的步骤。
可选的,调用子模块可以将运算数组和运算数组对应的运算次数作为预设运算接口函数的输入参数;其中,运算次数用于表示预设运算接口函数调用SIMD接口函数的次数。
生成运算结果模块1002用于根据调用接口函数模块调用的基于SIMD的接口函数的运算结果,生成至少一组待运算数据分别对应的运算结果。
可选的,本公开中的预设运算接口函数可以执行上述根据SIMD接口函数基于输入参数的运算结果,生成各组待运算数据分别对应的运算结果的操作。也就是说,生成运算结果模块1002可以集成设置在预设运算接口函数内部。
可选的,预设运算接口函数可以根据尾数运算对应的SIMD接口函数的运算结果和相应的第二定点数,生成各组待运算数据分别对应的运算结果。
可选的,预设运算接口函数可以根据尾数运算对应的SIMD接口函数的运算结果和指数运算对应的SIMD接口函数的运算结果,生成各组待运算数据分别对应的运算结果。
示例性电子设备
下面参考图11来描述根据本公开实施例的电子设备。图11示出了根据本公开实施例的电子设备的框图。如图11所示,电子设备111包括一个或多个处理器1111和存储器1112。
处理器1111可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备111中的其他组件以执行期望的功能。
存储器1112可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器,例如,可以包括:随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器,例如,可以包括:只读存储器(ROM)、硬盘以及闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器1111可以运行所述程序指令,以实现上文所述的本公开的各个实施例的基于单指令多数据流的数据运算方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,电子设备111还可以包括:输入装置1113以及输出装置1114等,这些组件通过总线***和/或其他形式的连接机构(未示出)互连。此外,该输入设备1113还可以包括例如键盘、鼠标等等。该输出装置1114可以向外部输出各种信息。该输出设备1114可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图11中仅示出了该电子设备111中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备111还可以包括任何其他适当的组件。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的基于单指令多数据流的数据运算方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的基于单指令多数据流的数据运算方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列举)可以包括:具有一个或者多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势以及效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于***实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开中涉及的器件、装置、设备、***的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备以及***。诸如“包括”、“包含、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述,以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改等对于本领域技术人员而言,是非常显而易见的,并且在此定义的一般原理可以应用于其他方面,而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式中。尽管以上已经讨论了多个示例方面以及实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (12)
1.一种基于单指令多数据流的数据运算方法,包括:
根据参与同一类型运算的至少一组待运算数据,生成运算数组,其中,一组待运算数据包括:参与所述同一类型运算中的同一运算的待运算数据,所述运算数组包括:至少一个用于表示待运算数据的符号位和尾数的第一定点数、以及至少一个用于表示待运算数据的指数的第二定点数;
调用与所述同一类型运算涉及到的针对尾数和指数的运算对应的单指令多数据流SIMD接口函数,并根据所述运算数组中的元素确定所述SIMD接口函数的输入参数;
根据所述SIMD接口函数基于所述输入参数的运算结果,生成所述至少一组待运算数据分别对应的运算结果。
2.根据权利要求1所述的方法,其中,所述根据参与同一类型运算的至少一组待运算数据,生成运算数组,包括下述至少一个:
将一个第一待运算数据中的符号位和尾数转换为一个第一定点数,将该第一待运算数据中的指数转换为一个第二定点数;其中,所述第一待运算数据包括一个尾数和一个指数;
将一个第二待运算数据中的多个符号位和尾数分别转换为第一定点数,并将该第二待运算数据中的多个指数转换为一个共享的第二定点数;所述第二待运算数据包括:多个尾数和多个指数;
将多个第一待运算数据中的各符号位和尾数分别转换为第一定点数,将所述多个第一待运算数据中的各指数转换为一个共享的第二定点数。
3.根据权利要求1或2所述的方法,其中,所述调用与所述同一类型运算涉及到的针对尾数和指数的运算,对应的单指令多数据流SIMD接口函数,并根据所述运算数组中的元素确定所述SIMD接口函数的输入参数,包括下述至少之一:
调用与针对尾数的运算对应的第一SIMD接口函数,并根据所述运算数组中的对应尾数的元素确定所述第一SIMD接口函数的输入参数;
调用与针对尾数的运算对应的第一SIMD接口函数,并调用与针对指数的运算对应的第二SIMD接口函数,根据所述运算数组中的对应尾数的元素和对应指数的元素分别确定所述第一SIMD接口函数和第二SIMD接口函数的输入参数。
4.根据权利要求1至3中任一项所述的方法,其中,所述调用与所述同一类型运算涉及到的针对尾数和指数的运算,对应的单指令多数据流SIMD接口函数,并根据所述运算数组中的元素确定所述SIMD接口函数的输入参数,包括:
从预先设置的运算库中,调用预设运算接口函数,并将所述运算数组作为所述预设运算接口函数的输入参数;
经由所述预设运算接口函数执行所述调用与所述同一类型运算涉及到的针对尾数和指数的运算,对应的SIMD接口函数,并根据所述运算数组中的元素确定所述调用的SIMD接口函数的输入参数的步骤;
其中,所述运算库中包括多个预设运算接口函数,且每一个预设运算接口函数对应运算数组的一种运算。
5.根据权利要求4所述的方法,其中,所述将所述运算数组作为所述预设运算接口函数的输入参数,包括:
将所述运算数组和所述运算数组对应的运算次数作为所述预设运算接口函数的输入参数;
其中,所述运算次数用于表示预设运算接口函数调用SIMD接口函数的次数。
6.根据权利要求4或5所述的方法,其中,所述根据所述SIMD接口函数基于所述输入参数的运算结果,生成所述至少一组待运算数据分别对应的运算结果,包括:
经由所述预设运算接口函数执行所述根据所述SIMD接口函数基于所述输入参数的运算结果,生成所述至少一组待运算数据分别对应的运算结果的步骤;
根据所述预设运算接口函数的输出,获得所述至少一组待运算数据分别对应的运算结果。
7.根据权利要求1至6中任一项所述的方法,其中,所述根据所述SIMD接口函数基于所述输入参数的运算结果,生成所述至少一组待运算数据分别对应的运算结果,包括:
根据尾数运算对应的SIMD接口函数的运算结果和所述第二定点数,生成所述至少一组待运算数据分别对应的运算结果;或者
根据尾数运算对应的SIMD接口函数的运算结果和指数运算对应的SIMD接口函数的运算结果,生成所述至少一组待运算数据分别对应的运算结果。
8.一种基于单指令多数据流的数据运算装置,包括:
生成运算数组模块,用于根据参与同一类型运算的至少一组待运算数据,生成运算数组,其中,一组待运算数据包括:参与同一运算的所有待运算数据,所述运算数组包括:至少一个用于表示待运算数据的符号位和尾数的第一定点数、以及至少一个用于表示待运算数据的指数的第二定点数;
调用接口函数模块,用于根据所述运算涉及到的针对尾数和指数的运算,调用相应的基于单指令多数据流SIMD的接口函数,并根据所述生成运算数组模块生成的运算数组中的元素确定基于SIMD的接口函数的输入参数;
生成运算结果模块,用于根据所述调用接口函数模块调用的基于SIMD的接口函数的运算结果,生成所述至少一组待运算数据分别对应的运算结果。
9.根据权利要求8所述的装置,其中,所述生成运算数组模块包括下述至少一个:
第一子模块,用于将一个第一待运算数据中的符号位和尾数转换为一个第一定点数,并将该第一待运算数据中的指数转换为一个第二定点数;其中,所述第一待运算数据包括一个尾数和一个指数;
第二子模块,用于将一个第二待运算数据中的多个符号位和尾数分别转换为第一定点数,并将该第二待运算数据中的多个指数转换为一个共享的第二定点数;所述第二待运算数据包括:多个尾数和多个指数;
第三子模块,用于将多个第一待运算数据中的各符号位和尾数分别转换为第一定点数,将所述多个第一待运算数据中的各指数转换为一个共享的第二定点数。
10.根据权利要求8或9所述的装置,其中,所述调用接口函数模块包括:
运算库,包括多个预设运算接口函数,且每一个预设运算接口函数对应一种类型的运算;
调用子模块,用于从所述运算库中,调用预设运算接口函数,并将所述运算数组作为所述预设运算接口函数的输入参数;
经由所述预设运算接口函数执行所述调用与所述同一类型运算涉及到的针对尾数和指数的运算,对应的SIMD接口函数,并根据所述运算数组中的元素确定所述调用的SIMD接口函数的输入参数的步骤;
其中,所述运算库中包括多个预设运算接口函数,且每一个预设运算接口函数对应运算数组的一种运算。
11.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-7中任一项所述的方法。
12.一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910566415.8A CN112148371B (zh) | 2019-06-27 | 2019-06-27 | 基于单指令多数据流的数据运算方法、装置、介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910566415.8A CN112148371B (zh) | 2019-06-27 | 2019-06-27 | 基于单指令多数据流的数据运算方法、装置、介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112148371A true CN112148371A (zh) | 2020-12-29 |
CN112148371B CN112148371B (zh) | 2023-10-24 |
Family
ID=73868492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910566415.8A Active CN112148371B (zh) | 2019-06-27 | 2019-06-27 | 基于单指令多数据流的数据运算方法、装置、介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148371B (zh) |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6341300B1 (en) * | 1999-01-29 | 2002-01-22 | Sun Microsystems, Inc. | Parallel fixed point square root and reciprocal square root computation unit in a processor |
JP2004078886A (ja) * | 2002-06-20 | 2004-03-11 | Matsushita Electric Ind Co Ltd | 浮動小数点格納方法及び浮動小数点演算装置 |
US20060028482A1 (en) * | 2004-08-04 | 2006-02-09 | Nvidia Corporation | Filtering unit for floating-point texture data |
EP2057549A1 (en) * | 2006-08-11 | 2009-05-13 | Aspex Semiconductor Limited | Improvements relating to direct data input/output interfaces |
US20090164544A1 (en) * | 2007-12-19 | 2009-06-25 | Jeffrey Dobbek | Dynamic range enhancement for arithmetic calculations in real-time control systems using fixed point hardware |
CN101620589A (zh) * | 2008-06-30 | 2010-01-06 | 英特尔公司 | 处理器中的有效并行浮点异常处理 |
US20140208069A1 (en) * | 2013-01-22 | 2014-07-24 | Samplify Systems, Inc. | Simd instructions for data compression and decompression |
CN104111816A (zh) * | 2014-06-25 | 2014-10-22 | 中国人民解放军国防科学技术大学 | Gpdsp中多功能simd结构浮点融合乘加运算装置 |
CN104166535A (zh) * | 2013-07-19 | 2014-11-26 | 郑州宇通客车股份有限公司 | 定点处理器及其防溢方法 |
CN106951211A (zh) * | 2017-03-27 | 2017-07-14 | 南京大学 | 一种可重构定浮点通用乘法器 |
CN107077323A (zh) * | 2014-11-03 | 2017-08-18 | Arm 有限公司 | 使用可编程有效性数据的数据处理的装置和方法 |
US20180225093A1 (en) * | 2017-02-03 | 2018-08-09 | Intel Corporation | Implementing logarithmic and antilogarithmic operations based on piecewise linear approximation |
CN108459840A (zh) * | 2018-02-14 | 2018-08-28 | 中国科学院电子学研究所 | 一种simd结构浮点融合点乘运算单元 |
US20180322607A1 (en) * | 2017-05-05 | 2018-11-08 | Intel Corporation | Dynamic precision management for integer deep learning primitives |
US20190042922A1 (en) * | 2018-06-29 | 2019-02-07 | Kamlesh Pillai | Deep neural network architecture using piecewise linear approximation |
-
2019
- 2019-06-27 CN CN201910566415.8A patent/CN112148371B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6341300B1 (en) * | 1999-01-29 | 2002-01-22 | Sun Microsystems, Inc. | Parallel fixed point square root and reciprocal square root computation unit in a processor |
JP2004078886A (ja) * | 2002-06-20 | 2004-03-11 | Matsushita Electric Ind Co Ltd | 浮動小数点格納方法及び浮動小数点演算装置 |
US20060028482A1 (en) * | 2004-08-04 | 2006-02-09 | Nvidia Corporation | Filtering unit for floating-point texture data |
CN1993728A (zh) * | 2004-08-04 | 2007-07-04 | 辉达公司 | 用于浮点纹理数据的过滤单元 |
EP2057549A1 (en) * | 2006-08-11 | 2009-05-13 | Aspex Semiconductor Limited | Improvements relating to direct data input/output interfaces |
US20090164544A1 (en) * | 2007-12-19 | 2009-06-25 | Jeffrey Dobbek | Dynamic range enhancement for arithmetic calculations in real-time control systems using fixed point hardware |
CN101620589A (zh) * | 2008-06-30 | 2010-01-06 | 英特尔公司 | 处理器中的有效并行浮点异常处理 |
US20140208069A1 (en) * | 2013-01-22 | 2014-07-24 | Samplify Systems, Inc. | Simd instructions for data compression and decompression |
CN104166535A (zh) * | 2013-07-19 | 2014-11-26 | 郑州宇通客车股份有限公司 | 定点处理器及其防溢方法 |
CN104111816A (zh) * | 2014-06-25 | 2014-10-22 | 中国人民解放军国防科学技术大学 | Gpdsp中多功能simd结构浮点融合乘加运算装置 |
CN107077323A (zh) * | 2014-11-03 | 2017-08-18 | Arm 有限公司 | 使用可编程有效性数据的数据处理的装置和方法 |
US20180225093A1 (en) * | 2017-02-03 | 2018-08-09 | Intel Corporation | Implementing logarithmic and antilogarithmic operations based on piecewise linear approximation |
CN106951211A (zh) * | 2017-03-27 | 2017-07-14 | 南京大学 | 一种可重构定浮点通用乘法器 |
US20180322607A1 (en) * | 2017-05-05 | 2018-11-08 | Intel Corporation | Dynamic precision management for integer deep learning primitives |
CN108459840A (zh) * | 2018-02-14 | 2018-08-28 | 中国科学院电子学研究所 | 一种simd结构浮点融合点乘运算单元 |
US20190042922A1 (en) * | 2018-06-29 | 2019-02-07 | Kamlesh Pillai | Deep neural network architecture using piecewise linear approximation |
Non-Patent Citations (2)
Title |
---|
杨毅;郭立;史鸿声;季建;: "一个面向移动设备的可编程顶点处理器的设计", 中国科学技术大学学报 * |
焦永;: "一种单精度浮点对数运算的硬件实现", 电脑知识与技术 * |
Also Published As
Publication number | Publication date |
---|---|
CN112148371B (zh) | 2023-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102447636B1 (ko) | 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법 | |
CN106990937B (zh) | 一种浮点数处理装置和处理方法 | |
US9519460B1 (en) | Universal single instruction multiple data multiplier and wide accumulator unit | |
EP1857925B1 (en) | Method and apparatus for decimal number multiplication using hardware for binary number operations | |
US20200272419A1 (en) | Compressing like-magnitude partial products in multiply accumulation | |
JPH10214176A (ja) | 超越関数を迅速に計算する装置 | |
US10649730B2 (en) | Normalization of a product on a datapath | |
US11275561B2 (en) | Mixed precision floating-point multiply-add operation | |
CN111290732B (zh) | 基于posit数据格式的浮点数乘法运算电路 | |
CN110826706B (zh) | 用于神经网络的数据处理方法和装置 | |
CN117472325B (zh) | 一种乘法处理器、运算处理方法、芯片及电子设备 | |
US20140244704A1 (en) | Fused multiply add pipeline | |
CN117420982A (zh) | 包括融合乘累加器的芯片、设备及数据运算的控制方法 | |
CN112148371B (zh) | 基于单指令多数据流的数据运算方法、装置、介质和设备 | |
US7747669B2 (en) | Rounding of binary integers | |
JP2019101896A (ja) | 演算処理装置および演算処理装置の制御方法 | |
CN116700666A (zh) | 一种浮点数处理方法及装置 | |
US5661674A (en) | Divide to integer | |
CN116700664A (zh) | 一种确定浮点数平方根的方法及装置 | |
US20220291899A1 (en) | Processing unit, method and computer program for multiplication | |
US20230289139A1 (en) | Hardware device to execute instruction to convert input value from one data format to another data format | |
CN116700665B (zh) | 一种确定浮点数平方根倒数的方法及装置 | |
US20230289138A1 (en) | Hardware device to execute instruction to convert input value from one data format to another data format | |
US20230289141A1 (en) | Operation unit, floating-point number calculation method and apparatus, chip, and computing device | |
WO2023141933A1 (en) | Techniques, devices, and instruction set architecture for efficient modular division and inversion |
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 |