发明名称 一种应用于GPU中的幂指数运算装置和运算方法
摘要 本发明涉及集成电路领域,特别是公开了一种应用于GPU中的幂指数运算硬件装置和运算方法:第一步,计算log2cosθ:第二步,计算xlog2cosθ;第三步,计算2mul_result;第四步,得到2mul_result之后,就可以用IEEE754单精度浮点数表示cosxθ的近似值。与现有技术相比,本发明能够能够在满足嵌入式系统因为空间大小和功耗而受限制的计算能力的同时,快速而又比较准确的图形处理单元完成Phong模型中的高光计算,为集成电路的设计提供了具有更好的图形处理能力的嵌入式系统设计。
申请公布号 CN102609236A 申请公布日期 2012.07.25
申请号 CN201210019688.9 申请日期 2012.01.21
申请人 天津大学 发明人 魏继增;李炳超;常轶松;郭炜;孙济洲
分类号 G06F7/552(2006.01)I 主分类号 G06F7/552(2006.01)I
代理机构 天津市北洋有限责任专利代理事务所 12201 代理人 李素兰
主权项 一种应用于GPU中的幂指数运算方法,其特征在于,该方法包括以下步骤:第一步,计算log2cosθ,数学表达式为: <mrow> <msub> <mi>log</mi> <mn>2</mn> </msub> <mi>cos</mi> <mi>&theta;</mi> <mo>=</mo> <mn>127</mn> <mo>-</mo> <mi>e</mi> <mo>-</mo> <msub> <mi>log</mi> <mn>2</mn> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>+</mo> <mi>f</mi> <mo>)</mo> </mrow> <mrow> <mo>(</mo> <mn>0</mn> <mo>&le;</mo> <mi>f</mi> <mo>&lt;</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mover> <mrow> <mo>=</mo> <mi></mi> </mrow> <mo>~</mo> </mover> <mn>127</mn> <mo>-</mo> <mi>e</mi> <mo>-</mo> <msub> <mi>a</mi> <mi>i</mi> </msub> <mi>f</mi> <mo>-</mo> <msub> <mi>b</mi> <mi>i</mi> </msub> <mrow> <mo>(</mo> <mi>i</mi> <mo>=</mo> <mn>0,1</mn> <mi>L</mi> <mn>7</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mo>=</mo> <msub> <mi>C</mi> <mi>i</mi> </msub> <mo>-</mo> <mi>e</mi> <mo>-</mo> <msub> <mi>a</mi> <mi>i</mi> </msub> <mi>f</mi> </mrow>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,则有 <mrow> <msup> <mn>2</mn> <mrow> <mn>1</mn> <mo>+</mo> <mi>fra</mi> <mo>_</mo> <mi>part</mi> </mrow> </msup> <mo>=</mo> <msup> <mn>2</mn> <mi>frac</mi> </msup> <mover> <mrow> <mo>=</mo> <mi></mi> </mrow> <mo>~</mo> </mover> <msub> <mi>k</mi> <mi>i</mi> </msub> <mi>frac</mi> <mo>+</mo> <msub> <mi>l</mi> <mi>i</mi> </msub> <mo>=</mo> <mn>0,1,2</mn> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mn>7</mn> <mrow> <mo>(</mo> <mn>0</mn> <mo>&le;</mo> <mi>frac</mi> <mo>&lt;</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>将式(2)的计算结果保留小数点后面的23位,记做exp_fra_result;其中,计算2frac,数学表达式为: <mrow> <msup> <mn>2</mn> <mi>frac</mi> </msup> <mover> <mrow> <mo>=</mo> <mi></mi> </mrow> <mo>~</mo> </mover> <msub> <mi>k</mi> <mi>i</mi> </msub> <mi>frac</mi> <mo>+</mo> <msub> <mi>l</mi> <mi>i</mi> </msub> <mrow> <mo>(</mo> <mi>i</mi> <mo>=</mo> <mn>0,1</mn> <mi>L</mi> <mn>7,0</mn> <mo>&le;</mo> <mi>frac</mi> <mo>&lt;</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> <mrow> <mo>=</mo> <mfenced open='{' close=''> <mtable> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>2</mn> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>5</mn> <mo>+</mo> <mn>8388610</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>0,1</mn> <mo>/</mo> <mn>8</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>2</mn> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>5</mn> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>8314881</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>1</mn> <mo>/</mo> <mn>8,1</mn> <mo>/</mo> <mn>4</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>3</mn> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>8151042</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>1</mn> <mo>/</mo> <mn>4,3</mn> <mo>/</mo> <mn>8</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>4</mn> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>7897089</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>3</mn> <mo>/</mo> <mn>8,1</mn> <mo>/</mo> <mn>2</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>5</mn> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>7569409</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>1</mn> <mo>/</mo> <mn>2,5</mn> <mo>/</mo> <mn>8</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>3</mn> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>7077889</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>5</mn> <mo>/</mo> <mn>8,3</mn> <mo>/</mo> <mn>4</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>2</mn> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>5</mn> <mo>+</mo> <mover> <mi>frac</mi> <mo>&OverBar;</mo> </mover> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>6488066</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>3</mn> <mo>/</mo> <mn>4,7</mn> <mo>/</mo> <mn>8</mn> <mo>)</mo> </mtd> </mtr> <mtr> <mtd> <mi>frac</mi> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>2</mn> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>4</mn> <mo>+</mo> <mi>frac</mi> <mo>></mo> <mo>></mo> <mn>7</mn> <mo>+</mo> <mn>5693440</mn> </mtd> <mtd> <mi>frac</mi> <mo>&Element;</mo> <mo>[</mo> <mn>7</mn> <mo>/</mo> <mn>8,1</mn> <mo>)</mo> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>第四步,得到exp_fra_result之后,用IEEE754单精度浮点数表示cosxθ的近似值。
地址 300072 天津市南开区卫津路92号