首页> 中国专利> 一种应用于GPU中的幂指数运算装置和运算方法

一种应用于GPU中的幂指数运算装置和运算方法

摘要

本发明涉及集成电路领域,特别是公开了一种应用于GPU中的幂指数运算硬件装置和运算方法:第一步,计算log2cosθ:第二步,计算xlog2cosθ;第三步,计算2mul_result;第四步,得到2mul_result之后,就可以用IEEE754单精度浮点数表示cosxθ的近似值。与现有技术相比,本发明能够能够在满足嵌入式系统因为空间大小和功耗而受限制的计算能力的同时,快速而又比较准确的图形处理单元完成Phong模型中的高光计算,为集成电路的设计提供了具有更好的图形处理能力的嵌入式系统设计。

著录项

  • 公开/公告号CN102609236A

    专利类型发明专利

  • 公开/公告日2012-07-25

    原文格式PDF

  • 申请/专利权人 天津大学;

    申请/专利号CN201210019688.9

  • 申请日2012-01-21

  • 分类号G06F7/552(20060101);

  • 代理机构12201 天津市北洋有限责任专利代理事务所;

  • 代理人李素兰

  • 地址 300072 天津市南开区卫津路92号

  • 入库时间 2023-12-18 06:17:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-09-29

    授权

    授权

  • 2014-04-02

    实质审查的生效 IPC(主分类):G06F7/552 申请日:20120121

    实质审查的生效

  • 2012-07-25

    公开

    公开

说明书

技术领域

本发明涉及集成电路领域,特别是涉及一种应用于嵌入式系统中涉及图形学中Phong光照模型里的高光计算方法。

背景技术

Phong光照计算模型是一种能够产生真实感很强的颜色计算方法,该计算模型与物理事实足够接近,对各种光照条件和材质属性都能获得很好的绘制效果,但是该算法计算量大,运算复杂,特别是,其中的高光计算部分还应用了幂指数运算cosxθ,是Phong光照计算模型中最耗时的部分。随着3D图形应用对图像真实感的要求越来越高,Phong模型也越来越多得应用到光照计算中。而对于嵌入式系统,其处理器能力有限。将Phong光照模型应用到嵌入式系统当中,需要快速准确的计算出cosxθ的结果,并且在集成电路设计时还要满足嵌入式系统面积和功耗的要求。

目前,计算幂指数的方法主要有查找表法和分段直线近似法。查找表(Look UpTable,LUT)将预先计算好的值存进Ram中,然后根据输入x在表中查找出最接近的结果。这种方法采样点越多,结果的精度就越高,但是同时所需的存储空间就越大。而且这种方法只能用于单输入,对cosxθ的查找需要三步。图形硬件中的特殊功能单元(Special Function Unit,SFU)是一种基于查找表的方法,能够计算除倒数,倒数的平方根,以2为底的对数,以2为底的指数以及求小数部分五种功能。利用SFU查找出cosxθ的结果的步骤为:

1)根据输入cosθ在LUT中找出对应的系数c0,c1,c2;

2)计算c0+c1gcosθ+c2gcos2θ,得到log2cosθ的近似结果;

3)计算mul_result=xlog2cosθ;

4)根据输入mul_result在LUT中查找出对应的系数c3,c4,c5;

5)计算c3+c4gmul_result+c5gmul_result2,即得到cosxθ的近似值。

用SFU计算cosxθ所花费的资源太多。需要用到两块LUT,七次乘法,四次加法,计算所需的cycle数也比较长。并且精度越高,LUT就会越大。因此,这种方法不适合应用于嵌入式系统中。

分段直线近似法分别将区间[0,1]的log2(1+f)曲线和2f曲线用分段直线去近似。分的段数越多,结果就越精确,但同时硬件的开销也会增大。目前主要有三段和8段两种分段方法。三段(记做3u-3u)将区间[0,1]分为[0,1/4]、[1/4,3/4]、[3/4,1]三个区间;八段(记做8-8)将区间[0,1]按1/8的间隔平均分成8段。以上两种分段直线近似的方法与查找表法相比,硬件的开销会小一些,误差会比查找表法大,把这种方法应用到图形算法中,生成图形像素的RGB颜色值的误差会比较大(最大为3)。但是,可以对分段方法做一些优化,以提高精度,减小误差。

有上述现有技术的分析可知,查找表法所占用的硬件资源比较多,计算也比较耗时。传统的分段直线近似法虽然占用的硬件资源比较少,但是误差比较大。

发明内容

基于上述现有技术,本发明提出一种应用于GPU中的幂指数运算装置和运算方法,基于分段直线近似的方法实现了Phong模型中的高光计算中的幂指数运算。

本发明提出了一种应用于GPU中的幂指数运算方法,该方法包括以下步骤:

第一步,计算log2cosθ,数学表达式为:

>log2cosθ=127-e-log2(1+f)(0f<1)>

>=~127-e-aif-bi(i=0,1L7)>

>=Ci-e-aif>

Ci表示各个分段区间表达式中的常数项。Ci和ai的定点表示值查表获得;

第二步,计算xlog2cosθ,x表示高光系数,θ表示反射光线和观察方向之间的夹角,x是一个32位定点数,高8bit表示整数部分,其余位表示小数部分,计算采用CSA乘法器,得到结果mul_result,如果mul_result大于127,则表示结果溢出,最终cosxθ的结果为0;

第三步,计算2mul_result,该步骤包括以下步骤:

将mul_result在小数点处拆分成整数部分和小数部分,分别记做int_part和fra_part,如式(1)所示:

2mul_result=2int_part+fra_part=2int_part-121+fra_part      (1)

式(1)中,21+fra_part用分段直线去近似,令frac=1+fra_part,则有

>21+fra_part=2frac=~kifrac+li=0,1,2...7(0frac<1)---(2)>

将式(2)的计算结果保留小数点后面的23位,记做exp_fra_result;

其中,计算2frac,数学表达式为:

>2frac=~kifrac+li(i=0,1L7,0frac<1)>

>=frac+frac>>2+frac>>5+8388610frac[0,1/8)frac+frac>>2+frac>>5+frac>>7+8314881frac[1/8,1/4)frac+frac>>3+frac>>7+8151042frac[1/4,3/8)frac+frac>>4+frac>>7+7897089frac[3/8,1/2)frac+frac>>5+frac>>7+7569409frac[1/2,5/8)frac+frac>>3+frac>>7+7077889frac[5/8,3/4)frac+frac>>2+frac>>5+frac>>7+6488066frac[3/4,7/8)frac+frac>>2+frac>>4+frac>>7+5693440frac[7/8,1);>

第四步,得到exp_fra_result之后,用IEEE754单精度浮点数表示cosxθ的近似值。

本发明还提出了一种应用于GPU中的幂指数运算装置,该运算装置包括log2cosθ运算单元和2frac运算单元,所述log2cosθ运算单元包括第一、第二多路选择器,二进制23位乘以16位的CSA乘法器和第一、第二加法器;第一多路器包括a0~a7共8路输入,s[7:0]为选通信号,且s[7:0]为八位2进制数,第二多路选择器包括c0~c7共8路输入,s[7:0]为选通信号,且s[7:0]为八位2进制数;所述二进制23位乘以16位的CSA乘法器用于实现log2cosθ运算,数学表达式为:

>log2cosθ=127-e-log2(1+f)(0f<1)>

>=~127-e-aif-bi(i=0,1L7)>

>=Ci-e-aif>

Ci为各个分段区间表达式中的常数项。Ci和ai的定点表示值查表获得;

第一选择器的输入为B0~B7表示反对数表达式中的各个常数项,由frac的高三位直接选通;第二选择器的输入为frac>>7、选通信号是s1[1:0];第三选择器的输入为frac>>5、frac>>4、0,选通信号是s1[3:2];第四选择器的输入为frac>>3、frac>>2、选通信号是s1[6:4];以及一个22位CSA加法器、一个23位CSA加法器、一个31为CSA加法器和一个31位CPA加法器,所述一个22位CSA加法器、一个23位CSA加法器、一个31为CSA加法器和一个31位CPA加法器实现的运算,其数学表达式为:

>2frac=~kifrac+li(i=0,1L7,0frac<1)>

>=frac+frac>>2+frac>>5+8388610frac[0,1/8)frac+frac>>2+frac>>5+frac>>7+8314881frac[1/8,1/4)frac+frac>>3+frac>>7+8151042frac[1/4,3/8)frac+frac>>4+frac>>7+7897089frac[3/8,1/2)frac+frac>>5+frac>>7+7569409frac[1/2,5/8)frac+frac>>3+frac>>7+7077889frac[5/8,3/4)frac+frac>>2+frac>>5+frac>>7+6488066frac[3/4,7/8)frac+frac>>2+frac>>4+frac>>7+5693440frac[7/8,1)>

其中,0≤frac<1,上述数学式的计算结果是一个不小于1的定点数,只保留小数点后面的23bit。

与现有技术相比,本发明能够在满足嵌入式系统因为空间大小和功耗而受限制的计算能力的同时,快速而又比较准确的图形处理单元完成Phong模型中的高光计算,为集成电路的设计提供了具有更好的图形处理能力的嵌入式系统设计。

附图说明

图1本发明的cosxθ计算流程图;

图2为IEEE754单精度浮点数格式图;

图3为指数e,尾数f的定点表示方法示意图;

图4为cosxθ的近似结果表示图;

图5为三种分段方法门数对比图;

图6为本发明的幂指数运算方法流程图;

图7为cosxθ在各种分段情况下的误差;

图8为基准图形;

图9为不同RGB数表示图;

图10为不同像素点数表示图;

图11为对数误差曲线图;

图12为log2cosθ运算单元框图;

图13为反对数误差曲线图;

图14为2frac运算单元框图。

具体实施方式

为了满足嵌入式系统对面积和功耗的要求,同时能让应用于嵌入式系统的图形处理单元快速而又比较准确的完成Phong模型中的高光计算,在本发明中,使图形处理单元生成的图形的RGB的颜色误差控制在[-1,1]之间。

而本发明(记做8u-8)所采用的分段方法资源的开销小于查找表法,速度也比查找表法快,精度比传统的分段方法要高,误差小。

下面结合附图和具体实施例对本发明的技术方案作进一步说明。本发明是基于分段直线近似的。

Phong模型的高光计算公式如式(1):

Is=ksLscosxθ                     (1)

式(1)中,ks表示在入射的镜面反射光中有多少被反射;Ls表示入射光颜色;x表示高光系数,x一般大于0;θ是反射光线和观察方向之间的夹角。由式(1)可得到式(2):

>cosxθ=2log2(cosxθ)=2xlog2cosθ---(2)>

本发明中,输入是cosθ和x。cosθ用IEEE754单精度浮点数表示,x用32bit的无符号定点数表示,其中,高8bit表示整数部分,其余表示小数部分。

由式(2)可知,如图1所示,对cosxθ的计算基本上可以分为三步:

第一步,先计算log2cosθ。

第二步,计算xlog2cosθ,结果记为mul_result。

第三步,计算2mul_result

如图2所示,IEEE754单精度浮点数中,最高位表示符号位,次高8bit表示指数部分,低23bit表示尾数部分。

进而,cosθ可以表示成式(3):

cosθ=(-1)s(1+f)2e-127                (3)

如图3所示,把图2中的指数部分e和尾数部分f分别用小数点位于第23bit和24bit之间的31位定点数表示。

1、log2cosθ的计算过程

暂不考虑cosθ的符号位,根据式(3),可以得到log2cosθ的计算表达式,如式(4):

log2cosθ=(127-e)-log2(1+f)             (4)

在本发明中,log2(1+f)的计算采用8段不等间距直线近似,如式(5):

>log2(1+f)=~aif+bi,i=0,1,L7,(0f<1)---(5)>

这样,就可以得到log2(1+f)的近似结果,进而可以得到log2cosθ的近似结果,并且结果是一个小数点位于第23bit和24bit之间的定点数。

2、xlog2cosθ的计算过程

x是一个32位定点数,高8bit表示整数部分,其余位表示小数部分。为了加快计算速度,xlog2cosθ的计算采用的是CSA乘法器,得到结果mul_result。如果mul_result大于127,则表示结果溢出,最终cosxθ的结果为0。

3、2mul_result的计算过程

将mul_result在小数点处拆分成整数部分和小数部分,分别记做int_part和fra_part,如式(6)所示:

2mul_result=2int_part+fra_part=2int_part-121+fra_part        (6)

式(6)中,21+fra_part用分段直线去近似,令frac=1+fra_part,则有

>21+fra_part=2frac=~kifrac+li=0,1,2...7(0frac<1)---(7)>

由于0≤frac<1,所以式(7)的结果是一个不小于1的定点数,只需保留小数点后面的23bit即可,记做exp_fra_result。

4、最终结果表示

得到exp_fra_result之后,就可以用IEEE754单精度浮点数表示cosxθ的近似值,如图4所示。

本发明的具体实施例:

对数部分分段的间距及各个段的参数如表1所示:

表1 log2(1+f)近似直线参数对应表

  f  a  b  f  a  b  0~8/32  1.2856  0.0062  26/32~28/32  0.7825  0.2223  8/32~16/32  1.0510  0.0633  28/32~30/32  0.7569  0.2448  16/32~22/32  0.9058  0.1337  30/32~31/32  0.7387  0.2617  22/32~26/32  0.8246  0.1886  31/32~32/32  0.7270  0.2730

对数曲线的误差公式可以表示为式(8):

log_error=log2(1+f)-aif-bi,i=0,1,L 7,(0≤f<1)         (8)

误差曲线如图10所示。

图示只是理论上的误差,在实际用硬件实现时,还要有舍入误差。

a用一个16bit的定点数表示,最高位表示整数部分,将所有的a都乘以2^15,就可以得到定点表示的a。然后再让a和f相乘,这里需要用一个23*16bit的CSA乘法器。b用23bit定点数表示,并且23bit均表示小数。

>log2cosθ=127-e-log2(1+f)(0f<1)>

>=~127-e-aif-bi(i=0,1L7)---(9)>

>=Ci-e-aif>

式(9)中,Ci为各个分段区间表达式中的常数项。Ci和ai的定点表示值如表2所示:

表2 Ci和ai的定点表示值

  i  C  a  i  C  a  0  1065300803  42127  4  1063488264  25641  1  1064822011  34439  5  1063299983  24802  2  1064231279  29681  6  1063157710  24206  3  1063771188  27020  7  1063063182  23822

对于ai和bi的选择,需要用的f的高5位,对应关系如表2所示。

表2 f,a,b关系对照表

  f[22:18]  a  b  f[22:18]  a  b  f[22:18]  a  b  f[22:18]  a  b  00000  a0  b0  01000  a1  b1  10000  a2  b2  11000  a3  b3

  00001  a0  b0  01001  a1  b1  10001  a2  b2  11001  a3  b3  00010  a0  b0  01010  a1  b1  10010  a2  b2  11010  a4  b4  00011  a0  b0  01011  a1  b1  10011  a2  b2  11011  a4  b4  00100  a0  b0  01100  a1  b1  10100  a2  b2  11100  a5  b5  00101  a0  b0  01101  a1  b1  10101  a2  b2  11101  a5  b5  00110  a0  b0  01110  a1  b1  10110  a3  b3  11110  a6  b6  00111  a0  b0  01111  a1  b1  10111  a3  b3  11111  a7  b7

从表可以得出,ai和bi与f[22:18]的关系如下,其中ABCDE分别表示f[22],f[21],f[20],f[19],f[18]。由表2可以得到:

>s0=ABCDE+ABCDE+ABCDE+ABCDE+ABCDE+ABCDE+ABCDE+ABCDE>

>=ABCD+ABCD+ABCD+ABCD>同

>=ABC+ABC>

>=AB>

理可得:

>s1=AB>

>s2=ABC+ABCD>

>s3=ABCD+ABCD>

>s4=ABCD>

>s5=ABCD>

>s6=ABCDE>

s7=ABCDE

这样,用s[7:0]=[s0,s1,s2,s3,s4,s5,s6,s7]组成多路选择器的选择信号。用Verilog描述s[7:0]对Ci和ai的选择:

如图11所示的log2cosθ运算单元框图,是对下面公式的硬件实现:

>log2cosθ=127-e-log2(1+f)(0f<1)>

>=~127-e-aif-bi(i=0,1L7)---(10).>

>=Ci-e-aif>

该运算单元包括第一、第二多路选择器,乘法器(本发明中选用23位乘以16位(均是二进制)的CSA乘法器)和第一、第二加法器。

因为不同的cosθ值对应的是不同的i,即8段直线中的某一段,所以给一个cosθ,就有与其对应的ai,Ci,e和f。计算log2cosθ,首先需要确定cosθ对应的ai和Ci(e和f直接根据cosθ就能得到),这样才能进行式(10)中的计算。第一多路器包括a0~a7共8路输入,s[7:0]为选通信号。s[7:0]是八位2进制数,具体选通方法如下:

若s[7:0]=10000000    输出=a0

若s[7:0]=01000000    输出=a1

若s[7:0]=00100000    输出=a2

若s[7:0]=00010000    输出=a3

若s[7:0]=00001000    输出=a4

若s[7:0]=00000100    输出=a5

若s[7:0]=00000010    输出=a6

若s[7:0]=00000001    输出=a7

其余情况,输出为0。

同理,第二多路选择器也是这个道理。

所谓的CPA,就是Carry Propagate Adder,进位传播加法器,实际上就是传统的加法器。

乘法的本质是加法,比如3*4,就是4个3相加,3+3+3+3。换算成二进制亦是如此,如下:

13*6=78

同理,如果是一个23位二进制数乘以一个16位二进制数,那么就会有16个二进制数相加。如果采用传统的加法,运算的速度肯定会很慢;如果采用CSA,最大限度的开发其中的并行性,则速度就会相对快一些。这也是本发明之所以选用CSA来实现硬件的原因。

综上,图11就是log2cosθ=(Ci+(-e))+(-(ai×f)),这里省略了减法转加法的那一步。

反对数部分采用8段等间距直线近似。对应的参数如表3所示:

表3 2frac近似直线参数表

  frac  k  l  frac  k  l  0~1/8  92/128  1024/1024  4/8~5/8  131/128  924/1024  1/8~2/8  101/128  1015/1024  5/8~6/8  143/128  864/1024  2/8~3/8  111/128  995/1024  6/8~7/8  155/128  792/1024  3/8~4/8  121/128  964/1024  7/8~8/8  169/128  695/1024

反对数部分的误差可表示为式(9):

exp_error=2frac-kifrac-li,i=0,1,L  7,(0≤frac<1)          (11)

误差曲线如图12所示。

图13是对下式的实现,

>2frac=~kifrac+li(i=0,1L7,0frac<1)>

>=frac+frac>>2+frac>>5+8388610frac[0,1/8)frac+frac>>2+frac>>5+frac>>7+8314881frac[1/8,1/4)frac+frac>>3+frac>>7+8151042frac[1/4,3/8)frac+frac>>4+frac>>7+7897089frac[3/8,1/2)frac+frac>>5+frac>>7+7569409frac[1/2,5/8)frac+frac>>3+frac>>7+7077889frac[5/8,3/4)frac+frac>>2+frac>>5+frac>>7+6488066frac[3/4,7/8)frac+frac>>2+frac>>4+frac>>7+5693440frac[7/8,1)>

这时,采用移位加法代替乘法。l用24bit定点数表示,最高位表示整数,其余部分表示小数。

同样,图13中通过多路选择器来表示,s1[6:0]是选通信号,s1[6:0]是由frac的高三位译码得到的。第一选择器的输入为B0~B7表示上式中的各个常数项,由frac的高三位直接选通;第二选择器的输入为frac>>7、选通信号是s1[1:0];第三选择器的输入为frac>>5、frac>>4、0,选通信号是s1[3:2];第四选择器的输入为frac>>3、frac>>2、选通信号是s1[6:4];还包括一个22位CSA加法器、一个23位CSA加法器、一个31位CSA加法器和一个31位CPA加法器。

例如,frac=3/16,frac的高三位为001,选通B1=8314881,frac∈[1/8,1/4),>2frac=frac+frac>>2+frac>>5+frac>>7+8314881,>由表4可得,s1[6:0]=0111111,即s1[6:4]=011,选通s1[3:2]=11,选通frac>>5;s1[1:0]=11,选通frac>>7。

其中,B0~B7表示各个段表达式中的常数项,s1[6:0]是由frac的高3位进行译码得到的,译码器如表4所示:

表4译码对照表

  frac[22:20]  000  001  010  011  100  101  110  111  s[6:0]  0111000  0111111  1010010  1110011  0001110  1100010  1001010  1000111

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号