幸好,我們不用理解到這麼深入的程度。
我手邊有一本計算機組織結構的教科書,書裡面羅列了各年代的x86處理器規格演進。8086/8088大約是70年代末期的產物,距離現代最新的x86處理器,已經過了30年。
老實說,這30年間,處理器為了加快速度,在「各方面」都有長足的進步。在所謂的電晶體數量,在製程上,在時脈上……,改變的幅度不可謂不大。不過,處理器的本質和主要的架構,依然沒有太大的變化。
處理器是用來跑程式的
從8086到Core 2 Quad,所有的處理器都是用來「跑程式的」,這一點是處理器的不變。
為了要執行程式,處理器的基本設計也沒有太多的變化。所有的處理器都有暫存器,都使用指令集。也許執行的程式越來越大,越來越複雜,處理器的速度越來越快,寫程式的工具也越來越先進,但是說到底,程式一樣還是一堆用指令組合而成的片段。只是,以前的人還可以用組合語言寫程式,這年頭大概沒人這麼幹了。
同樣的,指令集也不斷的跟著外在環境的需求而改變,80286多了所謂的「保護模式」,386使用複雜的定址模式,後來還有因應多媒體需求加入的MMX指令集,以及因應3D應用而加入的SSE指令集。不過,同樣的概念是:這麼多的變化,本質上處理器也還是不會有革命性的進展,一樣是用來跑程式的。你把程式分解到最小,一樣都是指令的組合,不會變的。
激進的改革絕對不可能
對於所謂的x86處理器而言,革命性的進展幾乎是不可能的,因為使用者要的是「相容性」。比方說,如果有一種革命性的處理器設計概念,要徹底改變指令集的概念,那這對x86處理器而言卻是不可能的,因為客戶們(就是我們)不會想要。
總之,如果要採用「革命性」的進化方式,幾乎註定了新產品必定失敗的命運。
所以Intel為了讓處理器效能變好,就只能採用一種比較「困難」的進化策略──新產品「表面上」和過去完全相容,但「骨子裡」卻有相當大的不同。
目前來講,最常被引用的成功範例,應該是Intel的Core系列產品。
從程式的執行面來看,Core系列處理器也和以往的x86處理器沒有什麼不同,有著一樣的暫存器,有著一樣的Intel商標。不過,Core處理器和之前的Pentium 4處理器相比,卻用不同的途徑達成了更好的結果。底下筆者試著簡單的說明,這段有趣的處理器進化歷史。
NetBurst Pentium 4問題多
大約西元2000年左右,Intel那時剛推出Pentium 4。Pentium 4號稱使用了一種革命性的新架構,稱為「NetBurst」。
對使用者來說,NetBurst是什麼,其實是毋需太認真。因為那是處理器內部的硬體設計的改變。總之,Intel宣稱NetBurst可以大幅提高處理器的運作時脈,讓處理器效能變快。
不過,這話不完全正確。
Pentium 4剛出世的時候,確實把時脈飆得很高,2GHz、3GHz……,競爭對手AMD的Athlon完全追不上。可是,因為採用了全新的設計(更長的管線分段),Pentium 4的效能無法因為時脈的提高而等量提升。因此,AMD乾脆使用P-Rating標註處理器性能,「用更低的時脈但可以達到相同的效能」。結果,Pentium 4的市場反應確實不好,Intel在那時候失掉了很多市占率,AMD當時可說是「氣勢如虹」。
不僅如此,Pentium 4還「很熱」。
這個「很熱」不是比喻,是指當時使用NetBurst架構的Pentium 4真的「溫度很高」,用術語來形容,就是「熱密度」很高。
老實說,Pentium 4當時使用了一些技術,讓它不容易因為過熱而導致「燒毀」,因此即使過熱,也只是會當機而已。不過,沒有人會喜歡容易當機的電腦,更沒有人願意自己的電腦老是過熱。從節約能源的角度來看,處理器的發熱其實都算是「廢熱」,只是浪費能源而已。尤其是對手AMD的Athlon,已經改善了早期容易過熱燒毀的情況,當時已經是「低溫、高效能」的產品,可說是把Intel的NetBurst Pentium 4「壓著打」。
Core微架構一雪前恥
不過,還好,Intel公司夠大,產品夠多,有一個有趣的產品稱為「Pentium M」。
Pentium M據說是由Pentium III改良而來(Pentium 4卻是全新的NetBurst架構,並非由Pentium III改良而來),當初主要是給筆記型電腦用的處理器。推出後,Pentium M就以高效能、省電,當時已經成了筆記型電腦處理器主流產品。
有趣的是,Intel在眼看Pentium 4市場失利之後,做了一個正確的決定:乾脆把所有「桌上型」、「筆記型」電腦的處理器都改用同樣的核心,由Pentium M核心改良而來的「Core微架構」,也就是現在我們常見的Core 2 Duo、Core 2 Quad……處理器。這處理器因為解決了前面兩個問題(效能不彰、容易過熱/耗電),因此Intel處理器重新站穩了腳跟。而所謂的NetBurst處理器,目前在零售市場就幾乎看不到了。
不過,我講了這麼長一段故事,只是要給大家一個結論:無論處理器的硬體架構用多麼複雜的術語嚇唬你,用多麼艱深的名詞為難你,用各種可怕的數字讓你心跳加快……放心吧!都是用來跑程式而已。而且處理器廠商會設法讓它們「能有多相容就有多相容」。
舉個簡單的例子,Windows XP是西元2001年發表的,算是個老產品了。但是,2008年出貨的處理器,能否跑Windows XP?一定還是可以跑的,一定可以順暢、完美的執行Windows XP。你認為這理所當然?不完全是,其實處理器廠商可以輕易的讓處理器「很有自己的特色」,但是他們不會,也沒有必要這麼做。要跑程式嘛!那就不要太有個性。所以,即使是最新的Core 2 Quad,也可以相容30年前的8086,執行古早古早的DOS小程式。
組合語言幾乎沒人用了
不過,現代處理器所能執行的程式規模,確實是比以前要大上很多很多很多。
前面幾期本欄所示範的組合語言程式,就如同我文章裡提到的,就像是處理器大腦運作的腦波訊號一樣,你得使用正確的腦波形式,才可以操作處理器進行運算。
用這麼直接的方式撰寫組合語言程式,好處是「你幾乎就是直接與處理器對話」,這在早期的DOS時代,這麼做最大的好處就是「快」。我提過,早期的知名應用軟體全都是用組合語言寫的。不過,到了近代,這種情況越來越少了。
現代還有哪個知名程式是用組合語言寫的?
事實上,就算用組合語言寫,程式也不一定會快了。
要讓程式碼更快,有一門學問稱為「程式碼最佳化」。這程式碼最佳化的作法,大多是由所謂的「編譯器」進行的。編譯器負責轉換高階語言的程式碼變成可執行碼,轉換過程中還會搭配執行「怎麼做才會讓這程式在處理器執行時更有效率」的各種判斷。這類判斷,用「人腦」做很辛苦,不如用編譯器來做會更有效率。所以,現代人寫程式都用高階語言就可以了。用組譯器寫組合語言的,大多是硬體工程師寫驅動程式,或是寫一些特殊的核心系統程式。要不然,就是你想理解指令集的運作是怎麼一回事,才去研究組合語言的。
現代的程式語言,大概就分化成:開發「應用系統」的各式語言,和開發「系統程式/應用程式」用的語言。
所謂的應用系統,很大的一個部分是所謂的Web應用,這種語言以Java最有名。至於所謂的系統程式/應用程式,反而是比較專業,需要高效能的編譯器產生可執行檔。這類語言,以C/C++為最典型的代表。不過,系統程式和應用程式其實應用範圍比較偏窄,畢竟不是每個人都會需要寫那麼高效的程式。
舉例來說,Excel應該是用C語言寫的(Bill Gates在《擁抱未來》書裡面有這麼說過),但是有多少人會去自己寫一個Excel來用?但Web應用倒是在我們生活和工作中處處可見,而撰寫Web應用的這些語言的實作未必以「最高效能」為追求目標,這類語言(像是C#或是Java)所追求的是程式碼的簡潔、易於修改、易於維護和易於撰寫。也就是說,這類語言在乎的是「程式碼能否正確的執行,寫錯是否能很容易被改正」,而不是「程式碼能否執行的很快」。倒不是程式跑得慢沒關係,而是因為現代處理器已經夠快了,快到「程式執行速度」有時未必是第一優先的事情。
本期結語:未來的處理器,有「變易」有「不易」
所以,本期作為一個「處理器原理介紹」的總結,只是想告訴讀者,無論處理器怎麼進步,各種技術如何驚人,目的都只是要「更快──AFAP」。
你問我「AFAP」是什麼意思?「As Fast As Possible」是也!
但是在這種「變易」的外貌之下,不變的卻是那「馮紐曼(John von Neumann)」的可儲存程式架構。在這種架構之下,所有的應用程式整天都在搬東西,把資料從記憶體搬到暫存器,又從暫存器搬到記憶體,十分忙碌,卻只是在搬過來搬過去。你問我有沒有更好的方式解決這問題?抱歉,我想沒有。
不僅如此,其實,所有的革新,都得在這個架構之下進行擴充,不可能進行革命性的大規模更動。某種程度上,這造成很多人予以「過時」的批評。但在「相容」這面大旗的揮舞之下,這也是無可奈何的局面。
所以,本篇結論是:處理器我們懂個大概即可,但這個「大概」對我們理解各種程式的運作,和各種問題的成因,卻是大有幫助呢!
熱門新聞
2026-01-16
2026-01-16
2026-01-18
2026-01-16
2026-01-16
2026-01-18
2026-01-16