CN117762492A - 数据处理方法、装置、计算机设备及可读存储介质 - Google Patents
数据处理方法、装置、计算机设备及可读存储介质 Download PDFInfo
- Publication number
- CN117762492A CN117762492A CN202311792391.0A CN202311792391A CN117762492A CN 117762492 A CN117762492 A CN 117762492A CN 202311792391 A CN202311792391 A CN 202311792391A CN 117762492 A CN117762492 A CN 117762492A
- Authority
- CN
- China
- Prior art keywords
- register
- data
- current
- multiplication
- elements
- 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
Links
- 238000003672 processing method Methods 0.000 title abstract description 13
- 239000013598 vector Substances 0.000 claims abstract description 144
- 238000000034 method Methods 0.000 claims abstract description 50
- 238000004590 computer program Methods 0.000 claims description 3
- 229910052754 neon Inorganic materials 0.000 description 17
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 17
- 238000010586 diagram Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Abstract
本申请提供一种数据处理方法、装置、计算机设备及可读存储介质,该方法包括:从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部;将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器;根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。能够充分利用寄存器的存储空间,在保证运算效率的基础上提升处理器资源的利用率,还能够提升复数向量乘的运算效率。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据处理方法、装置、计算机设备及可读存储介质。
背景技术
复数向量乘是图像处理、信号处理等领域中最基础的一种向量运算。复数向量乘是指在计算机设备的处理器中,将两个长度为N的向量Aj(Aj=wj+xjij=0,1,2,…N-1)、Bj(Bj=yj+zjij=0,1,2,…N-1)的对应元素(也即序号相同元素)进行复数乘法运算,循环N次后得到一个复数向量。
现有技术中,在进行复数向量乘时,每次循环仅计算向量中一个元素的复数乘。对于具有高位数寄存器的处理器来说,这种方式无法充分利用高位数寄存器的存储空间,导致处理器资源的浪费。
发明内容
本申请的目的在于,针对上述现有技术中的不足,提供一种数据处理方法、装置、计算机设备及可读存储介质,以解决现有技术中无法充分利用高位数寄存器的存储空间从而导致处理器资源的浪费的问题。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供一种数据处理方法,包括:
从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部;
将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器;
根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可能的实现方式,所述将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器,包括:
按照各第一当前元素在所述第一复数向量中的正向顺序,将各所述第一当前元素的实部依次存储至第一寄存器中,并将各所述第一当前元素的虚部依次存储至第二寄存器中;
按照各第二当前元素在所述第二复数向量中的正向顺序,将各所述第二当前元素的实部依次存储至第三寄存器中,并将各所述第二当前元素的虚部依次存储至第四寄存器中。
作为一种可能的实现方式,所述根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果,包括:
根据所述第一寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定中间运算结果,并将所述中间运算结果存储至第五寄存器以及第六寄存器;
根据所述中间运算结果、所述第二寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可能的实现方式,所述根据所述第一寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定中间运算结果,并将所述中间运算结果存储至第五寄存器以及第六寄存器,包括:
根据所述第一寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第五寄存器中;
根据所述第一寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第六寄存器中。
作为一种可能的实现方式,所述根据所述第一寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中,包括:
调用目标指令集中的第一指令,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中。
作为一种可能的实现方式,所述根据所述中间运算结果、所述第二寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果,包括:
根据所述第五寄存器、所述第二寄存器以及所述第四寄存器中的数据,确定所述当前相乘结果中的实部,并将所述当前相乘结果中的实部存储至第七寄存器;
根据所述第六寄存器、所述第二寄存器以及所述第三寄存器中的数据,确定所述当前相乘结果中的虚部,并将所述当前相乘结果中的实部存储至第八寄存器;
根据所述第七寄存器中的数据以及所述第八寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可能的实现方式,所述根据所述第五寄存器、所述第二寄存器以及所述第四寄存器中的数据,确定所述当前相乘结果中的实部,包括:
根据所述第二寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
作为一种可能的实现方式,所述根据所述第二寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部,包括:
调用目标指令集中的第二指令,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
作为一种可能的实现方式,所述根据所述第六寄存器、所述第二寄存器以及所述第三寄存器中的数据,确定所述当前相乘结果中的虚部,包括:
根据所述第二寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,得到虚实相乘结果,并从所述第六寄存器中读取相同排位上的数据与所述虚实相乘结果进行相加运算,得到所述当前相乘结果中的虚部。
作为一种可能的实现方式,所述根据所述第七寄存器中的数据以及所述第八寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果,包括:
根据所述第七寄存器中各数据的正向顺序以及所述第八寄存器中各数据的正向顺序,将所述第七寄存器中的数据与所述第八寄存器中的数据交叉读取并存储至预设的内存中,得到所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
第二方面,本申请实施例提供一种数据处理装置,包括:
读取模块,用于从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部;
存储模块,用于将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器;
确定模块,用于根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可能的实现方式,所述存储模块具体用于:
按照各第一当前元素在所述第一复数向量中的正向顺序,将各所述第一当前元素的实部依次存储至第一寄存器中,并将各所述第一当前元素的虚部依次存储至第二寄存器中;
按照各第二当前元素在所述第二复数向量中的正向顺序,将各所述第二当前元素的实部依次存储至第三寄存器中,并将各所述第二当前元素的虚部依次存储至第四寄存器中。
作为一种可能的实现方式,所述确定模块具体用于:
根据所述第一寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定中间运算结果,并将所述中间运算结果存储至第五寄存器以及第六寄存器;
根据所述中间运算结果、所述第二寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可能的实现方式,所述确定模块具体用于:
根据所述第一寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第五寄存器中;
根据所述第一寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第六寄存器中。
作为一种可能的实现方式,所述确定模块具体用于:
调用目标指令集中的第一指令,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中。
作为一种可能的实现方式,所述确定模块具体用于:
根据所述第五寄存器、所述第二寄存器以及所述第四寄存器中的数据,确定所述当前相乘结果中的实部,并将所述当前相乘结果中的实部存储至第七寄存器;
根据所述第六寄存器、所述第二寄存器以及所述第三寄存器中的数据,确定所述当前相乘结果中的虚部,并将所述当前相乘结果中的实部存储至第八寄存器;
根据所述第七寄存器中的数据以及所述第八寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可能的实现方式,所述确定模块具体用于:
根据所述第二寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
作为一种可能的实现方式,所述确定模块具体用于:
调用目标指令集中的第二指令,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
作为一种可能的实现方式,所述确定模块具体用于:
根据所述第二寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,得到虚实相乘结果,并从所述第六寄存器中读取相同排位上的数据与所述虚实相乘结果进行相加运算,得到所述当前相乘结果中的虚部。
作为一种可能的实现方式,所述确定模块具体用于:
根据所述第七寄存器中各数据的正向顺序以及所述第八寄存器中各数据的正向顺序,将所述第七寄存器中的数据与所述第八寄存器中的数据交叉读取并存储至预设的内存中,得到所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
第三方面,本申请实施例提供一种计算机设备,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器执行所述机器可读指令,以执行如上述第一方面所述的复数向量乘处理方法的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述第一方面所述的复数向量乘处理方法的步骤。
本申请实施例所提供的数据处理方法、装置、计算机设备及可读存储介质,在复数向量乘的每次循环计算时,从内存中读取两个复数向量各自的多个当前元素,将多个元素的实部存储至同一寄存器,并将多个元素的虚部同时存储至同一寄存器,在此基础上,基于这些寄存器中存储的数据同时进行运算,得到多个当前元素的当前相乘结果。由于每次从内存中读取多个当前元素存入寄存器中,因此能够充分利用寄存器的存储空间,在保证运算效率的基础上极大提升处理器资源的利用率。另外,本实施例将当前元素的实部和虚部分别存储至不同的寄存器中,便于在相乘运算时快速提取数据进行运算,因此还能够提升复数向量乘的运算效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的数据处理方法的流程示意图;
图2为本申请实施例提供的数据处理的另一流程示意图;
图3为本申请实施例提供的数据处理的又一流程示意图;
图4为复数向量乘的一种流程示例图;
图5为本申请实施例提供的一种数据处理装置的模块结构图;
图6为本申请实施例提供的计算机设备60的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有的复数向量乘在每次循环时仅计算复数向量中一个元素的复数乘。假设进行复数向量乘的两个向量分别为Aj(Aj=wj+xjij=0,1,2,…N-1)、Bj(Bj=yj+zjij=0,1,2,…N-1),则具体计算过程包括:
步骤S1、从内存中读取向量Aj第一个元素A0的实部w0、虚部x0存放于寄存器中,假设该寄存器为D0,并从内存中读取向量Bj第一个元素B0的实部y0、虚部z0存放入寄存器中,假设该寄存器为D1。
步骤S2:计算向量乘后Z0的实部。
具体的,从寄存器D0中读取数据w0、x0与寄存器D1中的数据y0、z0进行两次乘法运算及一次减法运算,得到Z0的实部w0y0-x0z0。
步骤S3:计算向量乘后Z0的虚部。
具体的,从寄存器D0中读取数据w0、x0与寄存器D1中的数据y0、z0进行两次乘法运算及一次加法运算,得到Z0的虚部w0z0+x0y0。
步骤S4:将Z0的实部w0y0-x0z0与虚部w0z0+x0y0分别存入相乘后向量Zj指向的内存中。
步骤S5:重复步骤S1-步骤S4,直至计算完复数乘的第N个元素。
在上述计算过程中,每次循环计算时都只是将一个元素的实部和虚部存放至一个寄存器中参与运算。以元素为单精度float类型为例,单精度float类型的长度为4字节,即32比特,则每次循环计算时仅向一个寄存器中存入32比特的数据。然而,目前的寄存器容量普遍较大。以ARM(AdvancedRISC Machine)Cortex-A系列处理器为例,其寄存器的长度可以达到128比特。则每次循环计算时将32比特数据存入其寄存器之后,其寄存器中会剩余大量的空闲存储位置。因此,使用现有的复数向量乘方法,对于具有高位数寄存器的处理器来说,无法充分利用高位数寄存器的存储空间,会导致处理器资源的浪费。
本申请基于上述问题,提出一种数据处理方法,通过在复数向量乘的每次循环计算时将多个元素的实部存储至同一寄存器,并将多个元素的虚部同时存储至同一寄存器,并将同一寄存器中存储的多个元素同时进行运算,从而充分利用寄存器的存储空间,在保证运算效率的基础上极大提升处理器资源的利用率。
图1为本申请实施例提供的数据处理方法的流程示意图,该方法的执行主体可以为具有计算处理能力的计算机设备,该计算机设备上部署有具有高位数寄存器的处理器。示例性地,该处理器可以为ARM Cortex-A系列处理器。如图1所示,该方法包括:
S101、从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部。
上述第一复数向量和第二复数向量是需要进行复数向量乘的两个向量,相应的,利用本申请实施例所处理得到的结果为第一复数向量与第二复数向量的相乘结果。在进行复数向量乘之前,首先将第一复数向量和第二复数向量存储在计算机设备的内存中。具体的,针对第一复数向量,按照第一复数向量中各元素的正向顺序,依次将第一复数向量各元素的实部和虚部存入内存中。针对第二复数向量,按照第二复数向量中各元素的正向顺序,依次将第二复数向量各元素的实部和虚部存入内存中。
可选地,在对第一复数向量和第二复数向量进行复数向量乘时,可以循环执行本实施例的步骤S101-S103。每次循环执行时,按照第一复数向量中各元素在内存中的正向顺序,从内存读取第一复数向量中尚未读取过的前L个元素参与运算处理,并按照第二复数向量中各元素在内存中的正向顺序,从内存中读取第二复数向量中尚未读取过的前L个元素参与运算处理。其中,L可以根据第一复数向量和第二复数向量的元素类型以及计算机设备的处理器中寄存器的长度来确定。示例性地,若第一复数向量和第二复数向量的元素类型为单精度float类型,且寄存器的长度为128比特,则每个元素中实部和虚部分别占用32比特的存储位置,因此,在每次循环时,可以同时读取第一复数向量在内存中尚未读取的前4个元素,以及同时读取第二复数向量在内存中尚未读取的前4个元素,即L取值为4。在这种情况下,寄存器的存储位置可以被全部占用,不再存在空闲存储位置。
本实施例的步骤S101-S103的循环次数,可以根据第一复数向量和第二复数的元素个数N以及上述L的值来确定。示例性地,假设第一复数向量的元素个数以及第二复数向量的元素个数N均为128,且L为4,即每次读取4个元素参与运算,则循环次数为[N/L]=32。值得说明的是,如果N除以L的结果中存在余数,则余数对应的部分元素可以基于现有技术中的方法逐一进行元素相乘。示例性地,L为4,[N/L]=m,且N除以L的结果存在余数,则第一复数向量和第二复数向量的前4m个元素按照本实施例所述的方法步骤循环进行元素相乘,剩余的N-4m个元素按照现有技术的方法步骤逐一进行元素相乘。
本步骤中所述的多个第一当前元素可以是指任意一次循环时从内存中读取的第一复数向量中尚未读取的前L个元素,多个第二当前元素可以是指与多个第一当前元素同次循环时从内存中读取的第二复数向量中尚未读取的前L个元素。
S102、将上述多个第一当前元素的实部和虚部存储至不同的寄存器,并将上述多个第二当前元素的实部和虚部存储至不同的寄存器。
可选地,将多个第一当前元素的实部和虚部存储至不同的寄存器。例如,将多个第一当前元素的实部按照预设的存储顺序存入同一寄存器,并将多个第一当前元素的虚部按照预设的存储顺序存入同一寄存器。应理解,实部和虚部存入的寄存器是不同的寄存器。
可选地,将多个第二当前元素的实部和虚部存储至不同的寄存器。例如,将多个第二当前元素的实部按照预设的存储顺序存入同一寄存器,并将多个第二当前元素的虚部按照预设的存储顺序存入同一寄存器。应理解,实部和虚部存入的寄存器是不同的寄存器。相应的,在本步骤中使用处理器中的四个寄存器,分别用来存储多个第一当前元素的实部、多个第一当前元素的虚部、多个第二当前元素的实部以及多个当前第二元素的虚部。
以处理器为ARM Cortex-A系列处理器为例,该处理器支持Neon指令集,Neon指令集是一种单指令多数据流(Single Instruction Multiple Data,简称SIMD)扩展结果,Neon指令集能够通过一组指令对多组数据进行并行操作。作为一种示例,假设第一复数向量和第二复数向量的元素类型为单精度float类型,在本步骤中,可以通过Neon中的vld2q_f32指令从内存中交叉读取8个32位的float数据并存入两个不同的寄存器中。应理解,针对多个第一当前元素和多个第二当前元素,需要分别调用vld2q_f32指令以将数据存入对应的寄存器。
S103、根据各寄存器中存储的数据,确定上述多个第一当前元素与上述多个第二当前元素的当前相乘结果。
可选地,在按照预设的存储顺序将多个第一当前元素的实部和虚部以及多个第二当前元素的实部和虚部存入不同的寄存器之后,可以相应根据各寄存器中按照上述存储顺序所存储的数据进行元素相乘运算,从而得到多个第一当前元素与多个第二当前元素的当前相乘结果。
其中,上述当前相乘结果是每次循环所得到的运算结果。以前述的L取值为4为例,每次循环时同时对四个第一当前元素和四个第二当前元素进行元素相乘,则可以得到四个相乘后元素,该四个相乘后元素即为当前相乘结果。如果本次循环为首次循环,则将该四个相乘后元素存入内存中预设空间内的起始位置,如果本次循环为非首次循环,则将该四个相乘后元素存入内存中前次循环的相乘后结果之后。当循环全部完成后,则将内存中存储的所有相乘后结果作为第一复数向量和第二复数向量的相乘结果。值得注意的是,针对前述步骤S101中所述的N除以L的结果中存在余数的情况,当循环全部完成后,剩余元素按照现有技术的方法进行元素相乘之后的结果依次存储至循环所得到的相乘后结果之后,得到第一复数向量和第二复数向量的相乘结果。
本实施例中,在复数向量乘的每次循环计算时,从内存中读取两个复数向量各自的多个当前元素,将多个元素的实部存储至同一寄存器,并将多个元素的虚部同时存储至同一寄存器,在此基础上,基于这些寄存器中存储的数据同时进行运算,得到多个当前元素的当前相乘结果。由于每次从内存中读取多个当前元素存入寄存器中,因此能够充分利用寄存器的存储空间,在保证运算效率的基础上极大提升处理器资源的利用率。另外,本实施例将当前元素的实部和虚部分别存储至不同的寄存器中,便于在相乘运算时快速提取数据进行运算,因此还能够提升复数向量乘的运算效率。
以下,对上述步骤S102中将数据存储至寄存器的过程进行说明。
可选地,可以通过如下两种方式中的任意一种来实现步骤S102的数据存储。
第一种方式中,可以按照元素在复数向量中的正向顺序将元素的实部和虚部存储至寄存器。
具体的,按照各第一当前元素在第一复数向量中的正向顺序,将各第一当前元素的实部依次存储至第一寄存器中,并将各第一当前元素的虚部依次存储至第二寄存器中;并且,按照各第二当前元素在第二复数向量中的正向顺序,将各第二当前元素的实部依次存储至第三寄存器中,并将各第二当前元素的虚部依次存储至第四寄存器中。
示例性地,假设第一复数向量为Aj(Aj=wj+xjij=0,1,2,…N-1),第二复数向量为Bj(Bj=yj+zjij=0,1,2,…N-1),第一寄存器为D0,第二寄存器为D1,第三寄存器为D2,第四寄存器为D3,L取值为4。则以第一次循环为例,在第一次循环时,从内存中读取第一复数向量的前四个元素,分别为:w0+x0i、w1+x1i、w2+x2i、w3+x3i,并读取第二复数向量的前四个元素,分别为:y0+z0i、y1+z1i、y2+z2i、y3+z3i。将第一复数向量前四个元素的实部按照正向存储至第一寄存器D0,存储之后D0中的数据依次为:w0、w1、w2、w3。将第一复数向量前四个元素的虚部按照正向存储至第二寄存器D1,存储之后D1中的数据依次为:x0、x1、x2、x3。将第二复数向量前四个元素的实部按照正向存储至第三寄存器D2,存储之后D2中的数据依次为:y0、y1、y2、y3。将第二复数向量前四个元素的虚部按照正向存储至第四寄存器D3,存储之后D3中的数据依次为:z0、z1、z2、z3。
第二种方式,可以按照元素在复数向量中的逆向顺序将元素的实部和虚部存储至寄存器。
示例性地,假设第一复数向量为Aj(Aj=wj+xjij=0,1,2,…N-1),第二复数向量为Bj(Bj=yj+zjij=0,1,2,…N-1),第一寄存器为D0,第二寄存器为D1,第三寄存器为D2,第四寄存器为D3,L取值为4。则以第一次循环为例,在第一次循环时,从内存中读取第一复数向量的前四个元素,分别为:w0+x0i、w1+x1i、w2+x2i、w3+x3i,并读取第二复数向量的前四个元素,分别为:y0+z0i、y1+z1i、y2+z2i、y3+z3i。将第一复数向量前四个元素的实部按照逆向存储至第一寄存器D0,存储之后D0中的数据依次为:w3、w2、w1、w0。将第一复数向量前四个元素的虚部按照逆向存储至第二寄存器D1,存储之后D1中的数据依次为:x3、x2、x1、x0。将第二复数向量前四个元素的实部按照逆向存储至第三寄存器D2,存储之后D2中的数据依次为:y3、y2、y1、y0。将第二复数向量前四个元素的虚部按照逆向存储至第四寄存器D3,存储之后D3中的数据依次为:z3、z2、z1、z0。
通过上述任一方式,使得多个第一当前元素的实部和虚部以及多个第二当前元素的实部和虚部分别存储在不同的第一寄存器、第二寄存器、第三寄存器以及第四寄存器中,使得后续运算时可以快速高效读取数据并进行运算,提升运算效率。
在通过上述实施例将多个第一当前元素的实部和虚部以及多个第二当前元素的实部和虚部分别存储在第一寄存器、第二寄存器、第三寄存器以及第四寄存器的基础上,在执行上述步骤S103时,可以基于第一寄存器、第二寄存器、第三寄存器以及第四寄存器中存储的数据进行相乘运算,以得到多个第一当前元素和多个第二当前元素的当前相乘结果。
在基于第一寄存器、第二寄存器、第三寄存器以及第四寄存器中存储的数据进行相乘运算时,可以直接按照复数元素的运算规则,依次从寄存器中读取对应位的数据依次进行两次乘法、一次减法、两次乘法以及一次加法,从而依次得到每个第一当前元素与对应的第二当前元素的相乘后结果。或者,也可以按照下述方式先计算中间运算结果,将中间运算结果存储在寄存器中,再基于中间运算结果进行运算,以同时得到多个第一当前元素与多个第二当前元素的当前相乘后结果。以下对这种方式进行详细解释。
图2为本申请实施例提供的数据处理的另一流程示意图,如图2所示,上述步骤S103可以包括:
S201、根据上述第一寄存器、上述第三寄存器以及上述第四寄存器中的数据,确定中间运算结果,并将该中间运算结果存储至第五寄存器以及第六寄存器。
如前文所述的,第一寄存器D0存储的是多个第一当前元素的实部,第二寄存器D1存储的是多个第一当前元素的虚部,第三寄存器D2存储的是多个第二当前元素的实部,第四寄存器D3存储的是多个第二当前元素的虚部。基于第一寄存器D0、第三寄存器D2以及第四寄存器D3中的数据进行运算,可以得到中间运算结果。其中,中间运算结果可以包括各第一当前元素的实部与对应的第二当前元素的实部的相乘结果,以及,各第一当前元素的实部与对应第二当前元素的虚部的相乘结果。
可选地,可以将中间运算结果中各第一当前元素的实部与对应的第二当前元素的实部的相乘结果存储在上述第五寄存器中,将各第一当前元素的实部与对应第二当前元素的虚部的相乘结果,存储在第六寄存器中。
S202、根据上述中间运算结果、上述第二寄存器、上述第三寄存器以及上述第四寄存器中的数据,确定多个第一当前元素与多个第二当前元素的当前相乘结果。
可选地,上述中间运算结果中包含了各第一当前元素的实部与对应的第二当前元素的实部的相乘结果,以及,各第一当前元素的实部与对应第二当前元素的虚部的相乘结果,在此基础上,结合第二寄存器中存储的各第一当前元素的虚部、第三寄存器中存储的各第二当前元素的实部以及第四寄存器中存储的各第二当前元素的虚部,可以运算能得到多个第一当前元素与多个第二当前元素的当前相乘结果。
本实施例中,在多个第一当前元素和多个第二当前元素被同时存储在寄存器的前提下,通过计算中间运算结果,将中间运算结果存储在单独的寄存器中,使得可以基于中间运算结果以及多个第一当前元素的实部和多个第二当前元素的实部和虚部计算当前相乘结果,从而实现了同时运算得到多个第一当前元素和多个第二当前元素的相乘结果。
以下对上述步骤S201确定中间运算结果的过程进行说明。
作为一种可选的实施方式,如果第一寄存器、第三寄存器以及第四寄存器中的数据是按照元素在复数向量中的正向顺序存储的,则可以按照正向顺序读取并进行运算。
具体的,可以根据第一寄存器中各数据的正向顺序以及第三寄存器中各数据的正向顺序,依次从第一寄存器以及第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第五寄存器中。
并且,根据第一寄存器中各数据的正向顺序以及第四寄存器中各数据的正向顺序,依次从第一寄存器以及第四寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第六寄存器中。
示例性地,假设第一复数向量为Aj(Aj=wj+xjij=0,1,2,…N-1),第二复数向量为Bj(Bj=yj+zjij=0,1,2,…N-1),第一寄存器为D0,第二寄存器为D1,第三寄存器为D2,第四寄存器为D3,第五寄存器为D4,第六寄存器为D5,L取值为4。则以第一次循环为例,在第一次循环时,将第一复数向量前四个元素的实部按照正向存储至第一寄存器D0,存储之后D0中的数据依次为:w0、w1、w2、w3。将第一复数向量前四个元素的虚部按照正向存储至第二寄存器D1,存储之后D1中的数据依次为:x0、x1、x2、x3。将第二复数向量前四个元素的实部按照正向存储至第三寄存器D2,存储之后D2中的数据依次为:y0、y1、y2、y3。将第二复数向量前四个元素的虚部按照正向存储至第四寄存器D3,存储之后D3中的数据依次为:z0、z1、z2、z3。在此基础上,按照正向顺序从第一寄存器以及第三寄存器读取数据并相乘。具体为:从第一寄存器读取w0,从第三寄存器读取y0,相乘得到w0·y0,从第一寄存器读取w1,从第三寄存器读取y1,相乘得到w1·y1,从第一寄存器读取w2,从第三寄存器读取y2,相乘得到w2·y2,从第一寄存器读取w3,从第三寄存器读取y3,相乘得到w3·y3,将相乘结果存储至第五寄存器D4,存储之后D4中的数据依次为:w0·y0、w1·y1、w2·y2、w3·y3。另外,按照正向顺序从第一寄存器以及第四寄存器读取数据并相乘。具体为:从第一寄存器读取w0,从第四寄存器读取z0,相乘得到w0·z0,从第一寄存器读取w1,从第四寄存器读取z1,相乘得到w1·z1,从第一寄存器读取w2,从第四寄存器读取z2,相乘得到w2·z2,从第一寄存器读取w3,从第四寄存器读取z3,相乘得到w3·z3,将相乘结果存储至第六寄存器D5,存储之后D5中的数据依次为:w0·z0、w1·z1、w2·z2、w3·z3。
可选地,可以调用目标指令集中的第一指令,依次从第一寄存器以及第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中。
继续以处理器为ARM Cortex-A系列处理器为例,上述目标指令集可以为Neon,相应的,上述第一指令可以为Neon中的vmulq_f32指令。通过Neon中的vmulq_f32指令,可以将两个NEON寄存器中4个32位float数据对应相乘,得到4个32位float的乘积数据。
从第一寄存器以及第四寄存器读取数据进行相乘相应也可以通过调用上述目标指令集中的第一指令来实现,此处不再赘述。
本实施例中,通过将第一寄存器与第三寄存器中的数据对应相乘并依次存入第五寄存器中,并将第一寄存器与第四寄存器中的数据对应相乘并依次存入第六寄存器中,能够并行快速计算出中间结果,便于后继续快速并行计算出当前相乘结果。
作为另一种可选的实施方式,如果第一寄存器、第三寄存器以及第四寄存器中的数据是按照元素在复数向量中的逆向顺序存储的,则可以按照逆向顺序读取并进行运算。
具体的,可以根据第一寄存器中各数据的逆向顺序以及第三寄存器中各数据的逆向顺序,依次从第一寄存器以及第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照逆向顺序存储至第五寄存器中。
并且,根据第一寄存器中各数据的逆向顺序以及第四寄存器中各数据的逆向顺序,依次从第一寄存器以及第四寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照逆向顺序存储至第六寄存器中。
继续参照上述示例,如果执行本实施例方式,则存储之后D4中的数据依次为:w3·y3、w2·y2、w1·y1、w0·y0,存储之后D5中的数据依次为:w3·z3、w2·z2、w1·z1、w0·z0。
以下,对上述步骤S202确定当前相乘结果的过程进行说明。
图3为本申请实施例提供的数据处理的又一流程示意图,如图3所示,上述步骤S202可以包括:
S301、根据第五寄存器、第二寄存器以及第四寄存器中的数据,确定当前相乘结果中的实部,并将当前相乘结果中的实部存储至第七寄存器。
由于第五寄存器中存储了各第一当前元素的实部与对应的第二当前元素的实部的相乘结果,第二寄存器中存储了各第一当前元素的虚部,第四寄存中存储了各第二当前元素的虚部,因此,可以从第五寄存器、第二寄存器以及第四寄存器中读取对应数据并进行运算,从而得到当前相乘结果中的实部。在此基础上,将当前相乘结果中的实部存储至第七寄存器,用于形成当前相乘结果。
S302、根据第六寄存器、第二寄存器以及第三寄存器中的数据,确定当前相乘结果中的虚部,并将当前相乘结果中的实部存储至第八寄存器。
由于第六寄存器中存储了各第一当前元素的实部与对应的第二当前元素的虚部的相乘结果,第二寄存器中存储了各第一当前元素的虚部,第三寄存中存储了各第二当前元素的实部,因此,可以从第六寄存器、第二寄存器以及第三寄存器中读取对应数据并进行运算,从而得到当前相乘结果中的虚部。在此基础上,将当前相乘结果中的虚部存储至第八寄存器,用于形成当前相乘结果。
S303、根据第七寄存器中的数据以及第八寄存器中的数据,确定多个第一当前元素与多个第二当前元素的当前相乘结果。
本实施例中,利用各寄存器中存储的数据,能够并行快速计算出当前相乘结果的实部和虚部,并基于实部和虚部得到当前相乘结果,从而实现快速并行运算出当前相乘结果。
在执行上述步骤S301时,如果前述的第五寄存器、第二寄存器以及第四寄存器中的数据是按照正向顺序存储的,则按照正向顺序读取数据并运算得到当前相乘结果的实部,如果第五寄存器、第二寄存器以及第四寄存器中的数据是按照逆向顺序存储的,则按照逆向顺序读取数据并运算得到当前相乘结果的实部。以下对按照正向顺序读取数据并运算得到当前相乘结果的实部的过程进行详细说明。按照逆向顺序读取数据并运算得到当前相乘结果的实部的过程与如下过程类似,仅数据读取以及存储顺序不同,不再单独赘述。
可选地,按照正向顺序读取数据并运算得到当前相乘结果的实部以实现步骤S301的过程包括:
根据第二寄存器中各数据的正向顺序以及第四寄存器中各数据的正向顺序,依次从第二寄存器以及第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从第五寄存器中读取相同排位上的数据与虚虚相乘结果进行相减运算,得到当前相乘结果中的实部。
其中,对第二寄存器中的数据与第四寄存器中排位相同的数据进行相乘运算,得到的是虚虚相乘结果,而第五寄存器中的数据是第一当前元素的实部与第二当前元素的实部的相乘结果,因此属于实实相乘结果,因此,将实实相乘结果减去虚虚相乘结果,即得到当前相乘结果中的实部。
继续沿用前述实施例中的示例,假设第一复数向量为Aj(Aj=wj+xji j=0,1,2,…N-1),第二复数向量为Bj(Bj=yj+zji j=0,1,2,…N-1),第一寄存器为D0,第二寄存器为D1,第三寄存器为D2,第四寄存器为D3,第五寄存器为D4,第六寄存器为D5,第七寄存器为D6,L取值为4。则以第一次循环为例,在第一次循环时,将第一复数向量前四个元素的实部按照正向存储至第一寄存器D0,存储之后D0中的数据依次为:w0、w1、w2、w3。将第一复数向量前四个元素的虚部按照正向存储至第二寄存器D1,存储之后D1中的数据依次为:x0、x1、x2、x3。将第二复数向量前四个元素的实部按照正向存储至第三寄存器D2,存储之后D2中的数据依次为:y0、y1、y2、y3。将第二复数向量前四个元素的虚部按照正向存储至第四寄存器D3,存储之后D3中的数据依次为:z0、z1、z2、z3。在此基础上,按照正向顺序从第一寄存器以及第三寄存器读取数据并相乘,将相乘结果存储至第五寄存器D4,存储之后D4中的数据依次为:w0·y0、w1·y1、w2·y2、w3·y3。另外,按照正向顺序从第一寄存器以及第四寄存器读取数据并相乘,将相乘结果存储至第六寄存器D5,存储之后D5中的数据依次为:w0·z0、w1·z1、w2·z2、w3·z3。则将第二寄存器D1的数据与第四寄存器D3的数据依次相乘之后,所得到的虚虚相乘结果为:x0·z0、x1·z1、x2·z2、x3·z3。再将第五寄存器D4的实实相乘结果与虚虚相乘结果相减之后得到当前相乘结果中的实部:w0·y0-x0·z0、w1·y1-x1·z1、w2·y2-x2·z2、w3·y3-x3·z3。将当前相乘结果中的实部存储至第七寄存器D6,D6中的数据依次为:w0·y0-x0·z0、w1·y1-x1·z1、w2·y2-x2·z2、w3·y3-x3·z3。
本实施例中,通过计算虚虚相乘结果并将第五寄存器中存储的实实相乘结果与该虚虚相乘结果相减,可以快速计算得到准确的实部结果。
可选地,可以调用目标指令集中的第二指令,依次从第二寄存器以及第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从第五寄存器中读取相同排位上的数据与虚虚相乘结果进行相减运算,得到当前相乘结果中的实部。
继续以处理器为ARM Cortex-A系列处理器为例,上述目标指令集可以为Neon,相应的,上述第二指令可以为Neon中的vfmsq_f32指令。通过Neon中的vfmsq_f32指令,可以实现乘积累减,将输入的第一个装满float数据的D寄存器数据与输入的另外两个D寄存器乘积结果相减。
接下来对上述步骤S302的执行过程进行说明。在执行上述步骤S302时,如果前述的第六寄存器、第二寄存器以及第三寄存器中的数据是按照正向顺序存储的,则按照正向顺序读取数据并运算得到当前相乘结果的虚部,如果第六寄存器、第二寄存器以及第三寄存器中的数据是按照逆向顺序存储的,则按照逆向顺序读取数据并运算得到当前相乘结果的虚部。以下对按照正向顺序读取数据并运算得到当前相乘结果的虚部的过程进行详细说明。按照逆向顺序读取数据并运算得到当前相乘结果的虚部的过程与如下过程类似,仅数据读取以及存储顺序不同,不再单独赘述。
可选地,按照正向顺序读取数据并运算得到当前相乘结果的虚部以实现步骤S302的过程包括:
根据第二寄存器中各数据的正向顺序以及第三寄存器中各数据的正向顺序,依次从第二寄存器以及第三寄存器中读取排位相同的数据并进行相乘运算,得到虚实相乘结果,并从第六寄存器中读取相同排位上的数据与虚实相乘结果进行相加运算,得到当前相乘结果中的虚部。
其中,对第二寄存器中的数据与第三寄存器中排位相同的数据进行相乘运算,得到的是虚实相乘结果,而第六寄存器中的数据是第一当前元素的实部与第二当前元素的虚部的相乘结果,因此属于实虚相乘结果,因此,将实虚相乘结果加上虚实相乘结果,即得到当前相乘结果中的虚部。
继续沿用前述实施例中的示例,假设第一复数向量为Aj(Aj=wj+xjij=0,1,2,…N-1),第二复数向量为Bj(Bj=yj+zjij=0,1,2,…N-1),第一寄存器为D0,第二寄存器为D1,第三寄存器为D2,第四寄存器为D3,第五寄存器为D4,第六寄存器为D5,第七寄存器为D6,第八寄存器为D7,L取值为4。则以第一次循环为例,在第一次循环时,将第一复数向量前四个元素的实部按照正向存储至第一寄存器D0,存储之后D0中的数据依次为:w0、w1、w2、w3。将第一复数向量前四个元素的虚部按照正向存储至第二寄存器D1,存储之后D1中的数据依次为:x0、x1、x2、x3。将第二复数向量前四个元素的实部按照正向存储至第三寄存器D2,存储之后D2中的数据依次为:y0、y1、y2、y3。将第二复数向量前四个元素的虚部按照正向存储至第四寄存器D3,存储之后D3中的数据依次为:z0、z1、z2、z3。在此基础上,按照正向顺序从第一寄存器以及第三寄存器读取数据并相乘,将相乘结果存储至第五寄存器D4,存储之后D4中的数据依次为:w0·y0、w1·y1、w2·y2、w3·y3。另外,按照正向顺序从第一寄存器以及第四寄存器读取数据并相乘,将相乘结果存储至第六寄存器D5,存储之后D5中的数据依次为:w0·z0、w1·z1、w2·z2、w3·z3。则将第二寄存器D1的数据与第三寄存器D2的数据依次相乘之后,所得到的虚实相乘结果为:x0·y0、x1·y1、x2·y2、x3·y3。再将第六寄存器D5的实虚相乘结果与虚实相乘结果相加之后得到当前相乘结果中的虚部:w0·z0+x0·y0、w1·z1+x1·y1、w2·z2+x2·y2、w3·z3+x3·y3。将当前相乘结果中的虚部存储至第八寄存器D7,D7中的数据依次为:w0·z0+x0·y0、w1·z1+x1·y1、w2·z2+x2·y2、w3·z3+x3·y3。
本实施例中,通过计算虚实相乘结果并将第六寄存器中存储的实虚相乘结果与该虚实相乘结果相加,可以快速计算得到准确的虚部结果。
可选地,可以调用目标指令集中的第三指令,依次从第二寄存器以及第三寄存器中读取排位相同的数据并进行相乘运算,得到虚实相乘结果,并从第六寄存器中读取相同排位上的数据与虚实相乘结果进行相加运算,得到当前相乘结果中的虚部。
继续以处理器为ARM Cortex-A系列处理器为例,上述目标指令集可以为Neon,相应的,上述第三指令可以为Neon中的vfmaq_f32指令。通过Neon中的vfmaq_f32指令,可以实现乘积累加,将输入的第一个装满float数据的D寄存器数据对应与输入的另外两个D寄存器乘积结果相加。
作为一种可选的实施方式,上述步骤S303可以包括:
根据第七寄存器中各数据的正向顺序以及第八寄存器中各数据的正向顺序,将第七寄存器中的数据与第八寄存器中的数据交叉读取并存储至预设的内存中,得到多个第一当前元素与多个第二当前元素的当前相乘结果。
继续沿用前述实施例中的示例,在第一次循环时,第七寄存器D6中的数据依次为:w0·y0-x0·z0、w1·y1-x1·z1、w2·y2-x2·z2、w3·y3-x3·z3,第八寄存器D7中的数据依次为:w0·z0+x0·y0、w1·z1+x1·y1、w2·z2+x2·y2、w3·z3+x3·y3,则进行交叉读取之后,得到的前四个元素的当前相乘结果为:(w0·y0-x0·z0)+(w0·z0+x0·y0)i,(w1·y1-x1·z1)+(w1·z1+x1·y1)i,(w2·y2-x2·z2)+(w2·z2+x2·y2)i,(w3·y3-x3·z3)+(w3·z3+x3·y3)i。该相乘结果即为第一复数向量和第二复数向量相乘之后的前四项元素。
可选地,可以调用目标指令集中的第四指令,将第七寄存器中00的数据与第八寄存器中的数据交叉读取并存储至预设的内存中,得到多个第一当前元素与多个第二当前元素的当前相乘结果。
继续以处理器为ARM Cortex-A系列处理器为例,上述目标指令集可以为Neon,相应的,上述第四指令可以为Neon中的vst2q_f32指令。通过Neon中的vst2q_f32指令,可以从两个D寄存器交叉取32位float数据存入指定内存中。
下述图4示出了在前述的示例所描述的情况下,即第一复数向量为向量A,第二复数向量为向量B,向量相乘结果为向量C。第一寄存器为D0,第二寄存器为D1,第三寄存器为D2,第四寄存器为D3,第五寄存器为D4,第六寄存器为D5,第七寄存器为D6,第八寄存器为D7,L取值为4,第一复数向量和第二复数向量的元素类型为单精度float类型时,基于本申请实施例的方法进行复数向量乘运算的一个完整示例流程。图4中涉及的细节已在前述各实施例中进行了详细描述,此处不再赘述。图4中另示出的av.val[0]表示寄存器D0存储的实部、av.val[1]表示寄存器D1存储的虚部。bv.val[0]表示寄存器D2存储的实部、bv.val[1]表示寄存器D3存储的虚部。av.val[0]、bv.val[0]上四个float元素对应相乘得到cv0。av.val[0]、bv.val[1]上四个float元素对应相乘得到cv1。dv0为向量A与向量B相乘后前四项元素的实部,即前述的当前相乘结果中的实部,dv1为向量A与向量B相乘后前四项元素的虚部,即前述的当前相乘结果中的虚部。
基于同一发明构思,本申请实施例中还提供了与数据处理方法对应的数据处理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述数据处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
图5为本申请实施例提供的一种数据处理装置的模块结构图,如图5所示,该装置包括:
读取模块501,用于从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部。
存储模块502,用于将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器;
确定模块503,用于根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可选的实施方式,所述存储模块502具体用于:
按照各第一当前元素在所述第一复数向量中的正向顺序,将各所述第一当前元素的实部依次存储至第一寄存器中,并将各所述第一当前元素的虚部依次存储至第二寄存器中。
按照各第二当前元素在所述第二复数向量中的正向顺序,将各所述第二当前元素的实部依次存储至第三寄存器中,并将各所述第二当前元素的虚部依次存储至第四寄存器中。
作为一种可选的实施方式,所述确定模块503具体用于:
根据所述第一寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定中间运算结果,并将所述中间运算结果存储至第五寄存器以及第六寄存器。
根据所述中间运算结果、所述第二寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可选的实施方式,所述确定模块503具体用于:
根据所述第一寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第五寄存器中。
根据所述第一寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第六寄存器中。
作为一种可选的实施方式,所述确定模块503具体用于:
调用目标指令集中的第一指令,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中。
作为一种可选的实施方式,所述确定模块503具体用于:
根据所述第五寄存器、所述第二寄存器以及所述第四寄存器中的数据,确定所述当前相乘结果中的实部,并将所述当前相乘结果中的实部存储至第七寄存器。
根据所述第六寄存器、所述第二寄存器以及所述第三寄存器中的数据,确定所述当前相乘结果中的虚部,并将所述当前相乘结果中的实部存储至第八寄存器。
根据所述第七寄存器中的数据以及所述第八寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
作为一种可选的实施方式,所述确定模块503具体用于:
根据所述第二寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
作为一种可选的实施方式,所述确定模块503具体用于:
调用目标指令集中的第二指令,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
作为一种可选的实施方式,所述确定模块503具体用于:
根据所述第二寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,得到虚实相乘结果,并从所述第六寄存器中读取相同排位上的数据与所述虚实相乘结果进行相加运算,得到所述当前相乘结果中的虚部。
作为一种可选的实施方式,所述确定模块503具体用于:
根据所述第七寄存器中各数据的正向顺序以及所述第八寄存器中各数据的正向顺序,将所述第七寄存器中的数据与所述第八寄存器中的数据交叉读取并存储至预设的内存中,得到所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
本申请实施例还提供了一种计算机设备60,如图6所示,为本申请实施例提供的计算机设备60的结构示意图,包括:处理器61、存储器62,可选地,还可以包括总线63。所述存储器62存储有所述处理器61可执行的机器可读指令(比如,图5中的装置中读取模块501、存储模块502以及确定模块503对应的执行指令等),当计算机设备60运行时,所述处理器61与所述存储器62之间通过总线63通信,所述机器可读指令被所述处理器61执行时执行上述方法实施例中的方法步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中数据处理方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (13)
1.一种数据处理方法,其特征在于,包括:
从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部;
将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器;
根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
2.根据权利要求1所述的方法,其特征在于,所述将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器,包括:
按照各第一当前元素在所述第一复数向量中的正向顺序,将各所述第一当前元素的实部依次存储至第一寄存器中,并将各所述第一当前元素的虚部依次存储至第二寄存器中;
按照各第二当前元素在所述第二复数向量中的正向顺序,将各所述第二当前元素的实部依次存储至第三寄存器中,并将各所述第二当前元素的虚部依次存储至第四寄存器中。
3.根据权利要求2所述的方法,其特征在于,所述根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果,包括:
根据所述第一寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定中间运算结果,并将所述中间运算结果存储至第五寄存器以及第六寄存器;
根据所述中间运算结果、所述第二寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定中间运算结果,并将所述中间运算结果存储至第五寄存器以及第六寄存器,包括:
根据所述第一寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第五寄存器中;
根据所述第一寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果按照正向顺序存储至第六寄存器中。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中,包括:
调用目标指令集中的第一指令,依次从所述第一寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,将相乘运算结果存储至第五寄存器中。
6.根据权利要求3所述的方法,其特征在于,所述根据所述中间运算结果、所述第二寄存器、所述第三寄存器以及所述第四寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果,包括:
根据所述第五寄存器、所述第二寄存器以及所述第四寄存器中的数据,确定所述当前相乘结果中的实部,并将所述当前相乘结果中的实部存储至第七寄存器;
根据所述第六寄存器、所述第二寄存器以及所述第三寄存器中的数据,确定所述当前相乘结果中的虚部,并将所述当前相乘结果中的实部存储至第八寄存器;
根据所述第七寄存器中的数据以及所述第八寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
7.根据权利要求6所述的方法,其特征在于,所述根据所述第五寄存器、所述第二寄存器以及所述第四寄存器中的数据,确定所述当前相乘结果中的实部,包括:
根据所述第二寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第二寄存器中各数据的正向顺序以及所述第四寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部,包括:
调用目标指令集中的第二指令,依次从所述第二寄存器以及所述第四寄存器中读取排位相同的数据并进行相乘运算,得到虚虚相乘结果,并从所述第五寄存器中读取相同排位上的数据与所述虚虚相乘结果进行相减运算,得到所述当前相乘结果中的实部。
9.根据权利要求6所述的方法,其特征在于,所述根据所述第六寄存器、所述第二寄存器以及所述第三寄存器中的数据,确定所述当前相乘结果中的虚部,包括:
根据所述第二寄存器中各数据的正向顺序以及所述第三寄存器中各数据的正向顺序,依次从所述第二寄存器以及所述第三寄存器中读取排位相同的数据并进行相乘运算,得到虚实相乘结果,并从所述第六寄存器中读取相同排位上的数据与所述虚实相乘结果进行相加运算,得到所述当前相乘结果中的虚部。
10.根据权利要求6所述的方法,其特征在于,所述根据所述第七寄存器中的数据以及所述第八寄存器中的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果,包括:
根据所述第七寄存器中各数据的正向顺序以及所述第八寄存器中各数据的正向顺序,将所述第七寄存器中的数据与所述第八寄存器中的数据交叉读取并存储至预设的内存中,得到所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
11.一种数据处理装置,其特征在于,包括:
读取模块,用于从内存中读取第一复数向量的多个第一当前元素以及第二复数向量的多个第二当前元素,各所述第一当前元素和各所述第二当前元素中分别包括实部和虚部;
存储模块,用于将所述多个第一当前元素的实部和虚部存储至不同的寄存器,并将所述多个第二当前元素的实部和虚部存储至不同的寄存器;
确定模块,用于根据各寄存器中存储的数据,确定所述多个第一当前元素与所述多个第二当前元素的当前相乘结果。
12.一种计算机设备,其特征在于,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器执行所述机器可读指令,以执行如权利要求1至10任一所述的复数向量乘处理方法的步骤。
13.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至10任一所述的复数向量乘处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311792391.0A CN117762492A (zh) | 2023-12-22 | 2023-12-22 | 数据处理方法、装置、计算机设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311792391.0A CN117762492A (zh) | 2023-12-22 | 2023-12-22 | 数据处理方法、装置、计算机设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117762492A true CN117762492A (zh) | 2024-03-26 |
Family
ID=90321729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311792391.0A Pending CN117762492A (zh) | 2023-12-22 | 2023-12-22 | 数据处理方法、装置、计算机设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117762492A (zh) |
-
2023
- 2023-12-22 CN CN202311792391.0A patent/CN117762492A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101202445B1 (ko) | 프로세서 | |
JP2014219994A (ja) | 算術プロセッサ | |
CN106951211B (zh) | 一种可重构定浮点通用乘法器 | |
US6009450A (en) | Finite field inverse circuit | |
CN113032723B (zh) | 一种矩阵乘法器的实现方法及矩阵乘法器装置 | |
CN112650471A (zh) | 用于处理掩蔽数据的处理器和方法 | |
RU2439667C1 (ru) | Процессор повышенной достоверности функционирования | |
CN115408061B (zh) | 复数矩阵运算的硬件加速方法、装置、芯片及存储介质 | |
JPH11327875A (ja) | 演算回路 | |
CN117762492A (zh) | 数据处理方法、装置、计算机设备及可读存储介质 | |
CN108255463B (zh) | 一种数字逻辑运算方法、电路和fpga芯片 | |
CN113485751B (zh) | 执行伽罗瓦域乘法的方法、运算单元和电子装置 | |
CN117762491A (zh) | 数据处理方法、装置、计算机设备及可读存储介质 | |
CN110647307B (zh) | 数据处理器、方法、芯片及电子设备 | |
CN111190571B (zh) | 一种基于二元扩域的模乘电路及其控制方法 | |
CN103677735B (zh) | 一种数据处理装置及数字信号处理器 | |
CN113890508A (zh) | 一种批处理fir算法的硬件实现方法和硬件系统 | |
JPS6165336A (ja) | 高速演算方式 | |
CN114510217A (zh) | 处理数据的方法、装置和设备 | |
JP5896756B2 (ja) | 演算装置及びプログラム | |
RU102407U1 (ru) | Процессор эвм | |
RU2595906C1 (ru) | Устройство для вычисления функций | |
CN110914800A (zh) | 基于寄存器的复数处理 | |
Nedjah et al. | Four hardware implementations for the m-ary modular exponentiation | |
CN117763273A (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 |