為什麼英特爾在精簡指令集上沒有作為?


在這個年代還在糾結RISC還是CISC的問題,就好像在糾結光是粒子還是波的問題一樣,建議給問題加上處理器考古學的標籤


剛好邀請王越撰文寫了這方面的文章 截取其中相關的一些內容

「在Intel設計8086及80286的時候,搞RISC的那批學者還沒發論文呢,等到 IBM 的個人電腦賣瘋時,再推翻先前設計重新搞簡化指令集己經晚了。因此,Intel
當時及後繼的x86晶元都是CISC的,並且80年代產生了一系列為x86架構所寫的計算機程式(很多程序在開發中還使用了大量的手寫機器指令)。個人電腦不同於伺服器,受眾廣得多,程序種類和數量也多,所以一但採用另一套指令集,就很難讓用戶遷移到新平台上。另外,哪怕不計應用程序重新改寫、編譯、發布(當時互聯網離普及還早著,大多程序都是靠軟盤郵寄的)的代價,像DOS的操作系統完全重寫遷移到另一個平台上可不是鬧著玩的,需要漫長的改動和漫長的調試周期。所以考慮到指令集的兼容問題,後繼的IBM PC及兼容機不可能再更換到另一套指令集了。」

「x86不是一個RISC的晶元,Intel在1995年發布的Pentium Pro中,找到了通往RISC的捷徑:的確,把ISA換為RISC會破壞x86架構的兼容性,所以架構必須依然使用老指令,但不代表處理器讀入x86指令後,不能翻譯成別的指令。Pentium Pro在取到一條x86指令時,硬體解碼器會把一條CISC的x86指令解碼成符合RISC風格的若干條微指令,因此,除了在起跑線上起跑慢了些以外,在解碼後,Intel晶元執行的代碼相對於PowerPC,在技術上不存在任何的劣勢。」


問題不成立。

現代主流cpu其實都是精簡指令集的。

intel的x86其實是在cpu前端加入一個指令解碼器,把x86指令轉化為微指令,微指令進入指令流水線處理。之所以加入x86硬體解碼器,僅僅是為了兼容。

事實上,在cpu領域,無論是製程還是架構,intel都是最領先的,是許多技術的開創者。

arm處理器的不少先進技術也是intel引入的(當時intel獲得arm授權,但是intel發現arm技術太差,就加入了自己的一些技術)。


…沒有作為?有沒有聽說過80860?最早的雙發射risc 處理器之一,號稱第一個單晶元的超級計算機,在3d圖形學早期研究中地位很高。其簡化版80960或者叫i960很多年後都還是高檔scsi 卡及raid 卡的標配。

後來Intel還收了DEC 的strongarm, 在別人的啊arm 跑40,80mhz的時候sa 1110跑133,甚至206mhz。早期"高性能"手持設備還不是intel 壟斷?

只是即使這樣intel 還不滿意,嫌賺得少,所以不是停了就是賣了。而x86,性能好,成本低,軟體生態成熟到發霉。現在不管是高性能還是低功耗,有什麼risc處理器 是x86難以應對的?


指令集早就不是現代處理器的關鍵問題了,微內核的實現才是關鍵。

你還不如抱怨為啥x86架構的寄存器那麼少,以至於不得不弄寄存器重命名之類的一大嘟嚕東西。


@馮東 這答案也是醉,剛和他講道理呢,他把我拉黑了,討論技術都不能安心……

轉念一想,或許這個問題的提問者也有和 @馮東 一樣的誤解才能問出這樣的問題,所以我還是把寫了的評論直接發出來吧。

---------------分割--------------------

看了你和別人的討論,發現你的誤解大概在於覺得「現代x86-64架構裏譯碼器就是一個把CISC翻譯成RISC的翻譯器」於是推論出「如果直接把那個翻譯之後的 RISC 公開出來作爲第二個模式就能簡化設計提高效率」這個結論。但是實際上就像 albert hu 已經提到但是沒有明確說的,後面那個微指令架構並不是一個真正的 RISC ,只是一個執行方式和執行效率都接近 RISC 的內部架構,從 x86 翻譯到它的工作依賴當前 CPU 的執行狀態和前後指令,並不能把翻譯後的微架構指令保存下來重複使用,也不能把這個翻譯的工作交給編譯器做,這個翻譯器並不是一個JIT。從而,「用一個 x86 + RISC 的設計能超越目前 x86-64 的設計」的這個假說並不能成立。

截圖留個證據:


又看到一堆歷史洗地黨。拿向後兼容洗,拿歷史原因洗,洗的輕巧又賣力。

為什麼呢?一半因為自大導致商業決策失誤,一半因為被綁架。

x86-64 和 x86-32 本來就是兩套指令集,只不過做到了一個 CPU 上而已。用向後兼容給 x86-64 不是 RISC 洗地能成立嗎?你一開始把 x86-32 指令集和 RISC 64-bit 指令集做到一個 CPU 上不就行了?

問題是 Intel 傻啊。要搞什麼 clean-slate,非要把兼容那部分拿掉。

AMD 就出手了,它的 64-bit CPU 兼容 x86-32。可是 AMD 也傻啊,你兼容就兼容吧,你把新的 64-bit 指令集搞成 CSIC 幹什麼呢?不過它已經這麼搞了,用戶也認了,畢竟一時這是唯一支持 x86-32 的 64-bit CPU。

結果,木已成舟。用戶已經接受了 AMD 那套 CISC 64-bit 指令集,Intel 也不能改了。被綁架了。

最近不知道這個問題為什麼又突然吸引了關注度,一大堆人在討論 CSIC 對 RISC 的優勢。這個方面根本不是我的答案的重點。重點在於,當你有一個 clean-slate 的機會去開始設計,你應該即保留一個 clean-cut 的部分去做兼容,又重新設計新擴展的部分。而 Intel/AMD 這兩件事情都沒有做。至於說最後設計的結果是不是某種混合架構,是沒有關係的。問題在於在不該模仿和繼承 x86 的地方為什麼要拙劣的模仿和繼承。

至於為什麼拉黑某些人,因為我很討厭不停在幾個邏輯之間循環,你和他說 Intel/AMD 的兼容性理由是 false claim,他們就談設計成本。你反駁設計成本,他們就說學習曲線。你談了學習曲線,他們又出溜到兼容性。我拉黑一般以討論的營養性為依據。


建議題主去看看《浪潮之巔》這本書。以下內容均來自此書或是對於此書內容的一些個人思考總結。

上世紀80年代末,英特爾面臨一個選擇,是繼續設計和以前x86兼容的晶元還是轉到精簡指令的道路上去。如果轉到精簡指令的道路上,英特爾的市場優勢會蕩然無存:如果堅持走複雜指令的道路,它就必須逆著全世界處理器發展潮流前進。
在這個問題上,英特爾處理得很明智。首先,英特爾必須維護它通過x86系列晶元在微處理器市場上確立的領先地位。但是,萬一複雜指令的處理器發展到頭了,而精簡指令代表了未來的發展方向,它也不能坐以待斃。於是英特爾在推出過渡型複雜指令集的處理器80486的同時,推出了基於精簡指令集的80860。這個產品事實證明不是很成功,顯然,市場的傾向說明了用戶對兼容性的要求比性能更重要。因此,英特爾在精簡指令上推出80960後,就停止了這方面的工作,而專心做「技術落後」的複雜指令系列。
在整個20世紀90年代,只有英特爾一家堅持開發複雜指令集的處理器,對抗著整個處理器工業界。

所以說,英特爾並沒有拒絕新技術,它也曾經研製出兩個不錯的精簡指令的處理器,只是看到它們前途不好時,立即停掉了它們。(在當時的情況來看,精簡指令的處理器於英特爾來說無疑是累贅。)

不得不說英特爾是過去20多年信息革命大潮中最成功的公司之一,但是今後除非它能找到新的成長點,否則它也會隨著PC時代的過去而進入自己平和的中老年期。

另外,我還比較想知道,精簡指令集出頭之日在幾時啊?


曾在GOOGLE工作的吳軍在《浪潮之巔》中,INTEL前CEO安迪-格魯夫在《只有偏執狂才能生存》都有提到這件事情。所以我建議你把這兩本書讀一下。這裡我簡單的介紹一下吧。

當精簡指令集出現後,所有人都說複雜指令集已經過時,英特爾密切關注,為了謹慎。英特爾同時開發複雜指令集CPU和精簡指令集CPU。上市後,複雜指令集CPU依舊熱銷。而精簡指令集CPU因為無法兼容以前的軟體,而銷售量不好。英特爾得出複雜指令集生命依舊強大的結論,放棄在精簡指令集方面的開發工作。

歡迎指正,以免因我胡言亂語而誤人子弟。


Itanium2的IA64有一個操作系統環境,但數據好像還是來自IA32寄存器


用內部查表或者邏輯法將cisc轉化為risc,理論上應該會減少程序大小,這意味著應該cache佔用會少,cache跟cpu之間的帶寬壓力也會變少,但會增多內部處理器邏輯,兩權相較,不好說效率上誰會更牛逼吧。但程序兼容性來說,isa的確最好別變。


因為他們搞EPIC去了。


推薦閱讀:

CPU架構中的棧和寄存器?

TAG:英特爾Intel | 中央處理器CPU | 精簡指令集RISC |