[go: up one dir, main page]

CN119225815B - 处理装置、处理方法以及计算机可读存储介质 - Google Patents

处理装置、处理方法以及计算机可读存储介质 Download PDF

Info

Publication number
CN119225815B
CN119225815B CN202411731615.1A CN202411731615A CN119225815B CN 119225815 B CN119225815 B CN 119225815B CN 202411731615 A CN202411731615 A CN 202411731615A CN 119225815 B CN119225815 B CN 119225815B
Authority
CN
China
Prior art keywords
vector
semi
vector register
instruction
function
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
CN202411731615.1A
Other languages
English (en)
Other versions
CN119225815A (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.)
Intel China Research Center Co ltd
Original Assignee
Intel China Research Center 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 Intel China Research Center Co ltd filed Critical Intel China Research Center Co ltd
Priority to CN202411731615.1A priority Critical patent/CN119225815B/zh
Publication of CN119225815A publication Critical patent/CN119225815A/zh
Application granted granted Critical
Publication of CN119225815B publication Critical patent/CN119225815B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30098Register arrangements
    • G06F9/30101Special purpose registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Complex Calculations (AREA)

Abstract

本公开涉及处理装置、处理方法以及计算机可读存储介质。一种处理装置,包括:解码电路,用于解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型;重排电路,用于基于经解码的半固定向量置换指令,重新排列所述数据元素;以及存储电路,将经重新排列的所述数据元素存储在目的地向量寄存器中。

Description

处理装置、处理方法以及计算机可读存储介质
技术领域
本公开的实施例总体涉及信号处理领域,具体地,涉及处理装置、处理方法以及计算机可读存储介质。
背景技术
置换,即基于指定模式在向量内重新排列数据元素,是一种广泛应用于众多信号处理应用中的基本操作。置换广泛应用于各种信号处理算法,包括诸如Cooley Tukey、Good-Thomas和Winograd之类的快速傅里叶变换(FFT)方法,以及使用实向量乘法指令计算复数乘法之类的简单任务。此外,置换还应用于网络数据交换和排序算法中。
发明内容
本公开的一方面提供了一种处理装置,包括:解码电路,用于解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型;重排电路,用于基于经解码的半固定向量置换指令,重新排列所述数据元素;以及存储电路,将经重新排列的所述数据元素存储在目的地向量寄存器中。
本公开的一方面提供了一种处理方法,包括:解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型;基于经解码的半固定向量置换指令,重新排列所述数据元素;以及将经重新排列的所述数据元素存储在目的地向量寄存器中。
本公开的一方面提供了一种其上存储有计算机可执行指令的计算机可读存储介质,其中所述计算机可执行指令在由处理电路执行时使所述处理电路执行如上所述的处理方法。
附图说明
在附图中,将通过示例而非限制的方式说明本公开的实施例,其中相同的参考标号指代相似的元件。
图1图示了处理指令的计算硬件的示例。
图2图示了示例处理器和/或片上系统(System on a Chip,SoC)的框图,该处理器和/或SoC可以具有一个或多个核心并具有集成存储器控制器。
图3图示了通用置换操作的示例。
图4图示了应用中的数据重排的百分比的示例。
图5图示了示例向量寄存器聚集指令的操作。
图6图示了示例向量索引的加载和存储指令的操作。
图7图示了根据本公开的实施例的向量数据重排指令的操作。
图8图示了根据本公开的实施例的24点Good-Thomas FFT的重排函数。
图9描绘了根据本公开的实施例的RISC-V向量数据重排指令的典型格式。
图10图示了根据本公开的实施例的示例半固定向量置换函数的指令编码和相关控制和状态寄存器(CSR)。
图11图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程。
图12图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中输入数据的布局。
图13图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中计算复数乘法的结果中实部的重排操作。
图14图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中计算复数乘法的结果中虚部的重排操作。
图15图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中组装复数乘法结果的重排操作。
图16图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中第二阶段的预重排。
图17图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中第三阶段的预重排。
图18图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中第四阶段的预重排。
图19图示了根据本公开的实施例的16点Radix-2 Cooley-Tukey FFT的计算过程中后处理阶段的重排操作。
图20示出了根据本公开的一些实施例的处理方法的流程图。
具体实施方式
将使用本领域技术人员常用的术语来描述说明性实施例的各个方面,以将本公开的实质传达给本领域其他技术人员。然而,对于本领域技术人员来说显而易见的是,可以使用所描述的方面的部分来实施许多替代实施例。出于解释的目的,给出了具体的数字、材料、和配置,以便提供对说明性实施例的透彻理解。然而,对于本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下实施替代实施例。在其它实例中,为了避免模糊说明性实施例,可以省略或简化公知特征。
此外,以最有助于理解说明性实施例的方式,将各种操作依次描述为多个离散操作;然而,不应将描述顺序解释为暗示这些操作必然是顺序相关的。特别地,这些操作不需要按照呈现的顺序来执行。
本文中重复使用短语“在实施例中”、“在一个实施例中”、和“在一些实施例中”。这些短语通常不指代相同的实施例;然而,它们也可以指代相同的实施例。除非上下文另有规定,否则术语“包含”、“具有”、和“包括”是同义词。短语“A或B”和“A/B”的意思是“(A)、(B)、或(A和B)”。
图1图示了处理指令的计算硬件的示例。根据本公开的一些实施例,该指令可以包括但不限于算法指令(例如,加法(ADD)指令、减法(SUB)指令等)、以及存储器访问指令,例如针对寄存器溢出的存储器访问(如存储器加载(LOAD)或存储(STORE))指令。如图所示,存储装置103存储要被执行的指令101。
指令101被解码器电路105接收。例如,解码器电路105从取得(fetch)电路(未示出)接收该指令。该指令可以采取任何适当的格式。在一种示例中,该指令包括用于操作码、(一个或多个)源标识符和目的地标识符的字段。在一些示例中,源和目的地是寄存器,而在其他示例中,它们中的一个或多个是存储器位置。在一些示例中,源中的一个或多个可以是立即数操作对象。在一些示例中,操作码详述了要执行的一个或多个操作。
用于该指令的至少一个指令格式的更详细示例将在稍后详述。解码器电路105将指令解码成一个或多个操作。在一些示例中,这种解码包括生成要被执行电路(例如执行电路109)执行的多个微操作。解码器电路105也对指令前缀进行解码。
在一些示例中,寄存器重命名、寄存器分配和/或调度电路107提供用于以下各项中的一项或多项的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些示例中的寄存器别名表);2)向经解码的指令分配状态比特和标志;以及3)从指令池调度经解码的指令来由执行电路执行(例如,在一些示例中,使用预留站)。
寄存器(寄存器堆)和/或存储器108存储数据作为指令的操作对象,执行电路109将对这些操作对象进行操作。示例寄存器类型包括紧缩(packed)数据寄存器、通用寄存器(general purpose register,GPR)、以及浮点寄存器。
执行电路109执行经解码的指令。执行经解码的指令使得执行电路执行相应操作。在一些示例中,引退/写回电路111在体系结构上将目的地寄存器提交到寄存器或存储器108中,并引退该指令。
指令的格式的一个示例是OPCODE DST, SRC1, SRC2。在一些示例中,OPCODE是指令的操作码助记符,例如ADD、SUB、STORE、LOAD等。DST是用于目的地操作对象的字段,例如紧缩数据寄存器或存储器。SRC1和SRC2是用于源操作对象的字段,例如紧缩数据寄存器和/或存储器。
图2图示了示例处理器和/或SoC 200的框图,该处理器和/或SoC 200可以具有一个或多个核心并具有集成存储器控制器。实线框图示的处理器200具有单个核心202(A)、系统代理单元电路210和一组一个或多个接口控制器单元电路216,而可选地添加的虚线框将替代性处理器200图示为具有多个核心202(A)-(N)、系统代理单元电路210中的一组一个或多个集成存储器控制单元电路214、专用逻辑208以及一组一个或多个接口控制器单元电路216。注意,处理器200可以是处理器或者协处理器之一。
从而,处理器200的不同实现方式可以包括:1)CPU,其中专用逻辑208是集成图形和/或科学(吞吐量)逻辑(可以包括一个或多个核心,未示出),核心202(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用乱序核心、或这两者的组合);2)协处理器,其中核心202(A)-(N)是主要针对图形和/或科学(吞吐量)目的的大量专用核心;以及3)协处理器,其中核心202(A)-(N)是大量的通用有序核心。从而,处理器200可以是通用处理器、协处理器或者专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。该处理器可被实现在一个或多个芯片上。处理器200可以是一个或多个衬底的一部分和/或可以使用多种工艺技术中的任何技术来实现在一个或多个衬底上,这些工艺技术例如互补金属氧化物半导体(complementary metal oxide semiconductor,CMOS)、双极CMOS(bipolarCMOS,BiCMOS)、P型金属氧化物半导体(P-type metal oxide semiconductor,PMOS)、或者N型金属氧化物半导体(N-type metal oxide semiconductor,NMOS)。
存储器层次体系包括核心202(A)-(N)内的一级或多级缓存单元电路204(A)-(N)、一组一个或多个共享缓存单元电路206、以及耦合到该组集成存储器控制器单元电路214的外部存储器(未示出)。该组一个或多个共享缓存单元电路206可以包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(L4)或者其他级别的缓存,例如最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些示例中接口网络电路212(例如,环形互连)对专用逻辑208(例如,集成图形逻辑)、该组共享缓存单元电路206和系统代理单元电路210提供接口,但替代性示例使用任何数目的公知技术来对这些单元提供接口。在一些示例中,在共享缓存单元电路206中的一个或多个电路与核心202(A)-(N)之间维持一致性。在一些示例中,接口控制器单元电路216将这些核心202耦合到一个或多个其他设备218,例如一个或多个I/O设备、存储装置、一个或多个通信设备(例如,无线网络、有线网络等)等等。
在一些示例中,核心202(A)-(N)中的一个或多个具有多线程能力。系统代理单元电路210包括对核心202(A)-(N)进行协调和操作的那些组件。系统代理单元电路210可以包括例如功率控制单元(power control unit,PCU)电路和/或显示单元电路(未示出)。PCU可以是(或者可以包括)对核心202(A)-(N)和/或专用逻辑208(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。
核心202(A)-(N)就指令集体系结构(instruction set architecture,ISA)而言可以是同构的。或者,核心202(A)-(N)就ISA而言也可以是异构的;也就是说,核心202(A)-(N)的子集可能能够执行一ISA,而其他核心可能能够只执行该ISA的子集或者能够执行另一ISA。
如前所述,置换是众多信号处理应用中广泛使用的基本操作,其基于指定模式在向量内重新排列数据元素。置换广泛应用于各种信号处理算法,包括诸如Cooley Tukey、Good-Thomas和Winograd之类的FFT方法,以及使用实向量乘法指令计算复数乘法之类的简单任务。此外,置换还应用于网络数据交换和排序算法中。
图3图示了通用置换操作的示例。在图3中,原始向量中具有索引i(0≤i≤7)的每个元素都被重新定位到由i' 索引的新位置。
向量置换指令在信号处理算法的计算中起着重要作用,对信号处理算法的性能有着至关重要的影响。例如,在N点Radix-2 Cooley-Tukey FFT中,算法由logN/2次复数乘法和logN次复数加法组成。相应地,元素的重新排列也总计logN次,这密切反映了该算法整体的计算复杂性。类似地,当使用实向量乘法指令在两个向量之间执行逐元素复数乘法时,有4N次实数乘法、N次实数加法和4N次元素重新排列。图4图示了所涉及的数据重排的百分比。
目前,通常存在两种向量置换指令,即通用向量置换指令和固定向量置换指令。通用置换是在向量寄存器内执行任何类型的数据水平移动的最灵活的方式。相比之下,固定置换仅限于根据预定义模式重新排列数据。X86 AVX扩展和ARM SVE扩展既支持通用置换也支持固定置换,而第五代精简指令集计算机(Reduced Instruction Set Computer-V,RISC-V)向量扩展仅支持通用置换。下面分别介绍通用向量置换指令和固定向量置换指令。
通用向量置换指令
仅为了便于描述,本公开结合RISC-V向量扩展来说明通用置换。
当前的RISC-V向量扩展的特征在于以如下两种主要类型的指令进行数据重排:向量寄存器聚集指令,以及向量索引的加载和存储指令。这两种类型的指令都涉及在数据重排指令之前为每个索引准备映射列表并将其存储在向量寄存器中,然而,这会导致效率低下和性能下降。下面分别介绍这两种类型的指令。
类型1:向量寄存器聚集指令
对于向量寄存器聚集指令,这类指令的一个示例是vrgather.vv vd, vs2, vs1,vm。在该指令中,目的地向量寄存器的每个元素vd[i]对应于源向量寄存器vs2中的值vs2[vs1[i]],其中vs1[i]指定要读取的元素的索引。该指令的操作如图5所示。
向量寄存器聚集指令具有以下缺点:
·写后读(RAW)数据依赖导致延迟增加:使用vrgather.vv会引入RAW数据依赖,导致延迟增加和流水线停滞。在执行vrgather.vv以重新排列元素之前,必须计算针对目标位置的索引值并将其存储在vs1中。在所有索引计算完成之前,无法向功能单元发出指令。
·资源效率低下:将索引值显式存储在向量寄存器(vs1)中用于常规重排模式是不必要的,也是低效的。这占用了本可用于不同指令的向量寄存器,由于诸如寄存器重命名和回写之类的微体系结构操作,浪费了资源并增加了能耗。
类型2:向量索引的加载和存储指令
向量索引的加载和存储指令在偏离基址的存储器地址之间移动数据元素。例如,考虑向量索引的加载指令vluxei8.v vd, (rs1), vs2:其中整数寄存器rs1保存基址,并且vs2包含8位偏移值。vs2中的每个元素都指定了相对于基址的偏移量。数据从相对于基址偏移第i个偏移量的存储器位置取出,并存储在目的地向量寄存器vd的第i个元素中。该操作如图6所示。
向量索引的加载和存储指令具有以下缺点:
·除了具有向量寄存器聚集指令的缺点外,向量索引的加载和存储指令还存在不以缓存行为单位取回数据的问题。
在许多信号处理算法中,数据在存储器中是连续的,这使得一次加载整个缓存行变得高效。然而,在实现过程中,向量索引的加载和存储通常会分解为单独的标量加载和存储。即使某些偏移量对应于同一缓存行中的数据,这些数据也是单独访问的,这需要额外的努力来处理这些加载。使用单位步长向量加载指令来将连续的数据逐缓存行加载到向量寄存器中并相应地重新排列这些数据会更有效。
固定向量置换指令
固定置换在指令中对重排模式进行编码。AVX和SVE扩展支持的重排模式包括广播、复制、打包和解包。
固定向量置换指令具有以下缺点:
·由于指令编码空间有限,只能支持有限几种的重排模式。通常,信号处理算法所需的更复杂的模式无法直接得到支持。这需要在可能的情况下使用相当多的固定置换,或者最终转向使用通用置换。
例如,FFT中的许多数据重排操作无法使用现有的固定置换指令进行。
鉴于现有的向量置换指令存在的缺点和问题,在本公开中,提出利用能够用数学方式表示的规则模式来优化数据重排,这些规则模式类似于用于离散傅里叶变换的快速算法中的模式,而不是排序算法中使用的不规则的数据依赖模式。本公开提出了新颖的向量置换指令,能够在RISC-V的向量扩展中优于现有的向量置换指令。
具体地,本公开提出了半固定向量置换指令,其中数据重排模式表示为具有参数的数学函数。这些函数在指令中被编码为固定部分,而它们的参数在控制和状态寄存器(CSR)中被提供或作为可变部分被提供。
本公开所提出的半固定向量置换指令结合了固定向量置换指令和通用向量置换指令这两者的优点。
一方面,与固定置换类似,半固定置换比诸如RISC-V向量数据重排指令之类的通用置换有如下几个好处:
- 更高的性能:在开始重排之前,不需要等待所有索引映射就绪。这能够通过同时进行计算重排索引映射和从源寄存器读取这两者来避免RAW向量寄存器数据依赖和隐藏延迟。
- 更高的效率:由于不需要指令来计算和存储单独的索引映射,因此减少了指令数并节省了向量寄存器。
另一方面,与固定置换不同,半固定置换为各种应用提供了极大的灵活性。可以通过调整参数来配置重排行为。单个指令支持共享通用数学格式的各种重排模式。这允许支持更广泛、更复杂的重排模式。
下面首先描述根据本公开的实施例的半固定向量置换指令的格式,然后使用这些指令举例说明了16点Cooley-Tukey FFT的实现,并且最后进行了性能分析,以示出根据本公开的实施例的半固定置换与通用置换和固定置换相比的优势。
半固定向量置换指令的格式
在信号处理算法中,当对长度为N的向量执行变换算法时,数据通常需要在长度为N的倍数的向量中进行重排。例如,在2N点Radix-2 FFT中,每个阶段涉及重排2N个元素,而其中的复数加法和复数减法之类的操作是对N个元素进行的。数据重排的粒度也可能与原始数据不同。一个示例是用实数乘法器执行复数乘法。对于32位复数,需要在16位元素的基础上对其进行重排。
在一个实施例中,半固定向量置换指令可以设计为加宽/变窄指令,其中有效向量寄存器组乘数(effective vector register group multiplier,emul)和有效元素宽度(effective element width,eew)不同于现有设置中的相应向量长度乘数(lengthmultiplier,lmul)和原始设定元素宽度(selected element width,sew)。这种方法消除了在本公开所提出的半固定向量置换指令之前和之后通过vset(i)vl(i)进行重新配置的需要。具体可参阅后面的附录中子例程1/2/3中的vsetvli指令。
因此,本公开所提出的指令的操作涉及获取emul个源向量寄存器,并应用重排函数重排数据,对应的结果写入emul个目的地向量寄存器中。在实施例中,令vl表示向量中元素的数量。重排函数可以定义为i'=f(i),其中0≤ivl-1和0≤i'vl-1。这表示源向量中的第i个元素应该映射到目的地向量中的第i'个元素。图7图示了该操作,强调了重排模式可以用数学函数f(i)简洁地表示。
重排函数可以因不同的应用而异。在快速傅里叶变换算法中,一维向量在重排后通常表示为二维矩阵。在RISC-V中,每一行都可以存储在一个向量寄存器中。为清楚起见,重排函数f表示为(i',i'')=f(i)。该函数将原始向量的第i个元素分配给二维矩阵中第i'个向量的第i''个元素(行i'、列i'')。图8图示了分解为3 x 8阵列的24点Good-ThomasFFT,其中重排函数是(i',i'')=(i%3,i%8)。注意,在图8所示的示例中,三个向量寄存器被组合在一起,即emul等于3。对于向量置换指令,emul不一定是2的幂。
在示例实施中,重排模式可以包括:
·用于emul(有效向量寄存器组乘数)的3位字段,其指定群组中向量寄存器的数量,范围从1到8。
·用于有效元素宽度比例因子的2位字段,用于指示元素的宽度与原始设定元素宽度的比例。作为示例,令s成为二进制补码(two’s complement)的值,则eew/sew=2 s
·指示函数类型的ID,编码为⌈logN f ⌉位,其中N f 是支持的函数类型的数量。函数类型的示例包括f 0:(i',i'')=(i%n',i%n''),f 1:(i',i'')=(i/n,i%n)等。
·如果函数类型具有P个参数,则个参数m i (其中i=0,…,P-1)总共需要位。例如,f 0:(i',i'')=(i%n',i%n'')具有参数n'n'',每个参数由3位表示,对于f 0总共需要6位。
图9描绘了RISC-V向量数据重排指令的典型格式。以灰色突出显示的位具有确定的用途,用于固定目的,而其余位则可以灵活地编码其他信息。
因为在本公开所提出的指令中不需要任何向量索引寄存器,因此位19-15字段被保留用于对重排函数信息进行编码。对于自定义扩展,字段funct3和funct6也可用于此目的。
通常,指令编码相对固定的信息,而CSR存储可变的细节。因此,在本公开的实施例中,可以在指令中编码函数类型ID,并且在指定的CSR中编码函数类型的参数。emul和有效元素宽度比例因子可以放置在任一位置。
以下是根据本公开的实施例的半固定向量置换函数的具体示例:vshfl.f3(4).l2.s0 vd,vs2。名称vshfl表示它是向量数据重排指令。f3后缀指定函数类型为f:(i', i'')=((i/n)%2,(i%n)+n·(i/2n)),其中参数n为4。l2指示emul等于2,并且s0表示元素宽度的比例因子为1(20)。
参数存储在称为vshflpar的特定于置换的CSR中,而其他信息则直接编码在指令中。图10示出了这种设计。
16点Radix-2 Cooley-Tukey FFT的实现
图11图示了频率抽取(DIF)16点Radix-2 Cooley-Tukey快速傅里叶变换(FFT)的计算过程。该计算过程包括四个阶段,其中每个阶段包括“蝶形”操作,然后是旋转因子的乘法。
阶段1
输入数据的向量长度(VLEN)为256,16个复数输入元素分布在2个向量上,具体地,这2个向量是v2和v3。该数据布局如图12所示。
在这个阶段不需要数据重排。可以通过以下指令直接对原始向量执行“蝶形”操作:
vadd.vv v4, v2, v3 # v4 = v2 + v3
vsub.vv v5, v2, v3 # v5 = v2 - v3
接下来,将v5乘以旋转因子,假设旋转因子存储在v1中。
下面概述了使用实向量乘法指令在两个向量之间计算复数乘法的方法。
首先,使用重排函数f 0(2,8)重新排列v1和v5,以获得存储在v10中的实部的中间结果,如图13所示。相应的指令如下:
vshfl.f0 (2, 8).l1.s0 v8, v1
vshfl.f0 (2, 8).l1.s0 v9, v5
vmul.vv v10, v8, v9
li t0, 0xFF00
vmv.s.x v0, t0
li t1, -1
vmul.vx v10, v10, t1, v0.t
其次,使用重排函数f 1(2,8)对v1进行重新排列以获得v8,用于计算虚部的中间结果,如图14所示。
结果存储在v11中。相应的指令如下:
vshfl.f1 (2, 8).l1.s0 v8, v1
vmul.vv v11, v8, v9
最后,将之前分散的实数(v10)和虚数(v11)部分组装成最终结果(v8, v9)。这是通过使用f 2(16,2,8)进行重排,然后将v8和v9相加来实现的。该过程如图15所示。值得注意的是,两个向量寄存器被一起重排,并且emul被设置为2。
相应的指令如下:
vshfl.f2 (16, 2, 8).l2.s0 v8, v10
vadd.vv v5, v8, v9
在通过旋转因子的乘法获得v5的结果后,第一阶段结束。第一阶段的完成结果在v4和v5中。
阶段2
与第一阶段不同,数据必须在“蝶形”步骤之前重新排列。用于此目的的重排函数是f 3(4)。值得注意的是,两个向量寄存器被一起重排,emul设置为2。图16提供了这一过程的直观描述。
在此之后,使用向量加法指令执行“蝶形”操作,如下所示。
vshfl.f3 (4).l2.s1 v2, v4
vadd.vv v4, v2, v3 # v4 = v2 + v3
vsub.vv v5, v2, v3 # v5 = v2 - v3
然后,将v5乘以旋转因子。
阶段3
它遵循与阶段2相同的过程,除了重排函数是f 3(2)。图17图示了该过程。
阶段4
它遵循与阶段2相同的过程,除了重排函数是f 3(1)。图18图示了该过程。
后处理
在阶段4之后,需要以位反转的方式对数据进行重排,以确保FFT输出的顺序正确。这种重新排列是通过使用f 4(4)来实现的,f 4(4)以索引宽度作为其参数执行位反转功能。这里,两个向量寄存器被一起重排,emul设置为2。图19图示了该过程。
性能分析
比较具有和不具有本公开所提出的向量置换指令的代码,能够发现性能和效率的提高:
1. 用现有的RISC-V指令实现任何本公开所提出的向量置换指令的功能都需要大量指令。在比较如附录中所详述的子例程1中的vshfl.f0(2,8).l1.s0、vshfl.f1(2,8).l1.s0和vshfl.f2(16,2,8).l2.s0、子例程2中的vshfl.f3(n).l2.s1以及子例程3中的vshfl.f4(n).l2.s1的代码片段时,这一点很明显。
在不具有本公开所提出的指令的情况下,指令计数为2315。相比之下,利用本公开所提出的指令将计数减少到66,实现了35倍的减少。
2. 本公开所提出的指令还通过减少延迟来提高性能。这种改进来自于消除了在执行置换指令之前准备向量索引向量的需要,以及通过vsetvli绕过配置更改等优化。现在计算没有气泡的流水线中的延迟改进。
假设现有的RISC-V中相关向量指令的延迟如以下表格1所示:
表格1
本公开所提出的指令的延迟如以下表格2所示:
表格2
对于标量指令,延迟如以下表格3所示:
表格3
因此,在不具有本公开所提出的指令的实现方式中,执行时间总计2565个周期。利用本公开所提出的指令,执行时间降至154个周期,减少了16倍。
3. 本公开所提出的指令还节省了需要的寄存器的数量。这可以从传统实现方式中子例程1/2/3的注释中所标注的被改写的向量寄存器数量的减少中得到说明,更不用说广泛使用的整数寄存器了的数量也减少了。
图20示出了根据本公开的一些实施例的处理方法2000的流程图。在一些实施例中,方法2000可以在处理装置处执行。方法2000可以包括步骤2010、2020和2030。
在步骤2010,解码接收到的半固定向量置换指令,其中,半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且半固定向量置换指令可以包括:函数类型标识字段,其指示重新排列数据元素所使用的重排函数的类型。
在步骤2020,基于经解码的半固定向量置换指令,重新排列数据元素。
在步骤2030,将经重新排列的数据元素存储在目的地向量寄存器中。
在本公开的一些实施例中,重排函数具有一个或多个参数,这些参数存储在控制和状态寄存器中。在本公开的一些实施例中,控制和状态寄存器中还可以存储以下项:有效向量寄存器组乘数字段,用于指示源向量寄存器或目的地向量寄存器的数量;以及有效元素宽度比例因子字段,用于指示数据元素的宽度与原始设定元素宽度的比例。
在本公开的一些实施例中,半固定向量置换指令还可以包括:有效向量寄存器组乘数字段,用于指示源向量寄存器或目的地向量寄存器的数量;以及有效元素宽度比例因子字段,用于指示数据元素的宽度与原始设定元素宽度的比例。
在本公开的一些实施例中,函数类型标识字段被编码为⌈logN f ⌉位,其中N f 指示半固定向量置换指令所支持的函数类型的数量。
可以理解的是,关于方法2000的具体细节可以参考上述结合图1至图17所述的具体内容,并且相关内容在此不再赘述。此外,可以理解的是,方法2000在一些其他实施例中可以包括更多或更少或不同的步骤,在此不做限制。
以下段落描述了各种实施例的示例。
示例1包括一种处理装置,包括:解码电路,用于解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型;重排电路,用于基于经解码的半固定向量置换指令,重新排列所述数据元素;以及存储电路,将经重新排列的所述数据元素存储在目的地向量寄存器中。
示例2包括示例1所述的装置,其中,所述重排函数具有一个或多个参数,所述参数存储在控制和状态寄存器中。
示例3包括示例2所述的装置,其中,所述控制和状态寄存器中还存储以下项:有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
示例4包括示例2所述的装置,其中,所述半固定向量置换指令还包括:有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
示例5包括示例1所述的装置,其中,所述函数类型标识字段被编码为⌈logN f ⌉位,其中N f 指示所述半固定向量置换指令所支持的函数类型的数量。
示例6包括一种处理方法,包括:解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型;基于经解码的半固定向量置换指令,重新排列所述数据元素;以及将经重新排列的所述数据元素存储在目的地向量寄存器中。
示例7包括示例6所述的方法,其中,所述重排函数具有一个或多个参数,所述参数存储在控制和状态寄存器中。
示例8包括示例7所述的方法,其中,所述控制和状态寄存器中还存储以下项:有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
示例9包括示例7所述的方法,其中,所述半固定向量置换指令还包括:有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
示例10包括示例6所述的方法,其中,所述函数类型标识字段被编码为⌈logN f ⌉位,其中N f 指示所述半固定向量置换指令所支持的函数类型的数量。
示例11包括一种其上存储有计算机可执行指令的计算机可读存储介质,其中所述计算机可执行指令在由处理电路执行时使所述处理电路执行如示例6-10中任一项所述的方法。
尽管为了描述的目的在本文中说明和描述了某些实施例,但是在不脱离本公开的范围的情况下,为了实现相同目的而规划的各种替代和/或等同实施例或实现方式可以替代所示出和所描述的实施例。本申请旨在涵盖本文所讨论的实施例的任何改编或变化。因此,易于理解的是,本文描述的实施例仅由所附权利要求及其等同范围限制。
附录:16点Radix-2 Cooley-Tukey FFT的实现代码

Claims (11)

1.一种处理装置,包括:
解码电路,用于解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型,其中,所述重排函数具有一个或多个可变参数n1、n2、…、nm,m为大于等于1的正整数,所述重排函数为i'=f(i, n1,n2, …, nm)或(i',i'')=f(i, n1, n2, …, nm),i表示所述源向量寄存器中的数据元素的索引,i'和i''表示目的地向量寄存器中的数据元素的索引;
重排电路,用于基于经解码的半固定向量置换指令,重新排列所述数据元素;以及
存储电路,将经重新排列的所述数据元素存储在所述目的地向量寄存器中。
2.如权利要求1所述的装置,其中,所述参数存储在控制和状态寄存器中。
3. 如权利要求2所述的装置,其中,所述控制和状态寄存器中还存储以下项:
有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及
有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
4. 如权利要求2所述的装置,其中,所述半固定向量置换指令还包括:
有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及
有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
5.如权利要求1所述的装置,其中,所述函数类型标识字段被编码为位,其中N f 指示所述半固定向量置换指令所支持的函数类型的数量。
6.一种处理方法,包括:
解码接收到的半固定向量置换指令,其中,所述半固定向量置换指令用于重新排列源向量寄存器中的数据元素,并且所述半固定向量置换指令包括:函数类型标识字段,其指示重新排列所述数据元素所使用的重排函数的类型,其中,所述重排函数具有一个或多个可变参数n1、n2、…、nm,m为大于等于1的正整数,所述重排函数为i'=f(i, n1, n2, …, nm)或(i',i'')=f(i, n1, n2, …, nm),i表示所述源向量寄存器中的数据元素的索引,i'和i''表示目的地向量寄存器中的数据元素的索引;
基于经解码的半固定向量置换指令,重新排列所述数据元素;以及
将经重新排列的所述数据元素存储在所述目的地向量寄存器中。
7.如权利要求6所述的方法,其中,所述参数存储在控制和状态寄存器中。
8. 如权利要求7所述的方法,其中,所述控制和状态寄存器中还存储以下项:
有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及
有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
9. 如权利要求7所述的方法,其中,所述半固定向量置换指令还包括:
有效向量寄存器组乘数字段,用于指示所述源向量寄存器或所述目的地向量寄存器的数量;以及
有效元素宽度比例因子字段,用于指示所述数据元素的宽度与原始设定元素宽度的比例。
10.如权利要求6所述的方法,其中,所述函数类型标识字段被编码为位,其中N f 指示所述半固定向量置换指令所支持的函数类型的数量。
11.一种其上存储有计算机可执行指令的计算机可读存储介质,其中所述计算机可执行指令在由处理电路执行时使所述处理电路执行如权利要求6-10中任一项所述的方法。
CN202411731615.1A 2024-11-28 2024-11-28 处理装置、处理方法以及计算机可读存储介质 Active CN119225815B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202411731615.1A CN119225815B (zh) 2024-11-28 2024-11-28 处理装置、处理方法以及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202411731615.1A CN119225815B (zh) 2024-11-28 2024-11-28 处理装置、处理方法以及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN119225815A CN119225815A (zh) 2024-12-31
CN119225815B true CN119225815B (zh) 2025-03-11

Family

ID=94068975

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202411731615.1A Active CN119225815B (zh) 2024-11-28 2024-11-28 处理装置、处理方法以及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN119225815B (zh)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118535228A (zh) * 2018-12-21 2024-08-23 英特尔公司 用于在从存储器加载时在进行中转置向量的系统和方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7945760B1 (en) * 2004-04-01 2011-05-17 Altera Corporation Methods and apparatus for address translation functions
CN104025502B (zh) * 2011-12-22 2017-07-11 英特尔公司 用于处理blake安全散列算法的指令处理器、方法以及系统
CN104081342B (zh) * 2011-12-23 2017-06-27 英特尔公司 经改进的插入指令的装置和方法
CN108241504A (zh) * 2011-12-23 2018-07-03 英特尔公司 经改进的提取指令的装置和方法
EP3602277B1 (en) * 2017-03-20 2022-08-03 Intel Corporation Systems, methods, and apparatuses for dot production operations

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118535228A (zh) * 2018-12-21 2024-08-23 英特尔公司 用于在从存储器加载时在进行中转置向量的系统和方法

Also Published As

Publication number Publication date
CN119225815A (zh) 2024-12-31

Similar Documents

Publication Publication Date Title
CN112506567B (zh) 数据读取方法和数据读取电路
US11537520B2 (en) Remote atomic operations in multi-socket systems
CN104137055B (zh) 点积处理器、方法、系统和指令
CN107918546B (zh) 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统
EP3391195B1 (en) Instructions and logic for lane-based strided store operations
US11474825B2 (en) Apparatus and method for controlling complex multiply-accumulate circuitry
CN107533460B (zh) 紧缩有限冲激响应(fir)滤波处理器、方法、系统和指令
CN107111489B (zh) 莫顿坐标调整处理器、方法、系统和指令
JP7419629B2 (ja) データ表現間の一貫性のある変換を加速するプロセッサ、方法、プログラム、コンピュータ可読記憶媒体、および装置
CN109213472B (zh) 用于利用常数值的矢量运算的指令
US20160179523A1 (en) Apparatus and method for vector broadcast and xorand logical instruction
US20170177359A1 (en) Instructions and Logic for Lane-Based Strided Scatter Operations
KR102283947B1 (ko) 사차원 모턴 좌표 변환 프로세서, 방법, 시스템 및 명령어
US10749502B2 (en) Apparatus and method for performing horizontal filter operations
US20170177345A1 (en) Instruction and Logic for Permute with Out of Order Loading
US20170177353A1 (en) Instructions and Logic for Get-Multiple-Vector-Elements Operations
US10152321B2 (en) Instructions and logic for blend and permute operation sequences
EP4462249A2 (en) Matrix transpose and multiply
CN114721624A (zh) 用于处理矩阵的处理器、方法和系统
US20170177355A1 (en) Instruction and Logic for Permute Sequence
CN119225815B (zh) 处理装置、处理方法以及计算机可读存储介质
CN107003842A (zh) 用于矢量水平逻辑指令的装置和方法
CN112230993A (zh) 数据处理方法及装置、电子设备
WO2024250758A1 (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