CN115936965A - 应用于gpu的函数计算系统、方法和装置 - Google Patents
应用于gpu的函数计算系统、方法和装置 Download PDFInfo
- Publication number
- CN115936965A CN115936965A CN202211384655.4A CN202211384655A CN115936965A CN 115936965 A CN115936965 A CN 115936965A CN 202211384655 A CN202211384655 A CN 202211384655A CN 115936965 A CN115936965 A CN 115936965A
- Authority
- CN
- China
- Prior art keywords
- target
- function
- taylor expansion
- data
- calculated
- 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
- 238000000034 method Methods 0.000 title abstract description 48
- 230000006870 function Effects 0.000 claims abstract description 390
- 238000004364 calculation method Methods 0.000 claims abstract description 187
- 238000012545 processing Methods 0.000 claims abstract description 112
- 230000014509 gene expression Effects 0.000 claims description 15
- 239000000126 substance Substances 0.000 claims description 2
- 230000002829 reductive effect Effects 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 3
- 239000000306 component Substances 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 241000084490 Esenbeckia delta Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 229910052799 carbon Inorganic materials 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Complex Calculations (AREA)
Abstract
本申请涉及一种应用于GPU的函数计算系统、方法和装置。所述系统包括:输入单元,存储器以及特殊函数处理单元;输入单元,用于获取待计算数据,以及计算函数标识,发送至特殊函数处理单元;存储器,用于存储各个函数类型匹配的系数存储表格;特殊函数处理单元,用于获取待计算数据对应的目标表格查询索引,并获取目标系数存储表格,从目标系数存储表格中,获取与目标表格查询索引对应的预设个数的目标泰勒展开系数;还用于基于待计算数据,以及预设个数的目标泰勒展开系数,得到待计算数据对应的函数计算结果。采用本系统能够通过查表的方式来得到目标泰勒展开系数,从而减少了运算量,提高了运算效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种应用于GPU的函数计算系统、方法和装置。
背景技术
随着计算机技术的发展,出现了一种用于处理各种绘制计算机图形所需的运算的图形处理器GPU,用户可以通过在GPU上编写着色程序,来实现图形的渲染。在着色程序中,往往需要执行某些特殊函数的运算,例如倒数、指数、开平方、三角函数等,上述特殊函数如果完全通过硬件来实现,则需要复杂的硬件逻辑,无法在GPU上适用。
传统技术中,针对特殊函数的运算,通常是利用泰勒公式来实现,将特殊函数通过泰勒公式展开为乘加运算。目前利用泰勒公式进行特殊函数的运算,通常是使用一系列的乘加指令来实现泰勒公式,或者直接使用硬件执行泰勒公式。
然而,使用一系列的乘加指令来实现泰勒公式的方法计算量较大,会影响着色程序的执行效率,而如果直接使用硬件执行泰勒公式,则硬件模块的硬件实现较为复杂,不适于在GPU中实现,因此现有在GPU中进行的特殊函数运算,运算效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高特殊函数运算效率的应用于GPU的函数计算系统、方法和装置。
第一方面,本申请提供了一种应用于GPU的函数计算系统,所述系统包括:输入单元,存储器以及特殊函数处理单元;其中,
所述输入单元,用于获取待计算数据,以及所述待计算数据对应的计算函数标识,并在所述计算函数标识对应的目标函数类型为预设类型的情况下,将所述待计算数据以及所述计算函数标识发送至所述特殊函数处理单元;
所述存储器,用于存储各个函数类型匹配的系数存储表格,所述系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
所述特殊函数处理单元,用于获取所述待计算数据对应的目标表格查询索引,并从所述存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格,从所述目标系数存储表格中,获取与所述目标表格查询索引对应的预设个数的目标泰勒展开系数;
所述特殊函数处理单元,还用于基于所述待计算数据,以及所述预设个数的目标泰勒展开系数,得到所述待计算数据对应的函数计算结果。
在其中一个实施例中,所述预设个数的目标泰勒展开系数为3个,分别为第一泰勒展开系数、第二泰勒展开系数以及第三泰勒展开系数;所述待计算数据以多位浮点数的形式表示;所述系数存储表格中存储的各个表格查询索引的位数为预设浮点数位数;所述特殊函数处理单元,进一步用于在所述目标表格查询索引中新添加后一位数值,并将所述新添加的后一位数值进行置一处理,得到目标比较系数;所述特殊函数处理单元,进一步获取所述待计算数据与所述目标比较系数的差值,并将所述差值作为所述待计算数据对应的第一差值项,以及将所述差值的平方作为所述待计算数据对应的第二差值项;所述特殊函数处理单元,进一步用于将所述第一泰勒展开系数作为所述待计算数据的第一泰勒展开项,将所述第二泰勒展开系数与所述第一差值项的乘积作为第二泰勒展开项,以及将所述第三泰勒展开系数与所述第二差值项的乘积作为第三泰勒展开项,并根据所述第一泰勒展开项、所述第二泰勒展开项以及所述第三泰勒展开项,得到所述待计算数据对应的函数计算结果。
在其中一个实施例中,所述特殊函数处理单元,包括:乘法器、累加器以及移位逻辑单元;所述特殊函数处理单元,进一步用于通过所述累加器以及所述移位逻辑单元,获取所述待计算数据与所述目标比较系数的差值,以及通过所述乘法器获取所述差值的平方;所述特殊函数处理单元,进一步用于通过所述乘法器将所述第二泰勒展开系数与所述第一差值项相乘,得到所述第二泰勒展开项,以及将所述第三泰勒展开系数与所述第二差值项相乘,得到所述第三泰勒展开项,并通过所述累加器以及所述移位逻辑单元,对所述第一泰勒展开项、所述第二泰勒展开项以及所述第三泰勒展开项进行相加处理,得到所述待计算数据对应的函数计算结果。
在其中一个实施例中,所述待计算数据以多位浮点数的形式表示;所述系数存储表格中存储的各个表格查询索引的位数为预设浮点数位数;所述特殊函数处理单元,进一步用于获取所述待计算数据位于浮点数尾数域的前所述预设浮点数位数的浮点数值;从所述各个表格查询索引中,获取与所述预设浮点数位数相同的表格查询索引,作为所述目标表格查询索引。
在其中一个实施例中,所述特殊函数处理单元,还用于获取当前函数类型,以及所述当前函数类型对应的预设个数的泰勒展开系数中,各个泰勒展开系数的计算表达式;在所述各个表格查询索引中新添加后一位数值,并将所述新添加的后一位数值进行置一处理,得到所述各个表格查询索引分别对应的比较系数;利用所述各个泰勒展开系数的计算表达式,分别计算各个比较系数对应的泰勒展开系数,得到所述各个表格查询索引对应的预设个数的泰勒展开系数;将所述各个表格查询索引,以及所述各个表格查询索引对应的预设个数的泰勒展开系数,写入至所述当前函数类型对应的当前系数存储表格,并将所述当前系数存储表格存储入所述存储器。
在其中一个实施例中,所述特殊函数处理单元,还用于遍历预设浮点数位数的多个取值,形成各个取值分别对应的表格查询索引,得到所述各个表格查询索引。
在其中一个实施例中,所述特殊函数处理单元,进一步用于检测所述待计算数据是否为预先设定的特殊数值;在所述待计算数据不是所述特殊数值的情况下,获取所述待计算数据对应的目标表格查询索引,并从所述存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格。
在其中一个实施例中,所述存储器,还用于存储各个函数类型匹配的特殊数值表格,所述特殊数值表格中存储有各个特殊数值分别对应的函数计算结果;所述特殊函数处理单元,还用于在所述待计算数据是所述特殊数值的情况下,从所述存储器存储的特殊数值表格中,获取所述计算函数标识对应的目标函数类型匹配的目标特殊数值表格,并从所述目标特殊数值表格中,获取与所述待计算数据对应的函数计算结果。
第二方面,本申请还提供了一种应用于GPU的函数计算方法,应用于特殊函数处理单元,所述方法包括:
从输入单元接收待计算数据,以及所述待计算数据对应的计算函数标识;
获取所述待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格;所述存储器,用于存储各个函数类型匹配的系数存储表格,所述系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
从所述目标系数存储表格中,获取与所述目标表格查询索引对应的预设个数的目标泰勒展开系数;
基于所述待计算数据,以及所述预设个数的目标泰勒展开系数,得到所述待计算数据对应的函数计算结果。
第三方面,本申请还提供了一种应用于GPU的函数计算装置,应用于特殊函数处理单元,所述装置包括:
计算数据获取模块,用于从输入单元接收待计算数据,以及所述待计算数据对应的计算函数标识;
目标表格获取模块,用于获取所述待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格;所述存储器,用于存储各个函数类型匹配的系数存储表格,所述系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
展开系数获取模块,用于从所述目标系数存储表格中,获取与所述目标表格查询索引对应的预设个数的目标泰勒展开系数;
计算结果获取模块,用于基于所述待计算数据,以及所述预设个数的目标泰勒展开系数,得到所述待计算数据对应的函数计算结果。
上述应用于GPU的函数计算系统、方法和装置,该系统包括:输入单元,存储器以及特殊函数处理单元;其中,输入单元,用于获取待计算数据,以及待计算数据对应的计算函数标识,并在计算函数标识对应的目标函数类型为预设类型的情况下,将待计算数据以及计算函数标识发送至特殊函数处理单元;存储器,用于存储各个函数类型匹配的系数存储表格,系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;特殊函数处理单元,用于获取待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取计算函数标识对应的目标函数类型匹配的目标系数存储表格,从目标系数存储表格中,获取与目标表格查询索引对应的预设个数的目标泰勒展开系数;特殊函数处理单元,还用于基于待计算数据,以及预设个数的目标泰勒展开系数,得到待计算数据对应的函数计算结果。本申请可以通过在存储器中预先存储各个函数类型匹配的系数存储表格,该系数存储表格中可以存储有各个表格查询索引分别对应的预设个数的泰勒展开系数,从而在特殊函数处理单元得到待计算数据以及对应的计算函数标识后,可以先得到待计算数据对应的目标表格查询索引,之后利用该索引查询计算函数标识对应的目标函数类型所匹配的目标系数存储表格,得到预设个数的目标泰勒展开系数,并基于待计算数据以及上述预设个数的目标泰勒展开系数,来得到函数计算结果,相比于现有技术提供的应用于GPU的特殊函数运算方法,本申请可以通过查表的方式来得到目标泰勒展开系数,从而减少了运算量,提高了运算效率。
附图说明
图1为一个实施例中应用于GPU的函数计算系统的结构示意图;
图2为一个实施例中应用于GPU的函数计算方法的流程示意图;
图3为一个实施例中指令执行的流程示意图;
图4为一个实施例中特殊函数计算的流程示意图;
图5为一个实施例中硬件电路实现示意图;
图6为一个实施例中应用于GPU的函数计算装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种应用于GPU的函数计算系统,该系统可以包括:输入单元101,存储器102以及特殊函数处理单元103;其中,
输入单元101是用于获取需要进行函数计算的待计算数据,以及获取用于表征对待计算数据进行函数计算的函数类型的计算函数标识的单元,该待计算数据以及计算函数标识可以是输入单元101从GPU的内存中读取。而目标函数类型则指的是计算函数标识所对应函数的函数类型,如果该函数的函数类型表征为某些预先设定的特殊函数类型时,例如可以是倒数、指数、开平方、三角函数等等函数类型时,输入单元101则可以将从内存中得到的待计算数据,以及对应的计算函数标识,发送至特殊函数处理单元103,由特殊函数处理单元103来得到对应的函数计算结果。
具体来说,在GPU需要对某个待计算数据进行函数计算时,则可以通过GPU中携带的输入单元101,从内存中得到上述待计算数据,以及该计算函数对应的计算函数标识,并且判断该计算函数的目标函数类型,是否是预先设定的特殊函数类型,如果是,则可以将上述待计算数据,以及计算函数标识传输至特殊函数处理单元103,如果不是,则可以是传输至GPU中的计算单元ALU。
存储器102则是用于存储数据的存储部件,例如可以是SRAM,在存储器102中,可以预先存储有多个用于存储不同函数类型对应的泰勒展开系数的系数存储表格,例如系数存储表格可以包括表格1、表格2以及表格3,其中表格1表征的是倒数函数对应的系数存储表格,该表格中存储有各个表格查询索引与倒数函数对应的泰勒展开系数,而表格2则可以表征的是指数函数所对应的系数存储表格,该表格中存储有各个表格查询索引与指数函数对应的泰勒展开系数,由于不同的函数类型具有不同的泰勒展开系数计算方式,因此可以通过不同的系数存储表格,来表征不同函数类型对应的泰勒展开系数。同时,每一个系数存储表格中又可以包含多个表格查询索引,即使泰勒展开系数的计算方式相同,基于不同表格查询索引计算得到的泰勒展开系数的结果也可以不同。而预设个数的泰勒展开系数则表征同一个表格查询索引计算得到的泰勒展开系数可以是多个,分别对应于不同的泰勒展开项。
具体来说,函数的泰勒展开形式可如下所示:
其中,f(x)表示的是对待计算数据进行函数计算的计算函数,n表示第n项泰勒展开项,f(n)(x0)则表示在x0处f(x)的n阶导数,n!则表示n的阶乘。则可以是泰勒展开系数,x则表示待计算数据。可见,针对不同的待计算数据,只要x0保持不变,每一个泰勒展开项对应的泰勒展开系数也是固定不变的,因此可以预先计算每一个泰勒展开系数,并形成表格,来减少函数计算量。同时,根据泰勒展开系数的表达式也可以明确,由于不同类型的计算函数所对应的n阶导数也有所不同,因此泰勒展开系数的计算方式也有所不同,因此可以通过将不同函数形成不同的系数存储表格,使每一个系数存储表格对应于一种系数存储表格。同时,在x0变化时,每一个泰勒展开项所对应的泰勒展开系数也会发生改变,那么则可以根据x0制作表格查询索引,该x0可以表征与待计算数据对应的比较系数,而将n个作为x0对应的n个泰勒展开系数。
以表格1为例,该表格可以是倒数函数对应的系数存储表格,那么在该表格中可以存储有表格查询索引a对应的预设个数的泰勒展开系数a1、a2和a3,分别表示在表格查询索引a对应的比较系数x0的情况下,第一个泰勒展开项对应的泰勒展开系数为a1,第二个泰勒展开项对应的泰勒展开系数为a2,以及第三个泰勒展开项对应的泰勒展开系数为a3,也可以存储有表格查询索引b对应的预设个数的泰勒展开系数b1、b2和b3,分别表示为在表格查询索引b对应的比较系数x0的情况下,第一个泰勒展开项对应的泰勒展开系数为b1,第二个泰勒展开项对应的泰勒展开系数为b2,以及第三个泰勒展开项对应的泰勒展开系数为b3。
而如果是表格2,该表格可以是指数函数对应的系数存储表格,那么在该表格中可以存储有表格查询索引a对应的预设个数的泰勒展开系数a’1、a’2和a’3,分别表示在表格查询索引a对应的比较系数x0的情况下,第一个泰勒展开项对应的泰勒展开系数为a’1,第二个泰勒展开项对应的泰勒展开系数为a’2,以及第三个泰勒展开项对应的泰勒展开系数为a’3。也可以存储有表格查询索引b对应的预设个数的泰勒展开系数b’1、b’2和b’3,分别表示为在表格查询索引b对应的比较系数x0的情况下,第一个泰勒展开项对应的泰勒展开系数为b’1,第二个泰勒展开项对应的泰勒展开系数为b’2,以及第三个泰勒展开项对应的泰勒展开系数为b’3。
特殊函数处理单元103则是用于对待计算数据进行特殊函数计算的单元,目标表格查询索引则指的是待计算数据对应的表格查询索引,该目标表格查询索引可以是根据待计算数据的具体数值确定得到,而目标系数存储表格则指的是计算函数标识对应的目标函数类型匹配的目标系数存储表格,例如目标函数类型为倒数函数,那么目标系数存储表格则可以是表格1,而如果目标函数类型为指数函数,那么目标系数存储表格则可以是表格2。目标泰勒展开系数则指的是在目标系数存储表格中存储的,表格查询索引a对应的泰勒展开系数。
具体来说,在特殊函数处理单元103得到待计算数据,以及计算函数标识后,则可以先基于待计算数据,得到对应的目标表格查询索引,同时根据计算函数标识对应的目标函数类型,确定出匹配的目标系数存储表格,进而可以从目标系数存储表格中,得到与目标表格查询索引对应的预设个数的目标泰勒展开系数。
例如,确定出的目标表格查询索引可以是表格查询索引a,如果计算函数标识表征为对待计算数据进行倒数计算,那么则可以将表格1作为目标系数存储表格,即可将表格1中存储的表格查询索引a对应的泰勒展开系数a1、a2和a3,作为预设个数的目标泰勒展开系数。
而在特殊函数处理单元103,通过查表方式得到预设个数的目标泰勒展开系数后,则可以进一步的利用待计算数据,以及预设个数的目标泰勒展开系数,来得到待计算数据对应的函数计算结果。即在得到预设个数的目标泰勒展开系数,则可以利用目标泰勒展开系数,对待计算数据对应的泰勒展开项进行计算,从而得到待计算数据对应的函数计算结果。
上述应用于GPU的函数计算系统,该系统包括:输入单元101,存储器102以及特殊函数处理单元103;其中,输入单元101,用于获取待计算数据,以及待计算数据对应的计算函数标识,并在计算函数标识对应的目标函数类型为预设类型的情况下,将待计算数据以及计算函数标识发送至特殊函数处理单元103;存储器102,用于存储各个函数类型匹配的系数存储表格,系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;特殊函数处理单元103,用于获取待计算数据对应的目标表格查询索引,并从存储器102存储的系数存储表格中,获取计算函数标识对应的目标函数类型匹配的目标系数存储表格,从目标系数存储表格中,获取与目标表格查询索引对应的预设个数的目标泰勒展开系数;特殊函数处理单元103,还用于基于待计算数据,以及预设个数的目标泰勒展开系数,得到待计算数据对应的函数计算结果。本申请可以通过在存储器102中预先存储各个函数类型匹配的系数存储表格,该系数存储表格中可以存储有各个表格查询索引分别对应的预设个数的泰勒展开系数,从而在特殊函数处理单元103得到待计算数据以及对应的计算函数标识后,可以先得到待计算数据对应的目标表格查询索引,之后利用该索引查询计算函数标识对应的目标函数类型所匹配的目标系数存储表格,得到预设个数的目标泰勒展开系数,并基于待计算数据以及上述预设个数的目标泰勒展开系数,来得到函数计算结果,相比于现有技术提供的应用于GPU的特殊函数运算方法,本申请可以通过查表的方式来得到目标泰勒展开系数,从而减少了运算量,提高了运算效率。
在一个实施例中,预设个数的目标泰勒展开系数为3个,分别为第一泰勒展开系数、第二泰勒展开系数以及第三泰勒展开系数;待计算数据以多位浮点数的形式表示;系数存储表格中存储的各个表格查询索引的位数为预设浮点数位数;特殊函数处理单元103,进一步用于在所述目标表格查询索引中新添加后一位数值,并将所述新添加的后一位数值进行置一处理,得到目标比较系数;特殊函数处理单元103,进一步获取待计算数据与目标比较系数目标表格查询索引的差值,并将差值作为待计算数据对应的第一差值项,以及将差值的平方作为待计算数据对应的第二差值项;特殊函数处理单元103,进一步用于将第一泰勒展开系数作为待计算数据的第一泰勒展开项,将第二泰勒展开系数与第一差值项的乘积作为第二泰勒展开项,以及将第三泰勒展开系数与第二差值项的乘积作为第三泰勒展开项,并根据第一泰勒展开项、第二泰勒展开项以及第三泰勒展开项,得到待计算数据对应的函数计算结果。
本实施例中,目标泰勒展开系数的数量可以是3个,由于泰勒公式各级展开项的值随着级数的增大,对结果影响越来越小,因此可以只选择前3个泰勒展开项的值,来近似计算泰勒公式的数值,那么目标泰勒展开系数可以是前3个泰勒展开项分别对应的泰勒展开系数,即分别为第一泰勒展开系数、第二泰勒展开系数以及第三泰勒展开系数,其中第一泰勒展开系数为第一个泰勒展开项对应的泰勒展开系数,可以记为C0,而第二泰勒展开系数为第二个泰勒展开项对应的泰勒展开系数,可以记为C1,第三泰勒展开系数则为第三个泰勒展开项对应的泰勒展开系数,可以记为C2,并且,
另外,待计算数据可以通过多位浮点数的形式进行表示,而预设浮点数位数则可以是预先设定的用于根据待计算数据查询表格查询索引的位数,例如可以是7位。在待计算数据得到目标表格查询索引所对应的7位浮点数后,还可以在目标表格查询索引中新添加后一位数值,并将新添加的后一位数值进行置一处理,得到8位浮点数的目标比较系数x0。例如,得到的目标表格查询索引可以是0010001的7位浮点数,那么对应的目标比较系数x0则可以是00100011的8位浮点数。
那么,函数的泰勒展开形式则可以如f(x)=C0+C1*δ+C2*δ2所示,其中,C0表示第一个泰勒展开项,即第一泰勒展开项,该第一泰勒展开项由C0,即第一泰勒展开系数得到。而C1*δ则表示第二个泰勒展开项,即第二泰勒展开项,该第二泰勒展开项由C1*δ得到,同时δ=x-x0,即δ为待计算数据与目标表格查询索引的差值,也就是第一差值项,那么可知第二泰勒展开项可以由第二泰勒展开系数C1,与第一差值项δ计算得到。同时,C2*δ2可以表示第三个泰勒展开项,即第三泰勒展开项,该第三泰勒展开项由C2*δ2得到,同时δ=x-x0,即δ2为待计算数据与目标表格查询索引的差值的平方,也就是第二差值项,那么可知第三泰勒展开项可以由第三泰勒展开系数C2,与第二差值项δ2计算得到。
而在得到第一泰勒展开项、第二泰勒展开项以及第三泰勒展开项后,则可以将上述第一泰勒展开项、第二泰勒展开项以及第三泰勒展开项进行相加,从而得到待计算数据最终的函数计算结果。
本实施例中,可以通过设置目标泰勒展开系数的数量为3个,并且将设置的目标泰勒展开系数分别作为前3个泰勒展开项所对应的泰勒展开系数,通过上述方式,可以在保证计算精确度的同时,进一步减少硬件的开销。
进一步地,特殊函数处理单元103,包括:乘法器、累加器以及移位逻辑单元;特殊函数处理单元103,进一步用于通过累加器以及移位逻辑单元,获取待计算数据与目标比较系数的差值,以及通过乘法器获取差值的平方;特殊函数处理单元103,进一步用于通过乘法器将第二泰勒展开系数与第一差值项相乘,得到第二泰勒展开项,以及将第三泰勒展开系数与第二差值项相乘,得到第三泰勒展开项,并通过累加器以及移位逻辑单元,对第一泰勒展开项、第二泰勒展开项以及第三泰勒展开项进行相加处理,得到待计算数据对应的函数计算结果。
本实施例中,特殊函数处理单元103可以包含有用于执行乘法运算的乘法器,用于执行加法运算的累加器,以及用于执行移位计算的移位逻辑单元,在进行待计算数据与目标比较系数的差值获取,即获取第一差值项的过程中,特殊函数处理单元103可以通过其携带的累加器以及移位逻辑单元,来实现第一差值项的获取,而在计算差值的平方,即获取第二差值项的过程中,则可以利用其携带的乘法器,对第一差值项进行平方计算来实现第二差值项的获取。
同时,在计算第二泰勒展开项以及第三泰勒展开项时,也可以通过其携带的乘法器,将第二泰勒展开系数与第一差值项相乘,以及将第三泰勒展开系数与第二差值项相乘,并且最终通过累加器以及移位逻辑单元,对第一泰勒展开项、第二泰勒展开项以及第三泰勒展开项进行相加处理,最终得到待计算数据对应的函数计算结果。
具体来说,特殊函数处理单元103得到待计算数据以及待计算数据对应的目标表格查询索引后,则可以先基于目标表格查询索引,从目标系数存储表格中查询得到第一泰勒展开系数、第二泰勒展开系数以及第三泰勒展开系数,同时可以利用其携带的累加器以及移位逻辑单元,计算待计算数据与目标比较系数的差值,得到第一差值项,并且利用乘法器,对第一差值项进行平方运算,从而得到第二差值项。之后,则可以再次利用乘法器,来分别将第二泰勒展开系数与第一差值项相乘,以及将第三泰勒展开系数与第二差值项相乘,从而分别得到第二泰勒展开项以及第三泰勒展开项,最后,还可以通过累加器以及移位逻辑单元,将作为第一泰勒展开项的第一泰勒展开系数,与第二泰勒展开项以及第三泰勒展开项进行相加处理,从而得到最终的函数计算结果。
本实施例中,特殊函数处理单元103还可以通过其携带的乘法器、累加器以及移位逻辑单元,来实现待计算数据对应的函数计算结果的计算,从而进一步提高函数计算的效率。
在一个实施例中,待计算数据以多位浮点数的形式表示;系数存储表格中存储的各个表格查询索引的位数位为预设浮点数位数;特殊函数处理单元103,进一步用于获取待计算数据位于浮点数尾数域的前预设浮点数位数的浮点数值;从各个表格查询索引中,获取与预设浮点数位数相同的表格查询索引,作为目标表格查询索引。
本实施例中,待计算数据可以通过多位浮点数的形式进行表示,该浮点数可以是单精度浮点数,包括1bit符号位sign,即符号域,8bits指数位exp,即指数域和23bits尾数位mant,即尾数域所组成,按照表示IEEE二进制浮点数算术标准(IEEE 754)表达式如下:
x=(-1)sign*(1.mant)*2exp
其中,x表示待计算数据,同时,由于符号位一般不影响计算,而指数位通过位移操作即可,因此只有尾数位需要通过查表法进行计算,而预设浮点数位数则可以是预先设定的表格查询索引的位数,例如可以是7位,即系数存储表格中包含的表格查询索引为27=128个,分别为0000000-1111111中的任意一个。
而目标表格查询索引则可以基于以多位浮点数形式展示的待计算数据中,位于尾数域的前预设浮点数位数的浮点数值得到,即通过将尾数域的前7位浮点数值来得到,以实现表格的查询。
以待计算数据为3.24为例,按照表示IEEE二进制浮点数算术标准(IEEE754)表达式可以将其表示为:
x=1.10011110101110000101001*2128
那么,假如预设浮点数位数为7位,则可以将尾数域的前7位所对应的浮点数值,即1001111,作为目标表格查询索引,来从表格中存储的128组泰勒展开系数,找出1001111这一组对应的目标泰勒展开系数。
本实施例中,目标表格查询索引的获取还可以是先基于作为多位浮点数的形式表示的待计算数据位于浮点数尾数域的前预设浮点数位数的浮点数值得到,从而可以使得目标表格查询索引可以和待计算数据的数值相适应。
进一步地,特殊函数处理单元103,还用于获取当前函数类型,以及当前函数类型对应的预设个数的泰勒展开系数中,各个泰勒展开系数的计算表达式;在各个表格查询索引中新添加后一位数值,并将新添加的后一位数值进行置一处理,得到各个表格查询索引分别对应的比较系数;利用各个泰勒展开系数的计算表达式,分别计算各个比较系数对应的泰勒展开系数,得到各个表格查询索引对应的预设个数的泰勒展开系数;将各个表格查询索引,以及各个表格查询索引对应的预设个数的泰勒展开系数,写入至当前函数类型对应的当前系数存储表格,并将当前系数存储表格存储入存储器102。
当前函数类型则指的是当前需要存储的系数存储表格,即当前系数存储表格所对应函数类型,本实施例中,特殊函数处理单元103可以预先计算好当前函数类型所对应的各个表格查询索引,分别对应的预设个数的泰勒展开系数,并将上述各个表格查询索引,以及分别对应的预设个数的泰勒展开系数形成当前系数存储表格。具体来说,特殊函数处理单元103在确定出当前需要存储的系数存储表格后,还可以确定出当前函数类型对应的各个泰勒展开系数分别对应的计算表达式。之后,则可以在各个表格查询索引中新添加后一位数值,并将新添加的后一位数值进行置一处理,来得到每一个表格查询索引分别对应的比较系数后,将各个比较系数分别代入每一个计算表达式,从而得到各个表格查询索引分别对应的多个泰勒展开系数,从而可以将各个表格查询索引,以及各个表格查询索引分别对应的多个泰勒展开系数,形成当前函数类型对应的系数存储表格,即当前系数存储表格,并且将述当前系数存储表格存储入存储器102,以待查询时可以从表格中读取上述泰勒展开系数。
例如,当前需要存储的当前系数存储表格所对应的当前函数类型可以是倒数函数,对于倒数函数而言,各个泰勒展开系数的计算表达式可以分别如下所示:
之后,则可以将各个表格查询索引,即上述128个表格查询索引分别新添加后一位数值,并置一处理得到x0,代入至上述计算公式,从而分别得到每个x0所对应的一组C0,C1与C2,从而得到128组x0所对应的C0,C1与C2,之后则可以将128个表格查询索引,以及128组x0所对应的C0,C1与C2,写入至倒数函数类型对应的系数存储表格,并将该系数存储表格存入存储器102。
上述实施例中,特殊函数处理单元103可以预先计算各个表格查询索引针对当前函数类型所对应的泰勒展开系数,并将各个表格查询索引,以及各个表格查询索引对应的预设个数的泰勒展开系数,写入当前系数存储表格,并将其存储入存储器102,实现了在存储器102中存储各种函数类型对应的系数存储表格,为表格查询提供了基础。
另外,特殊函数处理单元103,还用于遍历预设浮点数位数的多个取值,形成各个取值分别对应的表格查询索引,得到各个表格查询索引。
而在构建系数存储表格过程中,为了得到每一个表格查询索引,特殊函数处理单元103,还可以对预设浮点数位数的多个取值进行遍历处理,从而形成上述表格查询索引。以预设浮点数位数是7位为例,特殊函数处理单元103可以遍历7位组成的所有取值,即得到27=128个取值,分别为0000000-1111111中的任意一个,来形成128个表格查询索引。
本实施例中,特殊函数处理单元103还可以通过对预设浮点数位数的多个取值进行遍历,来形成多个表格查询索引,从而可以提高表格查询索引的构建效率。
在一个实施例中,特殊函数处理单元103,进一步用于检测待计算数据是否为预先设定的特殊数值;在待计算数据不是特殊数值的情况下,获取待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取计算函数标识对应的目标函数类型匹配的目标系数存储表格。
特殊数值指的是某些预先设定的特殊值,由于某些特殊数值无法直接用于函数的计算,需要对其进行某些特殊处理,例如对于倒数计算而言,0即作为一个特殊数值,而对于这种特殊数值,则无法通过常规处理方式进行处理。因此特殊函数处理单元103在得到待计算数据后,还可以检测输入的待计算数据是否是用户预先设定的特殊数值,而只有在该待计算数据不是特殊数值的情况下,特殊函数处理单元103才会执行获取待计算数据对应的目标表格查询索引的过程,来实现泰勒展开系数的表格查询。
本实施例中,特殊函数处理单元103还可以对该待计算数据进行检测,以判断待计算数据是否为预先设定的特殊数值,只有在不是特殊数值的情况下,才执行获取待计算数据对应的目标表格查询索引的过程,从而可以进一步提高待计算数据进行函数计算的准确性。
另外,存储器102,还用于存储各个函数类型匹配的特殊数值表格,特殊数值表格中存储有各个特殊数值分别对应的函数计算结果;特殊函数处理单元103,还用于在待计算数据是特殊数值的情况下,从存储器存储的特殊数值表格中,获取计算函数标识对应的目标函数类型匹配的目标特殊数值表格,并从目标特殊数值表格中,获取与待计算数据对应的函数计算结果。
特殊数值表格则是用于存储特殊数值所对应的函数值的表格,由于针对不同函数类型,同一个特殊数值也可以对应于不同的函数值,因此也可以预先在存储器102中,按照不同函数类型形成不同的特殊数值表格,并且每个特殊数值表格中可以存储有各个特殊数值,针对该特殊数值表格所对应的函数类型的函数计算结果。因此,如果特殊函数处理单元103接收到的待计算数据是特殊数值时,则可以进一步地计算函数标识对应的目标函数类型,从存储器102存储的多个特殊数值表格中,找到与该目标函数类型匹配的目标特殊数值表格,从而从目标特殊数值表格中,获取与待计算数据对应的函数计算结果。
以倒数函数为例,倒数函数所对应的特殊数值表格可以如表1所示:
表1倒数函数的特殊数值表
src | -inf | -F | -denorm | -0 | +0 | +denorm | +F | +inf | NaN |
dest | -0 | -F | -inf | -inf | +inf | +inf | +F | +0 | NaN |
之后,当待计算数据输入为0时,由于该数值为特殊数值,因此在进行倒数函数的计算时,则可以根据上述表1,直接得到函数计算结果为+inf。
本实施例中,还可以预先在存储器102中存储各个函数类型对应的特殊数值表格,从而在输入特殊数值后,则可以进一步地根据特殊数值表直接得到函数的计算结果,进一步提高了函数计算系统的通用性。
在一个实施例中,如图2所示,还提供了一种应用于GPU的函数计算方法,该方法可以应用于如图1所示的应用于GPU的函数计算系统中的特殊函数处理单元103,具体可以包括以下步骤:
步骤S201,从输入单元101接收待计算数据,以及待计算数据对应的计算函数标识。
其中,待计算数据指的是需要进行特殊函数计算的数据,而计算函数标识则是表征特殊函数的函数类型的标识。在输入单元101得到需要进行特殊函数计算处理的待计算数据后,则可以将上述待计算数据,以及处理的特殊函数的函数类型发送至特殊函数处理单元103,由特殊函数处理单元103得到待计算数据,以及待计算数据对应的计算函数标识。
步骤S202,获取待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取计算函数标识对应的目标函数类型匹配的目标系数存储表格;存储器,用于存储各个函数类型匹配的系数存储表格,系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数。
存储器102则是用于存储数据的存储部件,该存储器102中,可以预先存储有多个用于存储不同函数类型对应的泰勒展开系数的系数存储表格。而系数存储表格中可以包含多个表格查询索引,并且每一个表格查询索引可以对应于预设个数的泰勒展开系数,分别对应于不同的泰勒展开项。目标表格查询索引则指的是多个表格查询索引中,与待计算数据对应的表格查询索引,该目标表格查询索引可以是根据待计算数据的具体数值确定得到,而目标系数存储表格则指的是计算函数标识对应的目标函数类型匹配的目标系数存储表格。
具体来说,存储器102可以预先存储有不同函数类型对应的系数存储表格,并且各个系数存储表格中可以包含多个表格查询索引,分别对应有预设个数的泰勒展开系数。特殊函数处理单元103得到待计算数据后,则可以先基于待计算数据得到对应的目标表格查询索引,并且基于计算函数标识对应的目标函数类型,来从存储器102中得到与目标函数类型匹配的系数存储表格,即目标系数存储表格。
步骤S203,从目标系数存储表格中,获取与目标表格查询索引对应的预设个数的目标泰勒展开系数;
步骤S204,基于待计算数据,以及预设个数的目标泰勒展开系数,得到待计算数据对应的函数计算结果。
目标泰勒展开系数则指的是在目标系数存储表格中存储的,与目标表格查询索引对应的泰勒展开系数。特殊函数处理单元103确定出匹配的目标系数存储表格后,则可以进一步从目标系数存储表格中,得到与目标表格查询索引对应的预设个数的目标泰勒展开系数。并且还可以利用目标泰勒展开系数,对待计算数据对应的泰勒展开项进行计算,从而得到待计算数据对应的函数计算结果。
上述应用于GPU的函数计算方法中,通过特殊函数处理单元103可以从输入单元101接收待计算数据,以及待计算数据对应的计算函数标识;获取待计算数据对应的目标表格查询索引,并从存储器102存储的系数存储表格中,获取计算函数标识对应的目标函数类型匹配的目标系数存储表格;存储器102,用于存储各个函数类型匹配的系数存储表格,系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;从目标系数存储表格中,获取与目标表格查询索引对应的预设个数的目标泰勒展开系数;基于待计算数据,以及预设个数的目标泰勒展开系数,得到待计算数据对应的函数计算结果。本申请可以通过在存储器102中预先存储各个函数类型匹配的系数存储表格,该系数存储表格中可以存储有各个表格查询索引分别对应的预设个数的泰勒展开系数,从而在特殊函数处理单元103得到待计算数据以及对应的计算函数标识后,可以先得到待计算数据对应的目标表格查询索引,之后利用该索引查询计算函数标识对应的目标函数类型所匹配的目标系数存储表格,得到预设个数的目标泰勒展开系数,并基于待计算数据以及上述预设个数的目标泰勒展开系数,来得到函数计算结果,相比于现有技术提供的应用于GPU的特殊函数运算方法,本申请可以通过查表的方式来得到目标泰勒展开系数,从而减少了运算量,提高了运算效率。
在一个实施例中,还提供了一种基于泰勒公式查表法的特殊函数计算方法,该方法可以应用于GPU中,该GPU可以包含有多个执行单元,其中,每个执行单元由线程寄存单元(WVR,Wave Register Unit)、线程调度单元(WVC,Wave Controller)、计算单元(ALU)、指令缓存(IC,Instruction Cache)和输入输出(INOUT)等部件构成,这些模块的基本作用为:
线程寄存单元(WVR,Wave Register Unit):用于暂存线程wave的中间数据,每个wave包含多个子单元lane,能够以SIMD模式进行读写和计算;每个WVR可存储8个wave的中间数据;本专利介绍的矢量寄存器VRF和标量寄存器SRF中的数据就可以放在WVR中。
线程调度单元(WVC,Wave Controller):管理和调度每个线程的控制单元,包括选择线程、取指、译码、发射等步骤;需要在每个时钟周期按照优先级从8个wave中选择一个合适的wave,发送取指指令、对返回的指令译码、发送指令到ALU执行等过程。
计算单元(ALU):执行单元的核心部件,完成线程wave的计算功能,能够以SIMD的方式同时处理多个lane的计算,包括算术运算、逻辑运算、位运算、跳转判断、特殊函数等操作;计算结果将写入到WVR或者通过INOUT输出。
指令缓存(IC,Instruction Cache):根据请求的指令偏移为每个线程wave读取指令,它是一种高速缓存,包含缓存空间、匹配控制逻辑、Tag单元等部分,缓存空间组织为多个缓存行的形式进行管理。
输入输出单元(INOUT):线程wave通过INOUT从外部内存读取输入数据、采样纹理、存储计算结果等操作。
而特殊函数处理单元(SFU,Special Function Unit)则是专门用来处理特殊函数的模块,相当于一个特殊的计算单元ALU。其内部可处理倒数RCP、开根号SQRT、开根号取倒数RSQ、指数函数EXP、对数函数LOG、正弦函数SIN、余弦函数COS等多种操作。在当前指令正在执行以上特殊函数操作时,SFU将会代替ALU进行计算。SFU的计算结果和ALU相同,将写入到WVR或者通过INOUT输出。
其中,指令执行的流程可以如图3所示,包括以下步骤:
①线程调度单元WVC选择线程wave,并向IC发送取址指令;
②WVC拿到IC发回的指令并对返回的指令译码,并从存储空间得到需要的数据;
③当指令特殊函数指令时,WVC发送指令到SFU执行,SFU使用上一步拿到的数据,以SIMD的方式执行计算操作;当执行普通指令时,WVC发送指令到ALU执行,其余步骤相同。
④将SFU的计算结果发送给INOUT,并判断SFU的计算结果是写入WVR还是发送给其他模块;
⑤根据上一步的判断,执行WVR写入操作或通过INOUT将数据发送给其他模块。
而其中特殊函数处理单元SFU计算特殊函数的方式,则是选择泰勒展开公式的三项级数,并结合查表法优化其计算过程,以及通过硬件电路来实现,从而具备简单高效的优点。
而选择泰勒展开式前三项进行计算,既可以满足较高的精度要求,也可以节约硬件资源。对一个具有n阶导的特殊函数进行泰勒级数展开,理论上,计算级数项越多,结果越精确,但计算量也随之增大,不仅耗时,要求的硬件逻辑部件也越复杂。由于泰勒公式各级展开项的值随着n的增大,对结果影响越来越小,由泰勒公式可以得知:
其中,分别记C0,C1,C2以及δ为
那么该公式则可以化简为f(x)=C0+C1*δ+C2*δ2,从而实现将复杂的特殊函数运算转化为一系列简单的乘加运算的结合。
查表法是将结果先算出后存放在硬件存储空间中,在运行的时候直接从存储空间中读取,方便快捷,应用在硬件电路中,既能保证系数项的精度又能提高计算效率。该方法先预计算出各个泰勒展开项的系数值并将其存储下来,组成表项,每一项对应唯一的索引。调用特殊函数时候,通过查找表找到相应的选项,调用f(x)=C0+C1*δ+C2*δ2来计算得出结果。
特殊函数的计算一般是使用单精度浮点数,考虑到浮点数的特点,包括1bit符号位sign,8bits指数位exp和23bits尾数位mant,按照表示IEEE二进制浮点数算术标准(IEEE754)表达式如下:
x=(-1)sign*(1.mant)*2exp
符号位一般不影响计算,而指数位通过位移操作即可,只有尾数位需要通过查表法进行计算,所以仅讨论尾数位的处理方法。假设未知数x及x处附近的已知点x0的IEEE二进制浮点数算术标准(IEEE 754)表达式如下:
x=1.xxxxxxxxxxxxxxxxxxxxxxx*2128
x0=1.xxxxxxx1000000000000000*2128
考虑到计算精度x0,使用的尾数位越多精度越高,但是获得的表格项目越多。因此仅保留小数点后面7位数字,(最多27=128个表格项),后面的位数固定为0。将x0的取值带入C0,C1,C2表达式,并遍历x0=1.xxxxxxx1中7bits x(不同函数的x0形式可能不同)的所有可能取值,得出128组{C0,C1,C2},由0~127构成索引,组成一个具有三个项目的表格Func_Table。
三个系数C0,C1,C2也是浮点数,和x0一样,仅需要处理部分尾数即可,分别以28,18,11个有效位进行表示,并称其为Base_Table,First_Table,Second_Table,分别将其简称为B_Table,F_Table,S_Tabel。以特殊函数,倒数为例,分别计算从而得到128个表格项目,针对倒数RCP函数,需要存储该128项表格到硬件存储器中,在运行时,根据函数的输入值,计算出对应的索引,可快速查出该输入值应对的各项系数,再利用公式f(x)=C0+C1*δ+C2*δ2,实现特殊函数的运算加速。
另外,由于IEEE 754定义了一些特殊值,形如+0/-0,+∞和-∞,非数及非规格化数。对于不同的特殊函数,都要先分析其输入是否需特殊处理,对于特殊函数的合法输入则走算法的正常流程,具体计算流程可如图4所示。
主要计算流程为:
步骤(1):对输入的浮点数据x进行检测,如果是+0/-0,+∞和-∞等特殊值,那么进入步骤(2),否则继续步骤(3);
步骤(2):对特殊数据进行单独处理,进入到步骤(7)。
步骤(3):对输入x,获得相关的中间数据,包括从x的尾数部分抽取出7bits的索引x0,计算变量δ等;
步骤(4):根据索引值x0,从查找表中找到对应的三个系数C0,C1,C2,;
步骤(5):使用公式f(x)=C0+C1*δ+C2*δ2计算结果;
步骤(6):对计算结果进行规格化处理,主要是把计算得到的尾数和指数、符号位组合为浮点数格式,并进行单位化处理;
步骤(7):输出最终结果。
另外GPU中实现导数、指数、三角函数等特殊函数的部件称为特殊函数处理单元(Special Function Unit,SFU)。对于每种特殊函数,均需要通过泰勒展开预先获得一个表格,表格项目一般为64项或者128项,预先存储在硬件逻辑空间中(SRAM)。在着色程序调用特殊函数指令的时候,SFU单元将根据输入变量,选择合适的查找表格找到相应的系数,再使用f(x)=C0+C1*δ+C2*δ2计算结果,计算过程中使用硬件中的乘法器(Multiplier)、累加器(Accumulator)和移位逻辑单元(Shift Logic Units)。所有的特殊函数差别在于查找表不同,其主要的计算步骤均一致。
图5为函数实现过程的硬件电路图,分为四个阶段,每个阶段完成特定的取值及计算操作。根据公式f(x)=C0+C1*δ+C2*δ2,将该函数分解为三部分在不同阶段分别计算:
Out=Part1+Part2+Part3
Part1=C0
Part2=C1*δ
Part3=C2*δ2
其中,计算流程大致分为4个阶段
(1)阶段0完成以下内容:
输入值的符号位,指数位及尾数位的提取;
判断是否为特殊的函数输入值,如+0/-0,+∞和-∞,非数,非规格化数;
获取该输入值对应的表格索引,查询F_Table项;
计算δ及δ2。
(2)阶段1完成以下内容:
若为特殊的函数输入值,则将其传递到下一个处理阶段;
索引B_Table项,进而得到Part1
索引S_Table项,与阶段0传下来的δ2经过14*11的乘法器计算得到Part3;
将F_Table项与δ经过18*18的乘法器,计算得到Part2。
(3)阶段2完成以下内容:
若为特殊的函数输入值,则将其传递到下一个处理阶段;
将Part1,Part2及Part3做移位对齐,经过加法器得出结果。
(4)阶段3完成以下内容:
处理函数的特殊输入;
将阶段2计算的结果规格化,得到结果的标准浮点形式。
以倒数函数为例,该计算流程可如下所示:
那么最终的公式变为:Out=Part1+Part2+Part3=C0-C1*δ+C2*δ2
遍历x0=1.xxxxxxx1中7bits x的所有可能取值,得出128组数据,完成该表格的计算后,在后续硬件实现中,只需分配一段大小为8bytes*128*3的内存来存储该表格。
若x=1.00000001101*22,则x0=1.00000001*22,索引为0,从而直接得到{C0,C1,C2}={0x0ff00ff0,0x03f80f,0x0007e8},带入到公式C0-C1*δ+C2*δ2即可,这样就省去了繁琐的计算,显著的提升了执行效率。
如果x=0,在硬件电路中的阶段0,对于输入值x=0,首先判断其输入值非法,需要特殊处理。直接将输入信息送到阶段3,根据表1,可直接得到结果+inf。
如果x=3.24,3.24为正常值输入,可包括以下处理阶段:
(1)阶段0:
从其IEEE 754标准浮点表达式中得到其符号域,指数域和尾数域。x及x0的IEEE754标准表达式为
x=1.10011110101110000101001*2128
x0=1.10011111000000000000000*2128
可得:
Index=0x4f,经查表RCP_TABLE,得F_Table项,即C1=0x0185a9;δ=0x170a4,将δ经过15*15宽度的乘法器,得到δ2=0x1410db9;
(2)阶段1:
Index=0x4f查询RCP_TABLE,得到C0=0x09deb06d,即PART1;C2=0x1e1;
将δ与C1经过18*18的乘法器,得出PART2=0x10000000da356fbc;
保留δ2的最高14有效位,δ2=0x282,与C2经过14*11的乘法器,得到PART3=0x100000000004b642;
(3)阶段2:
适当截取PART2与PART3的若干低位,调整其与PART1数量级对其经过加法器,算得:Out=0x09e06522;
(4)阶段3
鉴于PART1,PART2和PART3的数量级不同(泰勒展开式中,级数越大,对结果影响越小),在做加法时,需将PART2和PART3的结果做截取,保留适当的有效位,从而使PART1,PART2和PART3处于相同数量级下经过加法器进行计算。
将阶段2的输出结果Out进行规格化,得出其IEEE754标准形式的符号域,指数域和尾数域分别为:
符号sign(1bit)=0;
指数exp(8bit)=0x7d;
尾数mant(23bit)=0x1e0652;
即0.308641970。
本实施例中,提出了一种计算特殊函数的硬件实现方法,该方法基于泰勒级数展开公式,通过构造查找表对特殊函数进行计算,在满足精度的前提下,解决了特殊函数在硬件中实现的难题。该查表法将公式中的相关系数事先计算出,存储于硬件存储空间中,通过索引快速获取公式中相关系数,从而加速计算过程,并且结果也满足了较高的精度。同时,基于泰勒公式的查表法简化了特殊函数的实现难度,运算中通过简单的查询操作来替换复杂的计算,不仅大大降低了实现难度,还节约了硬件资源,提升了计算效率。并且该电路设计方法具有可复用性,还能达到理想的精度要求。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的应用于GPU的函数计算方法的应用于GPU的函数计算装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个应用于GPU的函数计算装置实施例中的具体限定可以参见上文中对于应用于GPU的函数计算方法的限定,在此不再赘述。
在一个实施例中,如图6所示,提供了一种应用于GPU的函数计算装置,该装置可应用于特殊函数处理单元,包括:计算数据获取模块601、目标表格获取模块602、展开系数获取模块603和计算结果获取模块604,其中:
计算数据获取模块601,用于从输入单元接收待计算数据,以及待计算数据对应的计算函数标识;
目标表格获取模块602,用于获取待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取计算函数标识对应的目标函数类型匹配的目标系数存储表格;存储器,用于存储各个函数类型匹配的系数存储表格,系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
展开系数获取模块603,用于从目标系数存储表格中,获取与目标表格查询索引对应的预设个数的目标泰勒展开系数;
计算结果获取模块604,用于基于待计算数据,以及预设个数的目标泰勒展开系数,得到待计算数据对应的函数计算结果。
上述应用于GPU的函数计算装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种应用于GPU的函数计算系统,其特征在于,所述系统包括:输入单元,存储器以及特殊函数处理单元;其中,
所述输入单元,用于获取待计算数据,以及所述待计算数据对应的计算函数标识,并在所述计算函数标识对应的目标函数类型为预设类型的情况下,将所述待计算数据以及所述计算函数标识发送至所述特殊函数处理单元;
所述存储器,用于存储各个函数类型匹配的系数存储表格,所述系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
所述特殊函数处理单元,用于获取所述待计算数据对应的目标表格查询索引,并从所述存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格,从所述目标系数存储表格中,获取与所述目标表格查询索引对应的预设个数的目标泰勒展开系数;
所述特殊函数处理单元,还用于基于所述待计算数据,以及所述预设个数的目标泰勒展开系数,得到所述待计算数据对应的函数计算结果。
2.根据权利要求1所述的系统,其特征在于,所述预设个数的目标泰勒展开系数为3个,分别为第一泰勒展开系数、第二泰勒展开系数以及第三泰勒展开系数;所述待计算数据以多位浮点数的形式表示;所述系数存储表格中存储的各个表格查询索引的位数为预设浮点数位数;
所述特殊函数处理单元,进一步用于在所述目标表格查询索引中新添加后一位数值,并将所述新添加的后一位数值进行置一处理,得到目标比较系数;
所述特殊函数处理单元,进一步获取所述待计算数据与所述目标比较系数的差值,并将所述差值作为所述待计算数据对应的第一差值项,以及将所述差值的平方作为所述待计算数据对应的第二差值项;
所述特殊函数处理单元,进一步用于将所述第一泰勒展开系数作为所述待计算数据的第一泰勒展开项,将所述第二泰勒展开系数与所述第一差值项的乘积作为第二泰勒展开项,以及将所述第三泰勒展开系数与所述第二差值项的乘积作为第三泰勒展开项,并根据所述第一泰勒展开项、所述第二泰勒展开项以及所述第三泰勒展开项,得到所述待计算数据对应的函数计算结果。
3.根据权利要求2所述的系统,其特征在于,所述特殊函数处理单元,包括:乘法器、累加器以及移位逻辑单元;
所述特殊函数处理单元,进一步用于通过所述累加器以及所述移位逻辑单元,获取所述待计算数据与所述目标比较系数的差值,以及通过所述乘法器获取所述差值的平方;
所述特殊函数处理单元,进一步用于通过所述乘法器将所述第二泰勒展开系数与所述第一差值项相乘,得到所述第二泰勒展开项,以及将所述第三泰勒展开系数与所述第二差值项相乘,得到所述第三泰勒展开项,并通过所述累加器以及所述移位逻辑单元,对所述第一泰勒展开项、所述第二泰勒展开项以及所述第三泰勒展开项进行相加处理,得到所述待计算数据对应的函数计算结果。
4.根据权利要求1所述的系统,其特征在于,所述待计算数据以多位浮点数的形式表示;所述系数存储表格中存储的各个表格查询索引的位数为预设浮点数位数;
所述特殊函数处理单元,进一步用于获取所述待计算数据位于浮点数尾数域的前所述预设浮点数位数的浮点数值;从所述各个表格查询索引中,获取与所述预设浮点数位数相同的表格查询索引,作为所述目标表格查询索引。
5.根据权利要求4所述的系统,其特征在于,
所述特殊函数处理单元,还用于获取当前函数类型,以及所述当前函数类型对应的预设个数的泰勒展开系数中,各个泰勒展开系数的计算表达式;在所述各个表格查询索引中新添加后一位数值,并将所述新添加的后一位数值进行置一处理,得到所述各个表格查询索引分别对应的比较系数;利用所述各个泰勒展开系数的计算表达式,分别计算各个比较系数对应的泰勒展开系数,得到所述各个表格查询索引对应的预设个数的泰勒展开系数;将所述各个表格查询索引,以及所述各个表格查询索引对应的预设个数的泰勒展开系数,写入至所述当前函数类型对应的当前系数存储表格,并将所述当前系数存储表格存储入所述存储器。
6.根据权利要求5所述的系统,其特征在于,
所述特殊函数处理单元,还用于遍历预设浮点数位数的多个取值,形成各个取值分别对应的表格查询索引,得到所述各个表格查询索引。
7.根据权利要求1所述的系统,其特征在于,
所述特殊函数处理单元,进一步用于检测所述待计算数据是否为预先设定的特殊数值;在所述待计算数据不是所述特殊数值的情况下,获取所述待计算数据对应的目标表格查询索引,并从所述存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格。
8.根据权利要求1所述的系统,其特征在于,
所述存储器,还用于存储各个函数类型匹配的特殊数值表格,所述特殊数值表格中存储有各个特殊数值分别对应的函数计算结果;
所述特殊函数处理单元,还用于在所述待计算数据是所述特殊数值的情况下,从所述存储器存储的特殊数值表格中,获取所述计算函数标识对应的目标函数类型匹配的目标特殊数值表格,并从所述目标特殊数值表格中,获取与所述待计算数据对应的函数计算结果。
9.一种应用于GPU的函数计算方法,其特征在于,应用于特殊函数处理单元,所述方法包括:
从输入单元接收待计算数据,以及所述待计算数据对应的计算函数标识;
获取所述待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格;所述存储器,用于存储各个函数类型匹配的系数存储表格,所述系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
从所述目标系数存储表格中,获取与所述目标表格查询索引对应的预设个数的目标泰勒展开系数;
基于所述待计算数据,以及所述预设个数的目标泰勒展开系数,得到所述待计算数据对应的函数计算结果。
10.一种应用于GPU的函数计算装置,其特征在于,应用于特殊函数处理单元,所述装置包括:
计算数据获取模块,用于从输入单元接收待计算数据,以及所述待计算数据对应的计算函数标识;
目标表格获取模块,用于获取所述待计算数据对应的目标表格查询索引,并从存储器存储的系数存储表格中,获取所述计算函数标识对应的目标函数类型匹配的目标系数存储表格;所述存储器,用于存储各个函数类型匹配的系数存储表格,所述系数存储表格中存储有各个表格查询索引分别对应的预设个数的泰勒展开系数;
展开系数获取模块,用于从所述目标系数存储表格中,获取与所述目标表格查询索引对应的预设个数的目标泰勒展开系数;
计算结果获取模块,用于基于所述待计算数据,以及所述预设个数的目标泰勒展开系数,得到所述待计算数据对应的函数计算结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211384655.4A CN115936965A (zh) | 2022-11-07 | 2022-11-07 | 应用于gpu的函数计算系统、方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211384655.4A CN115936965A (zh) | 2022-11-07 | 2022-11-07 | 应用于gpu的函数计算系统、方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115936965A true CN115936965A (zh) | 2023-04-07 |
Family
ID=86648048
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211384655.4A Pending CN115936965A (zh) | 2022-11-07 | 2022-11-07 | 应用于gpu的函数计算系统、方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115936965A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117631751A (zh) * | 2024-01-25 | 2024-03-01 | 北京壁仞科技开发有限公司 | 人工智能芯片、特殊函数计算方法和计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113094970A (zh) * | 2021-03-12 | 2021-07-09 | 苏州芯启微电子科技有限公司 | 一种基于泰勒展开的函数计算加速装置 |
US20210326107A1 (en) * | 2020-04-21 | 2021-10-21 | Samsung Electronics Co., Ltd. | Hardware acceleration machine learning and image processing system with add and shift operations |
CN113870090A (zh) * | 2021-12-01 | 2021-12-31 | 北京壁仞科技开发有限公司 | 实现函数的方法、图形处理装置、系统和介质 |
CN114546330A (zh) * | 2022-04-26 | 2022-05-27 | 成都登临科技有限公司 | 函数实现方法、逼近区间分段方法、芯片、设备及介质 |
-
2022
- 2022-11-07 CN CN202211384655.4A patent/CN115936965A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210326107A1 (en) * | 2020-04-21 | 2021-10-21 | Samsung Electronics Co., Ltd. | Hardware acceleration machine learning and image processing system with add and shift operations |
CN113094970A (zh) * | 2021-03-12 | 2021-07-09 | 苏州芯启微电子科技有限公司 | 一种基于泰勒展开的函数计算加速装置 |
CN113870090A (zh) * | 2021-12-01 | 2021-12-31 | 北京壁仞科技开发有限公司 | 实现函数的方法、图形处理装置、系统和介质 |
CN114546330A (zh) * | 2022-04-26 | 2022-05-27 | 成都登临科技有限公司 | 函数实现方法、逼近区间分段方法、芯片、设备及介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117631751A (zh) * | 2024-01-25 | 2024-03-01 | 北京壁仞科技开发有限公司 | 人工智能芯片、特殊函数计算方法和计算机可读存储介质 |
CN117631751B (zh) * | 2024-01-25 | 2024-05-03 | 北京壁仞科技开发有限公司 | 人工智能芯片、特殊函数计算方法和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110036368B (zh) | 用于执行算术运算以累加浮点数的装置及方法 | |
US9778906B2 (en) | Apparatus and method for performing conversion operation | |
US9753695B2 (en) | Datapath circuit for digital signal processors | |
US9703531B2 (en) | Multiplication of first and second operands using redundant representation | |
US7565514B2 (en) | Parallel condition code generation for SIMD operations | |
US20060041610A1 (en) | Processor having parallel vector multiply and reduce operations with sequential semantics | |
US9733899B2 (en) | Lane position information for processing of vector | |
JP5307202B2 (ja) | 精度制御反復算術論理演算ユニット | |
WO2016171847A1 (en) | High performance division and root computation unit | |
US9720646B2 (en) | Redundant representation of numeric value using overlap bits | |
CN101874237A (zh) | 用于执行算术运算的大小检测的设备和方法 | |
US9069686B2 (en) | Digital signal processor having instruction set with one or more non-linear functions using reduced look-up table with exponentially varying step-size | |
JP2019121398A (ja) | ルックアップテーブルを利用して加速化されたコンピューティングの方法及びシステム | |
CN115936965A (zh) | 应用于gpu的函数计算系统、方法和装置 | |
US7747667B2 (en) | Data processing apparatus and method for determining an initial estimate of a result value of a reciprocal operation | |
US9928031B2 (en) | Overlap propagation operation | |
US20040117421A1 (en) | Methods and systems for computing floating-point intervals | |
CN116166217A (zh) | 执行浮点操作的系统和方法 | |
CN109992242B (zh) | 基于乘法器的运算方法及装置 | |
US20190310826A1 (en) | Computing device performance of low precision arithmetic functions with arrays of pre-calculated values | |
GB2600915A (en) | Floating point number format | |
CN116909629A (zh) | 数据处理方法、装置和计算机设备 | |
JP2010033275A (ja) | データ処理方法及びデータ処理プロセッサ |
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 |