<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于龍芯2F的Glibc庫優(yōu)化

          基于龍芯2F的Glibc庫優(yōu)化

          作者: 時(shí)間:2010-12-14 來源:網(wǎng)絡(luò) 收藏

          由于龍芯2F只支持小尾端的字符序,因此SHA算法首先將進(jìn)行運(yùn)算的字轉(zhuǎn)換為大尾端。原始實(shí)現(xiàn)中使用表達(dá)式x=((n24)| ((n&0xff00)8)|((n>>8)&0xff00)|(n>>24))進(jìn)行轉(zhuǎn)換,其中n為無符號的 32位整數(shù)。該轉(zhuǎn)換操作總共需要兩次與,四次移位與三次或運(yùn)算,我們對其
          進(jìn)行改進(jìn),采用二分方的思想,使用表達(dá)式n1=(n16)|(n>>16)和x=(((n1&0xff00ff00) gt;>8)|(n1&0xff00ff)8))。其中計(jì)算n1的表達(dá)式可以由編譯器編譯為一條循環(huán)移位指令,這樣改進(jìn)的實(shí)現(xiàn)共需要兩次與,三次移位與一次或運(yùn)算,省去了一次移位與兩次或運(yùn)算。
          算法接下來的操作是消息擴(kuò)散與迭代計(jì)算,計(jì)算公式分別如圖3和圖4所示。

          本文引用地址:http://www.ex-cimer.com/article/173058.htm


          d.JPG
          我們對其計(jì)算過程進(jìn)行層數(shù)為2的循環(huán)展開。對于迭代計(jì)算過程,循環(huán)展開之后還可以繼續(xù)進(jìn)行賦值傳遞優(yōu)化,減少運(yùn)算量和迭代次數(shù)。循環(huán)展開層數(shù)增加時(shí),循環(huán)次數(shù)減小,但增加了循環(huán)內(nèi)的計(jì)算量,寄存器的數(shù)目滿足不了中間結(jié)果的保存,需要讀寫內(nèi)存,反而造成性能的下降。經(jīng)過實(shí)驗(yàn)確定,層數(shù)為2是一個(gè)較好的選擇。
          表2是改進(jìn)前后SHA256算法的性能對比,取數(shù)據(jù)大小從64B到2kB倍增。

          e.JPG

          4 總結(jié)
          Glibc庫是Linux系統(tǒng)最底層的運(yùn)行庫,是所有應(yīng)用程序賴以執(zhí)行的基礎(chǔ)環(huán)境。本文基于龍芯2F平臺對Glibc庫中的字符串與內(nèi)存處理函數(shù)、數(shù)據(jù)轉(zhuǎn)換函數(shù)、哈希表查找函數(shù)以及加密函數(shù)進(jìn)行了代碼優(yōu)化,大部分函數(shù)的優(yōu)化比率達(dá)到30%以上,對龍芯2F平臺的整體運(yùn)行性能提升具有重要意義。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: C語言

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();