新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TMS320C6000嵌入式系統優化編程的研究

        TMS320C6000嵌入式系統優化編程的研究

        作者: 時間:2009-03-19 來源:網絡 收藏

        下面例子是算法中計算幀能量的函數,其中包含兩個單循環體。進行時,首先要確定循環的次數。對于循環次數是變量的情況,器不進行并行;其次盡量減少數據存取次數,例如以32位存取指令對16位數據進行存取,可以節省一半的存取周期。仔細觀察C代碼,會發現兩次循環次數相同。第二個循環要用到第一個循環的結果,因此可以將兩個循環合并在一起,這樣就避免了在第二個循環中再從存儲器中取結果,減少了一半的Load操作。

          long Comp_En( short *Dpnt)

            { int i ;

          long Rez ;

          short Temp[60] ;

          for ( i = 0 ; i 60 ; i ++)

          Temp[i] = shr( Dpnt[i], (short) 2) ;

          Rez=(long) 0 ;

          for (i=0; i 60; i ++)

           Rez=L_mac(Rez, Temp[i], Temp[i]);

          return Rez ;

          }

        相應的線性匯序如下:

          .global _Comp_En ;函數名定義,對c變量前加__Comp_En .cproc Dpnt;函數頭定義,Dpnt是參數

          .reg Rez,Rez1,Rez2,I ;寄存器定義,不必考慮實際的寄存器分配

          .reg t1,t2,x1,c1,m1,m2

        zero Rez

        zero Rez1

        zero Rez2

        mv Dpnt,c1

        mvk 30,i ;確定循環次數。因為用LDW代替LDH,循環次數減少一半。

        loop1 .trip 30

        ldw *c1++,x1

        shl x1,16,t1

        shr t1,2,t1

        shr x1,2,t2 ;將兩個循環合在一起,又減少了一半的從內存取數據的時間。

        smpyh t1,t1,m1

        smpyh t2,t2,m2

        sadd Rez1,m1,Rez1

        sadd Rez2,m2,Rez2

        [i] sub i,1,i ;循環計數器從30遞減

        [i] b loop1

        sadd Rez1,Rez2,Rez

        .return Rez

        .endproc

        消耗時間(時鐘周期):C語言為32971;線性匯編語言為93。

        2.3 使用線性匯編改寫復雜函數中的循環體

          當函數的邏輯關系復雜,判斷、跳轉、函數調用情況特別多時,上面方法的效果就會大打折扣。這時可以使用線性匯編將其中的循環部分改寫成一個函數,以優化后的函數調用代替循環部分,而不是優化整個復雜函數。

          高速數字信號處理器件的應用范圍越來越廣,特別是在移動通信領域中,軟件無線電、智能天線等新技術的實現都需要強大的實時數字信號處理的支持。系列完全可以滿足此類要求。但目前對于并行技術的軟硬件開發還處在摸索階段,如何充分利用高速的資源,是這方面的重點。本文了最新推出的的優化策略,從工程和的角度總結出一套既能滿足實時性又能保證開發時效性的實用的優化方法,以供分饗。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 潼南县| 建瓯市| 东明县| 木里| 广南县| 炎陵县| 上杭县| 沁水县| 青岛市| 石景山区| 剑阁县| 桑日县| 乌鲁木齐县| 东海县| 齐河县| 中江县| 泸西县| 长宁县| 江津市| 博爱县| 闵行区| 额尔古纳市| 临城县| 贞丰县| 巩义市| 东海县| 突泉县| 昭通市| 鄂州市| 乐亭县| 巧家县| 襄垣县| 凤凰县| 本溪| 彭山县| 海原县| 灌南县| 花垣县| 尖扎县| 平山县| 新巴尔虎左旗|