女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

幾種架構中代碼壓縮技術的實現進行比較分析

GReq_mcu168 ? 來源:cc ? 2019-02-13 16:28 ? 次閱讀

對于嵌入式軟件而言,代碼尺寸是越小越好。壓縮代碼以適應受到成本或空間限制的存儲子系統已經成為嵌入式系統開發的一項重要事務。 ARM、MIPS、IBM以及ARC都提供了降低存儲器占用的技術,本文將對這幾種架構中代碼壓縮技術的實現進行比較分析。

如今,存儲子系統的成本高于微處理器已不再稀奇。因此,選擇一款能節約存儲成本的處理器就變得很有意義。編寫緊湊的代碼只是事情的一個方面,而處理器的指令集對存儲器的消耗同樣影響很大。對于代碼密度很差的處理器而言,無論怎樣絞盡腦汁地去壓縮你的C源代碼都于事無補。如果你關注存儲器的消耗,選擇恰當的處理器并精心調整代碼是明智的。

并不是所有的處理器都擁有或需要代碼壓縮,只有32位的RISC(精簡指令集計算機)處理器需要代碼壓縮,因為RISC處理器代碼密度較差。RISC處理器在過去是設計用于通用計算機和工作站,在其設計時認為存儲器價格便宜。盡管存儲器價格可能便宜,但如果能占用更少的存儲器不是更便宜嗎?對于蜂窩電話以及其他成本控制嚴格的嵌入式系統應用而言,在RAMROM上5美元的成本差異,就能導致量產時利潤的巨大差別。通常,存儲器的大小是固定的,而產品的功能特性卻各異。緊湊的目標代碼意味著可以實現更多的自動撥號、更好的語音識別能力,或者可能是更清晰的屏幕顯示。

在32位嵌入式處理器中,ARM、MIPS以及PowerPC曾是首先尋找出降低其存儲器消耗、提高代碼密度方法的幾種處理器。更早一些的處理器,如摩托羅拉的68k系列以及英特爾的x86系列,并不需要代碼壓縮。事實上,其標準代碼密度都比RISC處理器的代碼壓縮模式還要高。

易于使用的Thumb技術

我們先從ARM的代碼壓縮方案(Thumb)講起,因為其使用廣泛、有很好的支持,是一個典型處理器代碼壓縮方案,并相當簡潔、有效。

Thumb實際上是添加到ARM的標準RISC指令集之上的獨立指令集。在你的代碼中,你可以通過一條模式切換指令在這兩種指令集之間進行切換。Thumb指令集架構(Instruction Set Architecture, ISA)是由大約36條16位指令組成,僅靠這些指令是完成不了太多任務的,但Thumb指令集包括了基本的加法、減法、循環移位以及跳轉指令。通過使用這些較短的指令替換ARM標準的32位指令,可以將某些代碼的規模減小大約20%到30%。但有一些問題需要引起注意:

首先,Thumb代碼和標準ARM代碼不能混雜使用,必須顯式地在兩種模式間進行切換,就好像Thumb是一套完全不同的指令集(實際上也是)。這迫使程序員將所有的16位代碼與32位代碼分開并隔離到獨立的模塊中。

其次,由于Thumb是經過簡化和精簡的指令集架構,在Thumb模式中無法完成所有你希望的工作。Thumb模式無法進行諸如處理中斷、長跳轉、原子存儲器(atomic memory)操作,或協處理器操作等。Thumb有限的指令意味著僅對基本的算術和邏輯操作有用,其他的任何工作必須使用ARM的標準32位指令集來完成。

Thumb的限制不僅表現在指令集上,當處于Thumb模式中,ARM處理器將僅有8個寄存器(而不是16個),這些寄存器無法像標準模式下ARM代碼那樣進行條件執行和移位或循環移位操作。在標準ARM代碼和Thumb代碼間進行參數傳遞并不困難,只要將參數放到堆棧中或通過處理器的前8個寄存器就可以了。

從標準模式到Thumb模式之間的來回切換也要消耗時間,而且還要增加代碼。此外,還需要幾十個前導(preamble)以及后同步指令(postamble)來組織指針并清空CPU的流水線。如果在Thumb模式中運行的代碼小于幾十條指令,就不值得為之付出這樣的開銷。

最后,Thumb還對于性能有著少許的影響。通常,使用Thumb指令對代碼進行壓縮會導致代碼運行速度降低大約15%,這主要是由于在16位模式和32位模式間切換所引起的。Thumb指令還不如32位的標準指令靈活,因此,和32位代碼相比,常常需要更多的指令來完成同樣的工作。從積極的一方面來說,由于其指令長度只有32位指令集的一半,Thumb使得緩存的使用效率更高。

如果任務能夠在這些限制下完成,Thumb可以節約不少成本。Thumb技術已經得到每一款ARM處理器的支持,無論用戶使用與否,多數ARM編譯器以及匯編程序都支持Thumb指令集。因此,采用Thumb的體驗應該相當輕松。

MIPS處理器

理解了Thumb技術后,MIPS16e就沒什么新奇的了。一些MIPS處理器中增加了另外的16位指令集,與ARM系統非常類似。MIPS16e指令集包括了一組16位的標準MIPS算法、邏輯以及跳轉指令的簡化版本。其使用和Thumb一樣,也需要在標準模式和MIPS16e模式之間來回切換,這也將導致付出時間和增加代碼的開銷。除非能在“壓縮”模式上運行相當長時間,否則沒有必要進行模式切換。其代碼壓縮效率和ARM差不多,對于多數程序而言,也是20%到30%。

MIPS16e和Thumb都不能對代碼進行真正的壓縮,它們只是對部分指令提供了可替換的操作碼,而且得到的壓縮比是依賴于短操作碼和長操作碼的總長度的比值。也就是說,依賴于代碼所完成的任務,諸如操作系統和中斷處理例程等系統級代碼根本就不能使用16位指令,因此不能獲得代碼壓縮效果。一般的算法,只要不使用任何大操作數,就能得到很好的壓縮效率。最后,別忘了數據是無法進行壓縮的,只有代碼能夠被壓縮。如果你應用代碼中包括了大量的靜態數據結構,所能得到的總存儲器節約是非常小的。還有,15%的性能損失也許很不值得。另一方面,MIPS16e和Thumb都是免費的(假定你的處理器已經包含了它們),選用它們的成本非常低。

PowerPC的CodePack技術

值得提前說明的是,IBM的CodePack方法是各種代碼壓縮技術中最復雜的。與Thumb和MIPS16e不同,CodePack系統是真正對運行代碼進行壓縮,就好像在PowerPC軟件中運行WinZip。CodePack會分析并壓縮整個程序,生成的用戶代碼必須在運行中解壓縮并執行壓縮版本。盡管很復雜,CodePack和其它技術一樣提供20%到30%的空間節省。

CodePack是一項很有吸引力的技術。在使用該技術時,只須和平常一樣使用標準工具編譯嵌入式PowerPC代碼就行,CodePack甚至對已有的代碼也能使用(無論有沒有源代碼)。在將代碼寫入ROM或裝入磁盤之前,運行CodePack壓縮工具對代碼進行壓縮。壓縮工具會分析代碼指令的分布并生成一對專門針對這個程序代碼的鍵值。當運行壓縮后的代碼時,擁有CodePack功能的處理器使用這一對鍵值來在運行中解開壓縮的代碼,就好像直接運行壓縮后的代碼。解壓縮會對處理器的流水線產生很小的延遲,但是其影響被取指延遲以及其它延遲所掩蓋。對于絕大多數應用,CodePack帶來的性能影響是可以忽略的。

但是,CodePack還有一些其它的影響。由于每一個壓縮的程序都有其單獨的壓縮鍵值,CodePack本質上既是壓縮系統也是加密系統。沒有鍵值,無論你自己還是其它任何人都無法運行相應的程序。如果丟失了或者未獲得相應的鍵值,壓縮后的程序只是一堆無用的亂碼,這也意味著壓縮后的PowerPC程序不是二進制代碼兼容的。除非同時包括其解壓縮鍵值,否則無法輕易地和其它系統交換壓縮后的程序。這會使嵌入式系統軟件的現場分配稍微有些復雜。

另外,CodePack為每個程序生成兩個鍵值是因為指令的高16位和低16位是分別進行壓縮的。IBM的工程師發現每一條PowerPC指令的高半字(操作碼就在其中)和低半字(其內容通常為操作數、偏移量或掩碼)的分布頻度是不一樣的。對它們分別使用不同的壓縮算法會使壓縮效果比僅使用任何單一算法要好,這就是CodePack對程序所做的事。

ARCompact

ARC International公司又采用了另外的代碼壓縮方法。因為ARCtangent處理器有用戶可定義的指令集,ARC(及其用戶)可以對指令集進行隨心所欲的修改。作為ARCompact,ARC公司決定加入一組16位指令來改進其處理器的代碼密度。

而ARCompact與Thumb以及MIPS16e的區別在于可以將16位代碼和32位代碼任意混雜。由于沒有模式切換,代碼中任意分布的少許16位指令無須為之付出什么開銷。在任何可能的情況下,ARC的編譯器的默認配置會產生16位操作(為了強制編譯器生成32位代碼或與舊的處理器保持兼容,你可以關掉這個功能)。

ARC可以混合不同長度代碼而不必付出相應的開銷,是因為其指令架構要比ARM和MIPS新。那些RISC架構的指令集(包括PowerPC)在指令字中沒有指明指令長度的位。諸如ARC或Tensilica的新偽RISC架構,以及像x86和68k舊的架構擁有這些位。無論是出于無意還是遠見,變長度指令架構因為更緊湊的代碼而具優勢。

Thumb的改進版--Thumb-2

ARM對其代碼壓縮系統進行了改造并發布了Thumb-2。Thumb-2并不是Thumb的升級,相反,它是另起爐灶,并且可以完全代替Thumb和原先的ARM指令集。Thumb-2有些類似ARCompact或摩托羅拉的68k,可以無需模式切換就運行16位與32位混合代碼。總的來說,Thumb-2提供的代碼壓縮效率要略差,但其性能損失也較小。

為了做到這一點,ARM需要在其操作碼映射中找到一個突破口(hole),他們在BL指令(條轉并連接指令,是Thumb和ARM模式之間切換的指令)中找到了需要的突破口。在原有的指令集中,BL指令有一些位沒有使用,這些原先未定義的位給全新的指令集提供了切換入口。其編碼確實不怎么樣,但確實很有效。

Thumb-2最大的優勢在于它是一套完整的指令集,程序無需切換回“標準”32位ARM模式,原先Thumb模式的限制再也沒有了。程序現在可以處理中斷、設置MMU、管理緩存,和真正的微處理器并沒什么不同。

Thumb-2還是需要損失一定的性能。盡管沒有了模式切換開銷,與標準ARM代碼相比,它還是要花費多一些的Thumb-2指令來完成特定的任務。對于ARM處理器而言,這些額外的指令(以及額外的周期)會使速度降低大約15%到20%。

未來的ARM處理器最終將只運行Thumb-2代碼。由于它用一套單一的更多壓縮指令的指令集有效地取代了ARM和Thumb指令集,為什么不會最終徹底取代它們呢?但問題是ARM的軟件兼容性怎么辦?直到現在,所有的ARM處理器(除了Intel的XScale)都是二進制兼容。盡管支持Thumb-2的新型處理器將能運行現有的ARM和Thumb代碼,但反之則不行。當Thumb-2廣泛推廣后,它將創建一套單獨但等價的軟件庫。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5141

    文章

    19542

    瀏覽量

    315181
  • 代碼
    +關注

    關注

    30

    文章

    4888

    瀏覽量

    70274

原文標題:幾種主流嵌入式架構的代碼壓縮技術

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    高速比較器的幾種典型應用

    高速比較器的幾種典型應用
    的頭像 發表于 03-28 17:40 ?327次閱讀
    高速<b class='flag-5'>比較</b>器的<b class='flag-5'>幾種</b>典型應用

    嵌入式系統中的代碼優化與壓縮技術

    32位指令轉換為16位Thumb指令,實現代碼的初步壓縮。 數據壓縮:對嵌入式系統中的常量數據、字符串等進行壓縮。例如,采用哈夫曼編碼對經
    發表于 02-26 15:00

    LZO Data Compression,高性能LZO無損數據壓縮加速器介紹,FPGA&amp;ASIC

    Core。 Core的架構比較靈活,可以根據終端用戶的需求很好地調整壓縮率和吞吐率,可以在低成本的FPGA上實現超過16Gbps的吞吐率。
    的頭像 發表于 01-13 12:41 ?559次閱讀
    LZO Data Compression,高性能LZO無損數據<b class='flag-5'>壓縮</b>加速器介紹,FPGA&amp;ASIC

    探討篇(三):代碼復用的智慧 - 提升架構的效率與可維護性

    的案例,介紹幾種分布式架構中管理代碼復用性的技術。包括代碼復制、共享代碼庫(jar包)、共享服務
    的頭像 發表于 12-27 15:58 ?564次閱讀
    探討篇(三):<b class='flag-5'>代碼</b>復用的智慧 - 提升<b class='flag-5'>架構</b>的效率與可維護性

    相位噪聲分析儀的技術原理和應用

    輸入信號的相位噪聲與頻率穩定性來評估振蕩器的性能。具體來說,其技術原理包括以下幾個步驟: 時鐘提取:相位噪聲分析儀需要從輸入信號中提取時鐘信號。這通常通過鎖相環(PLL)或倍頻器等電路來實現,以提取
    發表于 12-13 14:21

    幾種格力空調故障代碼詳解

    幾種格力空調故障代碼詳解,查表一目了然
    發表于 11-27 15:15 ?0次下載

    ?ISP算法及架構分析介紹

    ),從結果上看就是將RAW數據轉換成壓縮后的RGB(一般)數據,供后續CPU使用(識別、壓縮等)。 市面上很少有直接介紹ISP的書籍或者資料,今天我們主要是聊一聊ISP算法的架構,這樣大家就能明白為什么很少有專用的書籍對這方面
    的頭像 發表于 11-26 10:05 ?1604次閱讀
    ?ISP算法及<b class='flag-5'>架構</b><b class='flag-5'>分析</b>介紹

    VLAN 與傳統網絡架構比較

    虛擬局域網。它是一種將局域網(LAN)設備從邏輯上劃分成一個個網段(或者說是更小的局域網LAN),從而實現虛擬工作組的數據交換技術。 工作原理:通過邏輯上的劃分,將一個大型的局域網劃分為多個虛擬的小型局域網。這些虛擬局域網之間通過虛擬交換機
    的頭像 發表于 11-19 09:30 ?845次閱讀

    【BearPi-Pico H3863星閃開發板體驗連載】LZO壓縮算法移植

    壓縮算法,全稱為Lempel-Ziv-Oberhumer算法,是一種無損數據壓縮技術,以其快速的壓縮和尤其是解壓速度而聞名。以下是LZO壓縮
    發表于 11-10 21:45

    PolarDB-MySQL引擎層的索引前綴壓縮能力的技術實現和效果

    在 PolarDB 中, 通過輕量級壓縮實現, 可以實現減少數據大小的同時, 性能有一定程度的提升. 如何實現的呢? 背景 近幾年互聯網行業的降本增效浪潮愈演愈烈, 如數據
    的頭像 發表于 11-09 09:34 ?558次閱讀
    PolarDB-MySQL引擎層的索引前綴<b class='flag-5'>壓縮</b>能力的<b class='flag-5'>技術</b><b class='flag-5'>實現</b>和效果

    在米爾電子MPSOC實現12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流

    、ATSC 3.0和DTMB-A等,這些技術支持更高的視頻質量和新的廣播應用模式。綜上所述,MPSoC與VCU架構在4K UHD音視頻廣播領域提供了高性能、低功耗、實時壓縮壓縮、多視
    發表于 11-01 16:56

    在米爾電子MPSOC實現12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流

    /HEVC標準,能夠實現高達4K UHD分辨率的視頻的實時壓縮和解壓縮。這意味著在廣播應用中,可以利用VCU進行高效的視頻編碼,減少存儲空間和帶寬的需求,同時保持視頻質量。 多視頻
    發表于 10-14 17:42

    汽車異構硬件平臺開發如何進行靜態代碼分析

    先進的靜態代碼分析工具,其新版本中引入的多CCT功能為開發人員提供了強大的支持,該功能不僅簡化了多編譯器環境下的代碼分析過程,還可以極大增強代碼
    的頭像 發表于 10-09 16:15 ?788次閱讀
    汽車異構硬件平臺開發如何<b class='flag-5'>進行</b>靜態<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>

    如何使用gzip壓縮和解壓縮技術

    Nginx是一款高性能的Web服務器,它也能夠充當反向代理服務器和負載均衡器。在Web應用開發中,優化網站速度是一個非常重要的工作。使用gzip壓縮和解壓縮技術,可以有效減小傳輸文件的大小,提升網站的訪問速度。
    的頭像 發表于 09-29 15:57 ?786次閱讀

    藍牙模塊與其他無線技術比較與選擇

    幾種無線技術進行詳細的比較分析它們的優缺點,探討不同應用場景下的合適選擇,并討論它們之間的兼容性和互操作性。 藍牙模塊、WiFi、Zig
    的頭像 發表于 06-14 16:06 ?1166次閱讀