焦永
摘要:超越函數(shù)計算在高性能微處理器、DSP以及GPU的設計中均會涉及,對數(shù)是其中比較重要的一種運算。目前的做法一般是采用多項式展開或者查表法:采用多項式展開法達到要求的精度,需要計算的乘法和加法非常多;若采用直接查表法,所需要的ROM資源將非常多。該文提出了一種高效的單精度浮點對數(shù)運算的實現(xiàn)方法,采用展開式和查表相結合的方法,可以實現(xiàn)對任意底數(shù)的對數(shù)運算,同時在運算器數(shù)量和ROM資源數(shù)量間達到平衡。
關鍵詞:單精度浮點;對數(shù);查表
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)01-0235-02
Abstract: Transcendental function computing is used in high-performance microprocessors, DSP and GPU, the logarithm is one of the important operations. Most implementation is generally used polynomial expansion or look-up table method: achieving high precision accuracy needs a lot of multiplication and addition operations while using polynomial expansion method; the ROM resources will be very much while using direct look-up table method. This paper presents an efficient single-precision floating-point logarithm algorithm, using the polynomial expansion and look-up table combination, which can achieve any base of the logarithm, while the resources of ALU and ROM are balanced.
Key words: single precision floating-point; logarithm; lookup
1 概述
單精度對數(shù)運算在高性能微處理器、DSP和GPU中經(jīng)常使用到。硬件實現(xiàn)對數(shù)運算的方法一般是多項式展開法或者查表法,多項式展開法需要使用的運算器(浮點乘法、加法)數(shù)量非常多;查表法需要使用的ROM資源非常多,本文采用一種多項式展開和查表相結合的算法,實現(xiàn)了對任意底數(shù)的對數(shù)運算,同時在運算器數(shù)量和ROM資源數(shù)量間達到平衡。
2 IEEE 754單精度浮點數(shù)據(jù)格式
IEEE754標準[1]定義了單精度32位和雙精度64位浮點數(shù)的格式。32位IEEE754單精度標準值中,第一位是符號位,其后8位用來存放指數(shù),最后23位用來存放小數(shù)尾數(shù),如圖1所示。
在IEEE754單精度浮點標準中,最高位為符號位(0為正,1為負),階碼共8位,階碼=階碼的真值+7fH,尾數(shù)共23位,進行了歸一化,以產(chǎn)生一個1.f格式的數(shù),f是小數(shù)部分,占用分配的23位。因為規(guī)格化的數(shù)最左一位總是1,所以不需要存儲該位,在該格式中它是隱式的。
3 單精度浮點對數(shù)運算算法
設,其中x為單精度浮點數(shù)且x>0,n>0且n≠1,求y。
根據(jù)對數(shù)的運算性質(zhì)可以將y寫成,n為外部輸入的值,可以將輸入常數(shù)n變?yōu)檩斎氤?shù),那么問題就轉變?yōu)橛嬎?,的計算采用多項式展開和查表相結合的算法。
對于單精度浮點數(shù)(其中),那么:
E為x的指數(shù)部分,容易提取,ln2為常數(shù),所以問題變?yōu)橛嬎恪?/p>
根據(jù)泰勒展開公式[2]:設n是一個正整數(shù),如果定義在一個包含a的區(qū)間上的函數(shù)f在a點處n+1次可導,那么對于這個區(qū)間上的任意x都有,其中的多項式稱為函數(shù)在a處的泰勒展開式,是泰勒公式的余項且是的高階無窮小。
若要使結果保證單精度浮點數(shù)的精度,即24位小數(shù),那么需滿足,不妨設,其中,,此時可保證(此處未考慮浮點乘法和加法的精度損失,實際結果的誤差可能會超過),所以原計算可以轉換成計算,下面的問題是計算和。
首先計算,由于a只有8位小數(shù)(二進制),擬采用查表法,預先計算好1.00000000~1.11111111的自然對數(shù)值(單精度浮點數(shù)),將其存儲在32×256的ROM中。
再計算,同樣采用查表法,預先計算好1.00000000~1.11111111的倒數(shù)值(單精度浮點數(shù)),將其存儲在32×256的ROM中,其余的就是浮點加法和乘法運算。
4 硬件實現(xiàn)
根據(jù)前面對算法的描述,將該算法的硬件實現(xiàn)結構如圖2所示。
根據(jù)硬件實現(xiàn)結構,計算浮點對數(shù)運算的模塊需要的邏輯資源為:3個單精度浮點加法、3個單精度浮點乘法、2個256×32(bit)=1KB的ROM。
將該算法用Verilog語言描述,在(1,2)區(qū)間生成一些隨機測試激勵(為便于比較,將輸入和輸出的單精度浮點數(shù)轉化成十進制小數(shù)[3])在Modelsim[4]環(huán)境下進行仿真,仿真波形如圖3所示,其中輸入數(shù)據(jù)、實際結果、運行結果和誤差見表1所示(以2為底數(shù))。
單精度浮點數(shù)的精度為2-23=1.19×10-7,由仿真結果可以看出,在硬件實現(xiàn)的計算結果與真實結果相比,誤差都不會超過1×2-23,能夠滿足單精度浮點數(shù)的精度要求。
5 結論
本文針對高性能微處理器、DSP、GPU設計中用到的單精度浮點對數(shù)運算的實現(xiàn),提出一種基于多項式展開和查表法相結合的硬件實現(xiàn)算法,該算法可以實現(xiàn)任意底數(shù)的對數(shù)運算,將該算法使用Verilog語言描述,并進行仿真,在運算精度、硬件資源消耗方面均達到較理想的效果。
參考文獻:
[1]the Institute of Electrical and Electronics Engineers, EEE Standard for Binary Floating-Point Arithmetic [S], July 26, 1985
[2] 同濟大學數(shù)學系.高等數(shù)學[M].6版.北京:高等教育出版社,2007.
[3] https://www.h-schmidt.net/FloatApplet/IEEE754.html [OL]
[4] https://www.mentor.com/company/higher_ed/modelsim-student-edition [OL]