跳轉到內容

微處理器設計/程式碼密度

來自華夏公益教科書,開放的書籍,開放的世界

在早期的計算機中,程式記憶體非常昂貴。程式設計師花費大量時間最小化程式的大小,以使其適應有限的可用記憶體。因此,執行特定任務所需的所有指令的組合大小,即程式碼密度,是任何指令集的重要特徵。[1][2] 即使在今天,絕大多數執行的指令是否適合於 指令快取 也會有很大區別,指令快取比主記憶體小很多個數量級。

一些作者使用“位元組效率”、“程式碼效率”、“操作長度縮減”等術語來指代與程式碼密度基本相同的概念。[3]

在 CPU 開發的早期幾十年裡,人們逐漸向指令集中新增越來越多的“強大”指令,從而減少了實現常見任務所需的指令總數,但增加了儲存每個指令所需的平均 位數——在許多情況下,這會提高整體程式碼密度。在開發了片上指令快取之後,RISC 革命是由那些犧牲程式碼密度並消除複雜、"強大"指令以簡化和加速 CPU 實現並提高其他 CPU 效能指標的人領導的。最近,一些人一直在嘗試使用最小指令集計算機 (MISC),使每個指令的位數更短,以嘗試提高程式碼密度。

對於具有可變長度指令的處理器,如果常用指令很短,即使這迫使其他(很少使用)指令變長,也會有助於程式碼密度。

對於具有固定寬度指令的處理器,選擇 16 位寬指令似乎比 8 位或 32 位寬指令提供略微更好的程式碼密度。[4]

人們普遍認為,32 位微控制器的程式碼大小(程式碼密度較差)遠遠大於 8 位微控制器。然而,在許多情況下,主要使用 16 位寬指令的 32 位微控制器的程式碼大小(程式碼密度更好)比主要使用 14 位寬指令的 8 位微控制器或主要使用 16 位寬指令的 16 位微控制器的程式碼大小更小。[5][6]


隨著典型 RAM 大小的增加,以及在開發了足夠大的單獨指令快取以容納內部迴圈和常用子例程之後(因此程式碼密度對 CPU 效能指標 的影響很小),[2] 以及在發明了巢狀子例程、執行緒程式碼和其他與指令集無關的可執行壓縮技術之後,[7] 程式碼密度已成為 指令集架構 中不太重要的部分。


Clipboard

待辦
在這裡簡要介紹一下 ARM Thumb 指令



Clipboard

待辦
在這裡簡要介紹一下 EEMBC CoreMark 程式碼大小基準



Clipboard

待辦
在這裡簡要介紹一下 GCC 程式碼大小基準環境 (CsiBE)


許多指令集專門設計為具有高程式碼密度。[8][9][10][11][12][13][14][15]

參考文獻

[編輯 | 編輯原始碼]
  1. 維基百科:程式碼密度
  2. a b Margarita Esponda and Ra'ul Rojas. "RISC 概念 - 實現調查"。第 2 節:“圍繞 RISC 概念的困惑”。
  3. Terry Ritter and Joel Boney. "BYTE 6809 文章(1979 年 1 月至 2 月)"
  4. "似乎 16 位 ISA 某種程度上達到了最佳程式碼密度的“最佳點”,也許是因為地址也是 16 位寬的,並且在單個指令中處理。相比之下,8 位機需要多條指令來處理 16 位地址。"——"計算機世界中的昆蟲" 作者 Miro Samek 2009 年。
  5. Joseph Yiu, Andrew Frame. 草案 "32 位微控制器程式碼大小分析"
  6. "LCP11xx 的程式碼密度"
  7. 資料壓縮/可執行壓縮
  8. "用於高效能和低功耗 8 位處理的 AVR 微控制器"。引用:“... AVR 指令集和 CPU 設計針對程式碼大小最小化和執行速度最大化。這... ... 高程式碼密度... 和低功耗... 仍然引領行業。”
  9. 維基百科:AVR32。引用:“與 AVR 8 位微控制器架構一樣,AVR32 旨在實現每時鐘週期極高的程式碼密度和效能。”
  10. "AVR32 架構文件"。引用:“為了實現高程式碼密度,指令格式很靈活,既提供長度為 16 位的緊湊指令,也提供長度為 32 位的擴充套件指令。... 緊湊指令和擴充套件指令可以在指令流中自由混合。”
  11. "獲得比 8/16 位 MCU 更好的程式碼密度:NXP LPC1100 Cortex M0"。(參見第 17 頁)... 也提到了“CoreMark”程式碼大小基準。
  12. "680x0 系列和 ColdFire 之間的差異"。引用:“像 PowerPC 這樣的標準 RISC 處理器以犧牲程式碼密度為代價來實現高效能,部分原因是所有指令的寬度都相同(通常為 4 位元組),以及... ... ColdFire 架構——飛思卡爾半導體將其描述為“可變長度 RISC”——旨在分享 RISC 的許多速度優勢,而不損失 680x0 系列的程式碼密度優勢。與大多數現代處理器架構一樣,它針對用 C 或 C++ 編寫的程式碼進行了最佳化... 為了規範指令流,所有 ColdFire 指令的寬度均為 2、4 或 6 位元組;... ”
  13. "全新的 32 位 RISC 核心:XAP3 ASIC 處理器透過極高的程式碼密度、低功耗和軟體靈活性釋放嵌入式系統行業" 引用:“XAP3... 實現了非凡的程式碼密度,劍橋諮詢公司估計,這可能會節省高達 30% 的記憶體使用量。”
  14. "32 位 RISC 核心 - 具有免版稅許可證"。引用:“XAP3... 實現了非凡的程式碼密度,劍橋諮詢公司估計,這可能會節省高達 30% 的記憶體使用量。”
  15. "ChipX 推出具有業界領先程式碼密度的可綜合 32 位 CPU,適用於嵌入式和消費類應用"。2008 年。
華夏公益教科書