2008年10月31日 星期五

CPU 設計的藝術(I)

在台灣, 因為產業類別偏重於製造業, 所以在原創性設計方面的人材較少. 即使台灣有很強的PC/NoteBook 代工產業, 卻大多局限在系統設計或軟體應用上. 對於CPU的內部架構, 能深入瞭解並進行創新設計的人材是少之又少, 這是一件很可惜的事情. 筆者最近因拜讀過相關的書籍, 對於CPU的架構有些淺顯的理解. 深覺CPU的設計其實是一門穿梭在performance, power, cost之間的藝術.

一般的consumer IC, 大多是在一定的規格內做設計, 有固定的frequency或power的要求. 其競爭大多著重在cost. CPU的設計則是在一定的成本下, 期望達到最高的frequency(更正確的說法是performance)和最低的power. 早期Intel和AMD曾一度以CPU運作的frequency做為競爭重點, 因為一般人都認為運作頻率高的就是效能好. 雖然Intel和AMD深知CPU效能絕不是只取決於頻率. 事實上, CPU架構也會大幅影響其效能. 近代的CPU已不再追求頻率, 而是追求更高的平行度. 試想, 若CPU一次可以平行執行2倍的指令, 某種程度上就相當於頻率提高成兩倍. 一昧追求運作頻率的提升可能會帶來很多麻煩. (如EMI, Power)

CPU可分成兩大類. 其一是執行複雜指令集的CISC(Complex Instruction Set Computer), 其二是執行精簡指令集的RISC(Reduced Instruction Set Computer). 事實上, 一般所稱支援x86指令集的Intel/AMD/Via等CPU皆屬於CISC. 而ARM / PowerPC / MIPS等則屬於RISC. 這兩類CPU的差異到底在哪呢?簡單說, CISC有各種不同用途的指令, 其指令長度不定, 依各指令動作需求而不同, 該多長就多長, 能多短就多短. 所以其指令解碼較難, 但程式較好寫. 而RISC則把指令化繁為簡, 只支援少數基本指令, 各指令長度全部一樣. 因此, 其指令解碼較容易(有固定長度, 固定欄位)但程式較難寫, 寫起來較長較佔記憶體(試想,要用許多基本指令去寫複雜的動作, CISC可能一個指令就搞定了. 而且, 硬是把所有指令弄成等長, 難免有些指令為了配合長度而有多餘的欄位) 支援RISC指令集的CPU, 其CPU hardware 設計較容易, 一般人所認知的Pipe-Line也很直覺實現. 支援CISC的CPU其hardware多了些複雜度, 而要支援長短不同的各種動作也不利Pipe-Line的規劃. 因此, 現代的CISC CPU 其hardware都會先將複雜指令切成許多類似RISC指令的micro-op, 並pipe-line執行各micro-op. 複雜動作的指令可分成好幾個micro-op來做, 而簡單動作的指令則只有一個micro-op. 也因此, CISC CPU難免給人較耗電, 成本較高的印象. (需將CISC 轉成micro-op) 但是CISC CPU 卻有軟體較容易開發的優點. (CISC 的CPU容易做到與PC相容也是一大優點.) 隨半導體技術的進步拉近了CISC和RISC硬體成本的差異, 所以近年來已慢慢看到CISC CPU取代RISC CPU進入Embedded system的應用囉!

沒有留言: