掌桥专利:专业的专利平台
掌桥专利
首页

一种基于超越函数加速指令的指数函数加速方法及系统

文献发布时间:2024-04-18 19:57:31


一种基于超越函数加速指令的指数函数加速方法及系统

技术领域

本发明涉及处理器数据并行与向量指数函数计算技术领域,具体涉及一种基于超越函数加速指令的指数函数加速方法及系统。

背景技术

现代处理器中包含向量处理单元,能够进行数据并行计算,是处理器的重要部件。指令集架构中会包含一部分指令来操作向量处理器单元,这部分指令集合被称作SIMD指令集(也称为浮点指令集、向量指令集)。向量寄存器,又称浮点寄存器,相比普通的通用寄存器可以存储多个元素,是运行SIMD指令集的核心存储部件。SIMD指令集的一条SIMD指令可以同时对存储于向量寄存器的多个元素进行操作。常见的SIMD指令集有intel处理器的SSE2、AVX、AVX2、AVX512指令集以及ARM处理器的ADVSIMD与SVE指令集,SPARC64 V指令集也有对应的SIMD拓展。本文设计的指数函数加速方法及系统适用于所有SIMD指令集。业界也将各种SIMD指令称作向量运算与向量指令,向量运算本质是将普通的标量运算作用在向量寄存器(或向量)上的每一个元素,并将结果存储在向量寄存器的对应元素中。由于向量指令可以一次调用计算多个数据(较普通的标量指令),所以应用程序开发者(比如数学函数库的开发者)会广泛利用SIMD指令集向量化他们的程序,以增加程序计算的吞吐量,从而极大地提升程序的性能。常用的向量指令包含各种类型的向量浮点算术指令(比如向量乘法指令、向量加法指令、向量减法指令、向量浮点舍入指令以及向量乘加运算指令)、向量整型运算指令(比如向量移位运算指令)以及向量访存指令(比如向量聚散加载指令)。

这些常用的向量指令本质上都是通过执行一条指令来重复运算多次普通的标量运算,比如一条向量加法指令可以同时完成多对浮点加法运算。所以除了向量聚散加载指令之外,这些向量指令较对应的标量指令都有成倍的性能提升。而向量聚散加载指令需要在一条指令内完成对多个不连续的内存位置的访存操作,所以受限于计算机体系结构中访存单元的性能、程序本身的空间局部性与时间局部性问题,注定其在访存操作跨度较大时,无法获得成倍的性能提升,甚至会和多次串行标量访存出现一样的性能。

现代计算机系统中一般使用浮点数来表示数学运算中的小数,浮点数是一种基于科学计数法的数值表示与运算系统,每个浮点数都由符号位S、指数E(又称阶数)与尾数M三个部分组成,每个部分的位数不同,浮点数所表示的数值大小等于

本文所描述的指数函数加速方法,特指浮点数指数函数实现以及使用SIMD指令向量化的浮点数向量指数函数实现。指数函数作为超越函数的一种,其浮点实现的过程一般分为规约、多项式近似和重建三个步骤。针对任意输入x,在计算f(x)=e

x=n×R+r;n=0,1,2,3,4,...,

f(x)=e

在[-R,R]这个数值范围内,可以通过泰勒级数展开近似计算得到关于r的指数函数结果e

向量指数函数内部使用SIMD指令或者对应的intrinsic函数实现向量化,根据使用的SIMD指令集的向量宽度,一次向量指数函数调用会同时计算多个浮点操作数,从而获取数倍的性能提升。向量指数函数的实现也分成规约、近似和重建三个步骤,每个步骤都使用SIMD指令实现向量化。向量化后的规约算法针对输入的浮点数向量vx,对它的每个元素x

公布号为CN110321161A的中国专利文献《使用SIMD指令的向量函数快速查表法、系统及介质》与公布号为CN114968367A的中国专利文献《一种基于转置的向量三角函数快速查表方法及系统》均提出了不依赖向量聚散加载指令的快速向量查表实现,但前者限制了被查表的表项大小,后者只适用于三角函数,均不能适用于向量指数函数(向量指数函数的查表项超过32)。对于该问题,ARM公司为ARM64指令集提出了解决方法,他们提供了一条指数函数加速指令FEXPA(超越函数加速指令的一种)来加速向量指数函数的重建系数的计算过程。具体的:FEXPA指令会接受规约后结果向量vn的偏移向量vzbias作为输入,并将vzbias各元素低l位(l一般为6)作为索引值从嵌入在硬件电路的2

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于超越函数加速指令的指数函数加速方法及系统,本发明旨在利用指数函数加速指令来实现向量指数函数实现中重建系数计算,在满足精度要求的同时,避免了传统向量查表或通过冗余计算来获得重建系数带来的性能损失问题,加速了向量指数函数实现中多项式计算与重建两个非常耗时的部分,极大提升了指数函数的性能。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于超越函数加速指令的指数函数加速方法,包括:

1)传入输入向量vx;

2)计算输入向量vx每个元素x

3)用两次向量浮点乘加指令计算输入向量vx每个元素x

4)使用向量浮点乘法指令计算向量vr中的每个元素r

5)使用向量整型加法指令将向量vz每个元素加上常量e

6)使用向量超越函数加速指令FEXPA计算向量vzbias,得到结果向量vscale,结果向量vscale每个元素scale

7)使用向量乘加指令计算结果向量vscale每个元素scale

8)返回向量vt。

可选地,步骤2)包括:使用向量浮点乘法指令将输入向量vx中的每个元素x

可选地,步骤2)包括:先使用向量浮点乘法指令将输入向量vx每个元素乘以常数2

可选地,若所述指数函数为半精度的指数函数浮点向量指数函数时,浮点常数Shift取值为0x1.8p10f;若所述指数函数为单精度的指数函数浮点向量指数函数时,浮点常数Shift取值为0x1.8p23f;若所述指数函数为双精度的指数函数浮点向量指数函数时,浮点常数Shift取值为0x1.8p+52。

可选地,步骤6)包括:使用基于处理器硬件查表操作进行指数函数加速计算的向量超越函数加速指令FEXPA,把输入的向量vzbias的任意元素zbias

可选地,若所述指数函数为半精度的指数函数浮点向量指数函数时,常量P取值为10;若所述指数函数为单精度的指数函数浮点向量指数函数时,常量P取值为23;若所述指数函数为双精度的指数函数浮点向量指数函数时,常量P取值为52。

可选地,所述常数l的取值范围为5~7,若所述指数函数为半精度的指数函数浮点向量指数函数时,常量e

可选地,步骤1)~步骤8)为通过在汇编语言中使用向量寄存器与汇编指令实现,或者通过在C或C++语言来使用各SIMD指令集定义的向量变量类型与向量intrinsic函数来实现。

此外,本发明还提供一种基于超越函数加速指令的指数函数加速系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于超越函数加速指令的指数函数加速方法。

此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于超越函数加速指令的指数函数加速方法。

和现有技术相比,本发明主要具有下述优点:本发明提供了一种基于硬件查表实现的指数函数重建系数计算方法,该方法可以快速且精确地计算得到向量指数函数实现过程中的所使用的重建系数,避免了使用软件向量查表操作计算重建系数带来的性能损失,也减少泰勒级数展开次数,从而极大提升了向量指数函数的性能。

附图说明

图1为本发明实施例一的基本流程示意图。

图2为本发明实施例一中向量超越函数加速指令FEXPA的原理图。

具体实施方式

实施例一:

如图1所示,本实施例基于超越函数加速指令的指数函数加速方法包括:

1)传入输入向量vx;

2)计算输入向量vx每个元素x

3)用两次向量浮点乘加指令计算输入向量vx每个元素x

4)计算向量浮点乘法指令计算向量vr中的每个元素r

5)使用向量整型加法指令将向量vz每个元素加上常量e

6)使用向量超越函数加速指令FEXPA计算向量vzbias,得到结果向量vscale,结果向量vscale每个元素scale

7)使用向量乘加指令计算结果向量vscale每个元素scale

8)返回向量vt。

本实施例基于指数函数加速指令实现的向量指数函数,针对任意输入的向量vx,向量指数函数求其中vx所有元素x

本实施例中,步骤2)包括:使用向量浮点乘法指令将输入向量vx中的每个元素x

本实施例方法在规约时,会通过数学公式,将x

x

r

基于以上原理,本实施例在步骤2)使用向量浮点乘法指令将vx每个元素x

vt0=vmul(vx,vc1);

vn=vround(vt0);

vz=vfloat_to_int(vn);

vt1=vmadd(vx,vn,-Ln2hi);

vr=vmadd(vt1,vn,-Ln2lo);

其中,vcl为实数2

经过规约后,x

vr2=vmul(vr,vr);

vr4=vmul(vr2,vr2);

vpt1=vmadd(vr,C5,C4);

vpt2=vmadd(vr,C3,C2);

vpt3=vmadd(vr2,vpoly2,vr);

vpoly=vmadd(vr4,vpoly1,voly3);

其中,vmul为向量乘法指令,vmadd为乘加指令,vpt1~vpt3分别为前三次乘加指令计算结果。

而对于

vzbias=vadd(vz,ebias_l);

vscale=fexpa(vzbias);

其中,vadd为加法指令,ebias_1为偏移常量e

本实施例中,步骤6)包括:使用基于处理器硬件查表操作进行指数函数加速计算的向量超越函数加速指令FEXPA,把输入的向量vzbias的任意元素zbias

向量超越函数加速指令FEXPA可使用任何基于处理器硬件查表操作进行指数函数加速计算的向量指令。参见图2所示的向量超越函数加速指令FEXPA的控制流图,图2中,zbias是输入向量,该向量保存有v1个元素vzbias.1至vzbias.vl。所有元素的低1比特位分别由j.1至j.vl表示,所有元素的l~l+e比特位由M.1值M.vl表示。T代表了硬件电路中的待查表,该表中包含了N=2

本实施例中向量超越函数加速指令FEXPA可以精确计算

指数函数加速指令FEPXA结合了传统向量查表得到重建系数与通过计算获取重建系数两种方法的优点,既保留查表操作以减少了泰勒级数近似计算的计算量(使用该指令后,泰勒级数展开次数为6次即可满足精度要求),同时通过对vn各元素的阶数利用,保证了查表项限制为64项,使得整个被查表可以被嵌入到该指令对应的硬件电路里面而无需放到内存中,保证了向量查表操作不会受到于计算机体系结构中访存单元的性能、程序本身的空间局部性与时间局部性问题的影响,极大提升了向量指数函数的性能。在经过泰勒级数展开近似计算得到向量vpoly以及使用FEXPA指令计算得到vscale后,本实施例在步骤7)使用向量乘加指令计算vscale各元素scale

步骤7)的伪代码可表示为:vt=vmadd(vpoly,vscale,vscale)。

需要说明的是,本实施例适用于半精度、单精度与双精度浮点向量指数函数的实现,本实施例中常数l的取值范围为5~7,若所述指数函数为半精度的指数函数浮点向量指数函数时,常量e

并且需要说明的是,本实施例既适用于X86架构的SSE向量指令集、SSE2向量指令集、SSE4向量指令集、AVX向量指令集、AVX2向量指令集与AVX512向量指令集,也适用于ARM64架构ADVSIMD向量指令集以及SVE向量指令集,还适用于RISC-V的V向量拓展。步骤1)至步骤8)过程中所使用的向量浮点乘法指令、向量浮点加法指令,向量浮点减法指令,向量整型加法指令,向量整型减法指令、向量浮点舍入指令与向量浮点数转整型指令是上述适用的向量指令集中的汇编指令。本实施例的步骤1)~步骤8)所用于作为向量指令输入以及保存向量指令计算结果的向量为上述适用的向量指令集的向量寄存器。均有平台适用性良好的特点。并且需要说明的是,本实施例的步骤1)~步骤8)既可以通过在汇编语言中使用向量寄存器与汇编指令实现,也可以通过在C或C++语言来使用各SIMD指令集定义的向量变量类型与向量intrinsic函数来实现。并且步骤1)至步骤8)过程中使用的向量一词既是指SIMD指令集中向量寄存器,也是指SIMD指令集向量intrinsic中的各种向量类型。在步骤1)至步骤8)过程中实施各种向量运算的既可以是SIMD指令集中的向量指令也是SIMD指令集向量intrinsic中对应的向量intrinsic函数。向量既是汇编语言中的向量寄存器,也是各SIMD指令集定义的向量类型变量,向量指令与向量intrinsic函数存在一一对应关系。还需要说明的是,本实施例在步骤1)至步骤3)过程中使用的内建函数、变量类型、变量名称、指令名称以及寄存器名称仅作为示范说明所用,实际使用时无需限定于同样的名称,任何能够实施步骤1)至步骤3)所需运算的内建函数和汇编指令都可以被用于该方法的实现中。

综上所述,本实施例方法包括传入输入向量vx,对向量vx的每个元素x

此外,本实施例还提供一种基于超越函数加速指令的指数函数加速系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于超越函数加速指令的指数函数加速方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于超越函数加速指令的指数函数加速方法。

实施例二:

本实施例与实施例一基本相同,其主要区别为步骤2)的实现方式不同。本实施例中,步骤2)使用快速浮点整型转换方法实现,具体地,步骤2)包括:先使用向量浮点乘法指令将输入向量vx每个元素乘以常数2

vc1=float(2

vn=vmadd(vx,vc 1,Shift);

vz=vsub(vn,Shift);

上式中,vc1为实数常数2

此外,本实施例还提供一种基于超越函数加速指令的指数函数加速系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于超越函数加速指令的指数函数加速方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述基于超越函数加速指令的指数函数加速方法。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

相关技术
  • 一种基于大规模FPGA芯片的计算加速系统及其加速方法
  • 一种基于超越函数加速指令的正余弦函数实现方法及系统
  • 结合超越函数硬件加速器的RISC-V处理器实现方法及系统
技术分类

06120116458809