新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 采用硬件加速發(fā)揮MicroBlaze處理能力

        采用硬件加速發(fā)揮MicroBlaze處理能力

        作者:Karsten Trott博士 賽靈思(德國慕尼黑) 現(xiàn)場應用工程師 時間:2010-03-09 來源:電子產(chǎn)品世界 收藏

          案例2:高速浮點性能

        本文引用地址:http://www.104case.com/article/106702.htm

          現(xiàn)在我們給出另一個 算法加速示例。一個客戶聲稱他的浮點處理在系統(tǒng)上運行非常慢。他使用的算法可采用簡單的環(huán)路同時得出幾個結(jié)果。

        for (i=0;i<512;i++) {
           f_sum += farr[i];
           f_sum_prod += farr[i] * farr[i];
             f_sum_tprod += farr[i] *
        farr[i] * farr[i];
          f_sqrt + =
        sqrt(farr[i]);
          if (min_f > farr[i]) { min_f =
        farr[i]; }
          if (max_f < farr[i]) { max_f =
        farr[i]; }
        }

          所有數(shù)值均是單精度浮點值。我們首先想到的是最基礎的一個問題:浮點單元 () 激活了嗎?檢查項目設置后,我們發(fā)現(xiàn)仍然處于未啟用狀態(tài)。這就是為什么永遠無法計算出這幾個數(shù)的原因。可在 屬性設置中加以激活。

          FPU支持共有兩種。我們也選擇擴展FPU (Extended FPU)來支持求平方根運算。現(xiàn)在,在50MHz 的MicroBlaze上需要 1,108,685個周期才能完成 512個值的全部循環(huán)。查看生成的匯編程序代碼后,可以了解到創(chuàng)建平方根是仍然在使用數(shù)學庫(Math-lib)功能。其在數(shù)學功能中的定義為:

          double sqrt(double);

          不過客戶使用平方根函數(shù)僅為處理浮點數(shù)值。因此,MicroBlaze FPU定義了一個新的函數(shù)來取代原來的函數(shù),解決這個問題:

          float sqrtf(float);

          把表達式f_sqrt += sqrt(farr[i])變?yōu)閒_sqrt += sqrtf(farr[i]),就會調(diào)用MicroBlaze內(nèi)部的FPU內(nèi)部平方根功能。現(xiàn)在執(zhí)行代碼只需要35,336個周期。特別是與第一個根本沒有使用FPU的方案相比,我們再次通過小小的調(diào)整就實現(xiàn)了31倍的提升。在相同的執(zhí)行時間內(nèi),可能需要大約1.5GHz的CPU才能給出上述這些結(jié)果。



        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 上虞市| 正镶白旗| 布拖县| 敦化市| 泽库县| 陈巴尔虎旗| 铜鼓县| 舟曲县| 抚远县| 易门县| 东阳市| 通山县| 柳江县| 河池市| 巴中市| 渭南市| 观塘区| 瑞丽市| 临武县| 东乌珠穆沁旗| 云南省| 隆安县| 灯塔市| 康乐县| 南昌县| 双城市| 南川市| 安远县| 罗城| 罗山县| 同心县| 仙游县| 乐昌市| 银川市| 新河县| 大同市| 准格尔旗| 蓬莱市| 永丰县| 文登市| 南澳县|