• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于多核ARM體系結(jié)構(gòu)的基礎(chǔ)函數(shù)優(yōu)化方法

      2018-05-30 01:26:13賀愛香顧乃杰蘇俊杰
      計算機(jī)工程 2018年5期
      關(guān)鍵詞:字符串體系結(jié)構(gòu)寄存器

      賀愛香,顧乃杰,蘇俊杰

      (1.中國科學(xué)技術(shù)大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027; 2.安徽新華學(xué)院 信息工程學(xué)院,合肥 230088)

      0 概述

      隨著嵌入式系統(tǒng)的發(fā)展,多核ARM微處理器[1]因其體積小、功耗低、成本低、性能高等特點很快占領(lǐng)了移動通信市場領(lǐng)域。Android[2]是運行于ARM架構(gòu)處理器之上的一款開源操作系統(tǒng)軟件,據(jù)市場研究公司Gartner 2016年上半年最新統(tǒng)計數(shù)據(jù)顯示,Android市場占有率為近九成[3]。Bionic[4]是Android系統(tǒng)中以C語言構(gòu)建的基礎(chǔ)函數(shù)庫,為系統(tǒng)提供系統(tǒng)接口和擴(kuò)展功能函數(shù)。在處理器的性能得到提高的情況下,程序充分利用處理器的性能,不但可以減少計算資源的浪費,還可以提高程序的響應(yīng)速度,因此對Bionic庫基礎(chǔ)函數(shù)進(jìn)行優(yōu)化對提升ARM平臺性能與用戶體驗有很大作用[5]。針對ARM體系結(jié)構(gòu)進(jìn)行優(yōu)化是非常重要的工作,很多學(xué)者和研究人員利用各種優(yōu)化方法積極探索該問題。為了高效合理地使用寄存器和存儲器,提高程序的執(zhí)行效率,文獻(xiàn)[6]對ARM體系結(jié)構(gòu)提出了減小漢明距離、使用位操作指令、正確選擇流程控制語句和壓縮代碼密度等優(yōu)化方法。文獻(xiàn)[7]基于ARM嵌入式系統(tǒng)充分利用軟硬件資源,提出了循環(huán)展開、避免使用除法、利用條件執(zhí)行等C程序優(yōu)化方法。文獻(xiàn)[8]使用128位訪存指令、循環(huán)展開等方法,結(jié)合龍芯3A處理器將BLAS庫性能提高了6倍。文獻(xiàn)[9]對Bionic庫中的熱點函數(shù)進(jìn)行了匯編優(yōu)化,使得Android系統(tǒng)整體性能得到了提升。

      基于以上研究,本文在對Bionic庫中字符串和內(nèi)存處理函數(shù)進(jìn)行分析的同時,結(jié)合多核ARMv8體系結(jié)構(gòu)特征[10],提出不同的優(yōu)化方案,包括整字處理[11]、循環(huán)展開[12]、特殊指令[13]等優(yōu)化方法,使得Bionic庫中常用基礎(chǔ)函數(shù)的性能在ARM Cortex-A72平臺上有不同程度的提升。

      1 背景知識

      1.1 ARM體系結(jié)構(gòu)

      ARM是一類微處理器的統(tǒng)稱[14],基于ARM內(nèi)核的芯片統(tǒng)稱為ARM芯片。ARM體系結(jié)構(gòu)采用精簡指令集,具有定長指令、大量的寄存器、獨特的裝載/保存(Load/Store)等特點[15]。ARM公司從1991年推出ARM1處理器到現(xiàn)在,其體系結(jié)構(gòu)已經(jīng)從ARMv1發(fā)展到現(xiàn)在的ARMv8,每一個體系架構(gòu)版本都定義了一套指令集和相應(yīng)的功能框架,并且每個結(jié)構(gòu)體系向后兼容,圖1為ARMv5至ARMv8的架構(gòu)比較[16]?;贏RMv8的體系結(jié)構(gòu)產(chǎn)品不僅主導(dǎo)了移動通信領(lǐng)域,而且在無人機(jī)控制系統(tǒng)[17]、汽車導(dǎo)航[18]、智能家居[19]等智能硬件控制系統(tǒng)中應(yīng)用廣泛,本文是基于ARMv8最新架構(gòu)的研究。

      圖1 ARMv5至ARMv8架構(gòu)比較

      ARMv8提供一種更加清晰的架構(gòu),同時考慮到將來的發(fā)展趨勢采用一種全新的架構(gòu)來實現(xiàn),是目前最新的架構(gòu)[20]。ARMv8-A系列面向尖端的基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用。ARMv8的架構(gòu)繼承以往ARMv7與之前處理器技術(shù)的基礎(chǔ),除了支持現(xiàn)有的16 bit/32 bit的Thumb2指令集外,也向前兼容現(xiàn)有的A32(ARM 32 bit)指令集和NEON指令集,并擴(kuò)充了現(xiàn)有的A32(ARM 32 bit)和T32(Thumb2 32 bit)指令集。ARMv8采用基于64 bit的AArch64架構(gòu),新增了A64(ARM 64 bit)指令集,解決了ARMv7架構(gòu)遺留的虛擬地址問題,定義了AArch64和AArch32兩套運行環(huán)境(稱作Execution state),分別執(zhí)行64 bit和32 bit指令集,軟件可以在需要的時候,切換Execution state。AArch64架構(gòu)使用新的概念(exception level),重新解釋了processor mode、privilege level等概念。在ARMv7安全擴(kuò)展的基礎(chǔ)上,新增了CRYPTO(加密)模塊,支持安全相關(guān)的應(yīng)用需求[21]。在ARMv7虛擬化擴(kuò)展的基礎(chǔ)上,提供完整的虛擬化框架,從硬件上支持虛擬化[22]。其架構(gòu)框圖如圖2所示。

      圖2 ARM Cortex-A72處理器架構(gòu)

      1.2 NEON技術(shù)

      現(xiàn)代計算機(jī)2個大主流體系結(jié)構(gòu)為X86和ARM,為了高效利用硬件資源,均支持單指令多數(shù)據(jù)流 (Single Instruction Multiple Datastream,SIMD)技術(shù)[23]。NEON是ARM Cortex-A系列處理器新增的一個運算部件,使得每次運算可達(dá)到128位,擴(kuò)展了SIMD,能更快速地處理多媒體數(shù)據(jù),使用戶體驗更流暢[24]。NEON具有128位寬的運算部件,可減少對內(nèi)存的訪問,從而提高數(shù)據(jù)處理速度。

      NEON指令可批處理SIMD;通過對齊和非對齊數(shù)據(jù)訪問,寄存器被視為同一數(shù)據(jù)類型的元素的矢量;數(shù)據(jù)類型可為8 位、16 位、32 位、64位有/無符號整型、32位單精度和64位雙精度浮點型;指令在所有通道中執(zhí)行同一操作。如圖3所示,顯示了UADD16 Q0,Q1,Q2指令操作,實現(xiàn)了對寄存器Q1和Q2中8路16 bit的并行相加,并將最后結(jié)果保存到R0中。

      圖3 8路16 bit整數(shù)加法運算

      1.3 Bionic

      Bionic是Google公司專為Android系統(tǒng)開發(fā)的基礎(chǔ)函數(shù)庫,提供C/C++標(biāo)準(zhǔn)庫功能。GNU/Linux以及其他類Unix系統(tǒng)的基礎(chǔ)函數(shù)庫最常用的就是Glibc。與Glibc相比,Bionic是輕量級C庫,大小僅為200 KB,是Glibc體積的一半,這意味著Bionic占用低內(nèi)存[25]。

      Bionic庫中包含字符串與內(nèi)存處理函數(shù)、數(shù)學(xué)計算函數(shù)、排序與查找、字符串加密等基礎(chǔ)工具型函數(shù)。本文通過大量實驗,著重優(yōu)化Bionic 庫中的memset、strcmp、strncmp、strcpy、strncpy、memcpy、memmove、strlen、strcat、strdup等函數(shù)。

      2 函數(shù)優(yōu)化

      針對多核ARMv8體系結(jié)構(gòu),考慮使用整字處理(合并字節(jié))、特殊指令、循環(huán)展開、指令調(diào)度等方法進(jìn)行優(yōu)化。本節(jié)將探討如何使用這些優(yōu)化技術(shù),來實現(xiàn)Bionic庫中熱點函數(shù)的優(yōu)化。

      2.1 函數(shù)介紹

      在Bionic庫函數(shù)中,字符串是通過一段連續(xù)的內(nèi)存來表示,所以字符串的操作與內(nèi)存操作基本一致。兩者的區(qū)別在于字符串是用空字符’

      孟村| 万源市| 博湖县| 遂川县| 新田县| 武宣县| 富蕴县| 营口市| 阜康市| 平南县| 扶绥县| 高安市| 济南市| 峡江县| 西贡区| 洛川县| 仁怀市| 永城市| 河源市| 马山县| 六枝特区| 天等县| 衢州市| 额尔古纳市| 南皮县| 丹凤县| 高要市| 宝山区| 同心县| 松滋市| 高清| 潮安县| 逊克县| 那曲县| 大连市| 大方县| 绥棱县| 惠安县| 武隆县| 望谟县| 嵊泗县|