一如上週預測,蘋果要將 Mac 晶片架構從 x86 轉到 ARM 架構。
ARM(全大寫)是一種處理器的架構,Arm 則是開發此架構的公司。
在說明這個蘋果這個決策以前,首先要理解晶片架構的意義。
#食材料理機
想像在一個平行宇宙,每一家餐廳的核心是一台「食材處理機」。所有材料必須先由食材處理機加工,再輸出給廚師,或是其他周邊機器做最後的調整。
原本所有餐廳都跟一家叫英特爾的公司買食材處理機。
英特爾一手包辦機器的設計與製造,同時提供機器的使用說明書。
每一家餐廳都用英特爾的機器,因此所有廚師都會用,週邊機器也都跟英特爾相容,於是又鞏固了英特爾的核心地位。英特爾有生產規模,其他家就更追不上。這是一門很賺錢的生意。
有一天,街頭突然出現了一批攤販,或者叫「行動餐廳」。這些攤販也需要食材處理機,但它們的需求不同。攤販的廚房很小,因此食材處理機必須體積小、熱散逸(heat dissipation)少,耗電低。效能反而不用太高。
#這讓另一家企業Arm抓住了機會。
Arm 的食材處理機雖然效能較差,但體積、熱散逸與耗電量都比較小,迅速打開攤販的市場。英特爾強大的機器反而顯得碩大笨重,價格也太高。
同時,Arm 採取新的商業模式。它不是「自產自銷」,而是把機器抽象化。Arm 只負責設計,生產交給專門製造的企業,如台積電、三星。Arm 販售設計圖,跟攤販收取時材處理機的權利金。如此一來,攤販可以更快的客製化機器,而台積電則持續加速開發,並降低生產的價格。
有一家最有錢的攤販叫蘋果,可以選擇只買最基本的設計圖 — 只包含指令的目錄跟驗證相容的方法 — 然後自己設計食材處理機。這樣的機器仍然符合 ARM 架構,卻可以完全符合蘋果的喜好。
Arm 的商業模式靈活,價格又低,迅速攻佔攤販市場。再加上另一家整合「飲料處理機」、「高湯處理機」、「甜點處理機」的壟斷者高通(Qualcomm)軟硬兼施,最終導致 ARM 架構成為攤販的標準。今天 90% 的手機採用 ARM 架構處理器。
#更意想不到的事發生了。
攤販的生意越來越好,有一天突然成為主流,數量遠超過餐廳。這帶來規模經濟:ARM 晶片進步越來越快,價格越來越便宜,並且擴散到其他產品,包括平板、智慧手錶、無線耳機、電視盒等。
同時,電腦市場卻陷入長期衰退,英特爾的開發速度更落後台積電、三星。蘋果再次面臨 2005 年的困境,只是扯後腿的變成英特爾,而蒸蒸日上的卻是 ARM 晶片。蘋果必須再次為 Mac「換心」。
#了解Mac換上Arm的好處
📧歡迎留下 Email 收看全文: https://bit.ly/2Z3jYOX
了解mac換上arm的好處 在 買mac 筆電跑win 11 虛擬機實不實際 的推薦與評價
... wrote:用用Office 文書+ 元大股票下單系統而已鎖定M1只要你確定購買VM軟體(如PD)後安裝的ARM 版Windows 上 ... 換到mac電腦的環境 我的M1 mac ... ... <看更多>
了解mac換上arm的好處 在 [賞書] ARM System Developer's Guide - 看板Soft_Job 的推薦與評價
@書名:ARM System Developer's Guide
@書本類型:英文書
@購買時間:(約略就好~)
@購買地點:
@連結:https://www.arm.com/documentation/books/4975.html
@入手方式:Internet
@為什麼會買這本書?
想了解ARM相關底層的知識
@讀完有任何感想?(請至少附上五十字感想)
文末有附上讀書的筆記, 這本書深入淺出講了ARM所有細節
可惜的地方是, 他已經很久沒更新了, 新的Cortex系列都沒有涵蓋
書中有段在講, 如何寫出高效率的C code, 如果整本書只能挑一章來讀
那就是chapter 5: Efficient C Programming
@覺得買得有價值嗎? Yes/No
YES
@如果給一到五顆星,你給幾顆
*****
-----
同步刊載於
https://lihgong.blogspot.tw/2010/01/arm-system-developers-guide.html
-----
[書評] ARM System Developer's Guide
ARM System Developer's Guide
Designing and Optimizing System Software
https://www.arm.com/documentation/books/4975.html
----
這本書是聖經等級的書, 有興趣的人, 我相信很多地方都可以取得 PDF 檔
在新竹 NOVA 書耕也有翻譯的中文書可以看
總而言之, 推薦 !!
如果修過 computer architecture 的人, 看這本書會更有感覺
這一系列的連載將會把我讀過的心得陸續寫上
----
Chapter 1
ARM Embedded Systems
這一章是嵌入式簡介, 在很多地方都看得到類似的文字
不知道什麼是嵌入式系統的人可以看看
----
Chapter 2
ARM Processor Fundamentals
在 ARM上寫程式, 瞭解 ARM architecture 是必要的
這顆 CPU 有以下的特性...
* 16 General Purpose Registers
* Support ARM(32-bit), Thumb(16-bit), Jazelle(8-bit) instruction sets
* Conditional Execution (很威的功能)
這一章針對這些特性作概略性的描述, 真的要精通, 寫點 ARM 組語是免不了的
另外 2.7 ARM Processor Families 這一章也很有意思
他列出 ARM7 ~ ARM11 常見的型號, 以及代表的意義
ARM7 ARM9 ARM10 ARM11
Typical Mhz 80 150 260 335
mW/Mhz [44;1m0.06 [m 0.19 0.5 0.4
+cache +cache +cache
MIPS/MHZ 0.97 1.1 1.3 1.2
從上面這張表來看, ARM7 有極低的耗電量, 不錯的效能, 難怪會暢銷了...
----
Chapter 3
Introduction to the ARM Instruction Set
所有講 ARM 的書都會介紹指令集, 但是這一本書講得更詳細
比如 ARM 因為內建一個 Barrel Shifter, 可以做些很特別的操作
example: R3 = R1 + 2*R2
-> R3 = R1 + (R1 << 1)
-> add R3, R1, [44;1mR2, LSL #1 [m
ARM 指令中, 其中一個 operand 都可以做這種 shift operation
上面這種運算經常出現在程式中, 善用 CPU 的特性, 就能少掉好幾道指令
ARM 的 conditional execution 也是極有特色的指令編碼
書中舉了算最大公因數為例, 說明 conditional exection 的威力
ARM 在一些特定的型號, 也提供 DSP 指令支援, 例如 MAC (multiply-add-accumulate)
還有 CLZ (count-leading-zero), 還有些 Saturated Add 指令
藉著讀 ARM 的指令集, 能瞭解這顆 CPU 的確切能力, 以及限制
----
Chapter 4
Introduction to the THUMB Instruction Set
THUMB 是 ARM 的 16-bit 指令集, 執行效能比較差, 但是程式碼比較短
在手機上, Flash 也斤斤計較的場合, 這種指令集就有他的用處了
ARM 能支援 32-bit 和 16-bit 指令互相切換, 具體切換的方式書上有寫
切換的程式段叫 veneer (我第一次看到這個詞, 完全不知道在說什麼)
這一章看看即可
--
Chapter 5
Efficient C Programming
這本書約 700 pges, 如果只想看精華, 就是這一章了
這章的主題是 C code 和 assembly 之間的對應
我一直到學會這件事, 才敢小聲的說, 我會一點 C 程式設計
這章包括了...
Basic C data types
C 語言很多 data type 都有 machinie level 的支援
了解機器對這些 data type 的支援, 是了解 C -> assembly 的重要關鍵
寫 C 時經常會宣告 local variable, 他們在機器底層的對應都是 register
就算放到 stack 去, 也是一個又一個 32-bit 的數值
所以除非是陣列, 不然直接宣告 unsigned int 即可
Function parameter 也是重要的點, function參數直接宣告成 u32/ s32
執行效能最好, 書上用 assembly 的觀點解釋這些事
C Looping Structure
迴圈怎麼寫效果最好, 執行速度最快, 這一段書上用組合語言有精闢的分析
現代 compiler 已經能做好很多事, 如果了解 compiler 最佳化的方式和限制
對程式功力會有大幅的幫助
Register Allocation / Function Calls
了解呼叫函數時 compiler 是怎麼配置暫存器, 對於寫好程式極重要
這個主題也是寫 C 程式的重要課題, 怎麼平衡函數的 overhead 和結構化設計
Pointer Aliasing
這章講解 compiler 沒辦法把 code 最佳化的原因, 值得細讀
Structure Arrangement
C 語言宣告的 structure, 怎麼對應到記憶體配置, 這是 C 的進階主題
這也是每個 C programmer 需要知道的事
Convert Division to Multiplication
Others...
Chapter 6
Writing and Optimizing ARM Assembly Code
如果有一天, 有人逼你用組語寫程式, 對某段程式做最佳化, 讀這一章就對了.
如果沒有, 這一章可以當作增廣見聞來讀
Pipeline 的處理器都各種 dependency 要 handle
寫組語的好處是, 程式設計師可以調整指令的順序, 避開這些限制
這一章讀起來的感覺很像 Computer Architecture/ Organization.
只是那兩本聖經本用 MIPS 舉例, 這章用 ARM 舉例
ARM 很有特色的 conditional execution 這一章也有說明
善用這些指令, 能很漂亮的避開 branch 指令
Chapter 7
Optimized Primitives
這一章其實可以跳過, 有需要再回來看
他講了包括平方根, 除法, log/sin/cos/exp, bit-reversal, 這些運算的作法
老實講, 沒有實際上用, 還真的很難讀下去 XD
Chapter 8
Digital Signal Processing
老實講, 用 ARM 來做 DSP, 那鐵定是找自己麻煩的 XD
有些 ARM 有 DSP extension, 其實讀讀這些章節, 也可以理解 DSP 需要哪些指令支援
這章教你怎麼實作 FIR/ IIR/ FFT, 有需要再回來看
全書從這一章開始, 進入一些 Embedded System 的主題
這些主題比較接近怎麼 plan 一個完整的系統, designer 有哪些東西可用
我覺得每一章都有可讀之處, 接下來, 連載繼續了
Chapter 9
Exception And Interrupt Handling
中斷的處理是每顆 CPU 的重要主題, 這一章提示了 ARM 的中斷模型
一般的 CPU 中斷其實都不複雜, 事件來了, CPU 會跳去某個地方執行指令
反倒是軟體這裡的控制, 花樣多很多
有時候我們希望中斷反應時間很快, 希望中斷還沒結束, 就開啟中斷
這樣軟體的架構就會複雜很多
其實故事多發生在軟體這裡, 這一章講了好幾種 IRQ handling 的方式
我看了幾種就受不了了(笑), 自己以前玩的就是最簡單的
哪天有興致, 再來實作其他方式
Chapter 10
Firmware
這章很短, 他簡單介紹了 bootloader 的故事
bootloader 一開始都會有一段組合語言, 這章講解了其中一段, 值得一看
Chapter 11
Embedded Operating System
如果想知道一個 OS 簡單的組成, 這一章其實有些東西
我因為看過 uC/OS II 這個 OS 的 source code, 所以這一章是跳著看
我個人覺得, 移植一次 uC/OS II, 感覺會更踏實
Chapter 12
Cache
講 Cache 原理的書很多, Computer Architecture/Organization 都有專門的章節
這章不免俗的也講解了原理, 有以前的基礎, 看起來不會吃力
這章最主要的價值是, ARM上面的 cache 怎麼配置, 這本書講得離應用更近
包括那個該死的 CP15 要怎麼設定 :p
我自己玩 ARM 的時候就感受過 cache 的威力, 開了以後, 速度快很多, 殺很大
Chapter 13
Memory Protection Unit (MPU)
寫程式最怕記憶體存取超過邊界, C 語言沒有提供記憶體邊界保護的功能
有些 ARM 有提供硬體支援, 避免程式設計師做傻事
MPU 的功能和下一章要講的 MMU 相比, 功能比較弱
我還沒玩過 ARM 的 MPU, 這一章我是當作增廣見聞在看得
Chapter 14
Memory Management Unit (MMU)
不管是 computer organization/ architecture, OS, 都會講講 virtual memory
歌頌一下他會提供多大的彈性, 有多好有多好
但是實際上要怎麼用, 怎麼在彈性和效率之間取得平衡, TLB是什麼
這些主題我認為, 挑一顆有 MMU 的處理器玩過一次, 鐵定一生難忘
我自己玩 MMU 的時候, 也處在極痛苦的狀態
怎麼把課本學到的, 和硬體連結起來, 這不是普通的麻煩
一般工作時, 其實這些東西摸到的機會不多, 因為這些會有專門的 team 弄得好好的
但是有自己玩過一次, 知道他的痛苦, 真的是很好的經驗
Chapter 15
The Future of the Architecture
* DSP instructions
* SIMD
* Thumb-2
APPENDIX A
ARM and Thumb Assembler Instructions
去書店買任何 ARM 的書, 幾乎都會講一講 ARM 指令集
這個主題是如此的枯燥乏味, 但又如此的重要, 以至於每本書都要提一提
這本書的附錄我沒看, 但是我在別本書看過
我真的是一道一道指令看, 而且反覆看很多次, 查了又查
了解組合語言, 是認識 CPU 能力的最好方式, 確實有看的價值
我是寫 bootloader 時, 被逼著看別人寫的組語, 那時候學會的
APPENDIX B
ARM and Thumb Instruction Encodings
指令的編碼... 機械碼的格式... 其實可以跳過 Orz
APPENDIX D
Instruction Cycle Timings
如果想寫出超威的assembly, 這一章會是好朋友
但是這個機率通常... 滿低的 XD
後記
以前看書都是逐字逐句看, 這本書一開始也這麼讀
只是後來實在受不了, 尤其是 DSP那段, 這本書真的適合當工具書用
這本書足足 700 pages, 雖然沒看完裡每個字
倒也從頭到尾走了一次, 也寫下自己的讀書心得, 自我感覺挺不錯的 XD
最近的獵人漫畫, 畫了會長的練功過程
一拳又一拳充滿感激的正拳, 累積了基本功夫
最新一期(#291), 最後一個鏡頭會長說
"萬分感謝, 與你相會前, 我所經歷的一切"
謹以這個過程勉勵自己, 練功沒有捷徑
要成為絕世高手, 沒別的辦法, 一點一點的繼續學下去吧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.200.68
... <看更多>