0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是ISA?CPU技術(shù)科普

電子工程技術(shù) ? 來源:lp ? 2019-04-22 10:44 ? 次閱讀

我(作者)開始寫這東西基本上是由于太閑。發(fā)這篇文是由于,一來本身就是想科普,二來發(fā)現(xiàn)到很多人對isa,cpu架構(gòu)的誤解。

先說明關(guān)于本文的幾點:

1. 既然是科普向,那不是專門寫給專業(yè)人員看的,專業(yè)人員都喜歡看那些非常嚴肅,定義嚴謹?shù)慕炭茣?,我本人是一個不大喜歡教科書式教育的人,所以這篇也不會是那種各種專業(yè)詞語亂飛的文章。但是我沒有在國內(nèi)學(xué)習(xí)過cpu架構(gòu),所以有些名字我的確不喜歡或者不知道中文翻譯,會用英語原文。盡量不用這種文縐縐的語氣,多點用調(diào)侃或者比較非正式的話語。

2. 在這邊的公司面試的時候,我遇到過一個比較有趣的問題是:

你要設(shè)計cpu,你怎么向你奶奶解釋你現(xiàn)在的工作。

首先,我奶奶已經(jīng)去世了,也沒辦法向她解釋。其實,這是一個非常有趣的問題,為什么面試的時候回經(jīng)常問?因為cpu設(shè)計行業(yè)里面,很多專業(yè)的知識,別說一般市民,即使是公司里面的其他員工,隨時是跨領(lǐng)域的對話,所以,必須會用比較簡單的例子來解釋復(fù)雜的問題。

我當(dāng)時回答是用廚房煮菜的過程來解釋cpu的流水線,這篇文當(dāng)然也會常常用到類似的比喻,不是因為我喜歡做菜或者我是吃貨,是因為我當(dāng)時只想到廚房。

3. 一篇全是文字的科普向文章是非常非常沉悶的,為了讓讀者不睡著,我會偶爾講冷笑話,如果太冷了,本人水平有限,望包含!下面開始:

什么是ISA?

ISA, Instruction Set Architecture. 中文就是,指令,集合,架構(gòu)。在計算機里面,什么是ISA呢?就是xx定義的一個指令集,這里的xx可以指任何東西。比如你只會做加法,你就定義一個叫假發(fā)ISA,這個指令集只做加法,這也是一個isa。

任何一個ISA對于另外一個isa都沒有根本意義上的“先進”,ISA之間的對比是非常復(fù)雜的。你只會做加法,我只會做乘法,你說我們誰先進?我見得比較多的是爭吵x86 ISA比ARM ISA先進的,我往往一臉懵逼,好像他們比我懂,我是不是不應(yīng)該插一腿進去...

x86 ISA現(xiàn)在是IntelAMD共同擁有,也就是說如果你要開新的x86 cpu公司你必須向這兩者付版權(quán)費用,而且必須兩者都同意你才能獲得完整的ISA,如果你只獲得一部分不完整的ISA,那就和完全沒拿到ISA一樣(編者:我突然想到最近AMD給國內(nèi)X86授權(quán),按照作者的意思,是不是國內(nèi)拿到的X86授權(quán)是不完整的?因為感覺Intel沒同意)。

ISA在cpu里面,就像是字典,用廚房的比喻就是菜譜,菜譜定義了你這個廚房會做什么菜,這個菜做出來是什么樣什么味道,那么顧客在這家連鎖店的任何一間都能叫到相同的菜,吃到相同的味道。

ARM ISA當(dāng)然是ARM公司所有的,當(dāng)時ARM公司是定菜單的,并且給出試菜的人,說你們每家店都要做出這個味才算ARM。而做店的則是不同的公司,像Qualcomn啦,他們中間喜歡怎么做菜是他們的自由,但是必須會那幾道菜,必須做出這個味。

各家的菜單都一樣,所以顧客不需要知道是誰做的菜,只要是這個菜單,做出來肯定一個味。因為操作系統(tǒng)根本不需要知道你cpu是怎么設(shè)計的,操作系統(tǒng)只要知道,我需要運行這些指令,你知道怎么運行就行了,每個不同牌子的cpu,只要你運行出來結(jié)果都一樣,就行了。

如果isa定義1+1=9,那么這個是定義下來的,所有人都這樣錯,就沒錯。如果isa定義了1+1=9,你要糾正他,我的cpu是1+1=2,那么你做出來的cpu雖然數(shù)學(xué)上正確,但是所有軟件,系統(tǒng),就突然不知道怎么辦了。你說這么愚蠢的錯誤cpu不可能犯是吧?

自行百度一下蘋果75-37.5 bug(雖然不一定是cpu或者isa上的錯誤,也許是軟件上的)

然后又有人說ISA是鐵定下來的,x86的良好生態(tài)環(huán)境是因為他的ISA一直有l(wèi)egacy支持。legacy直接翻譯就是遺產(chǎn)。x86的legacy支持的意思就是,世界上第一個x86 cpu支持的東西,今年你發(fā)明的x86 cpu也支持,以后的也要支持。

的確從某個角度上來說,農(nóng)企和Intel都非常努力的去支持很多已經(jīng)沒什么人的東西,就是餐館里菜譜里面有些菜基本上你都不會去試的。你說你都不用了,農(nóng)企Intel還在那里浪費設(shè)計是吧?你不用不代表沒人用啊,X國很多軍用的設(shè)備還是Windows95啊,甚至還是服役中的Windows3.1啊,銀行的atm還有用Windows98的。別問我為什么他們要那樣,如果他們肯花錢找些軟件工程師重新寫那些程序,就可以用最新的東西,很多沒有注釋,現(xiàn)在沒有人學(xué)的語言,或者算法詭異的程序,很多軍事設(shè)備還在用啊。

原因大概是:這種語言連學(xué)都沒人學(xué),我自己都看不懂,我看你怎么破解我的坦克系統(tǒng)!

但是實際上x86又不是完全100%的legacy支持,至少ISA上面沒有這樣定義,農(nóng)企和Intel也沒有官方明文定義。

x86里面有一個指令叫cpuid,系統(tǒng)/編譯器運行它的時候,它會給出一些數(shù)據(jù),就是告訴系統(tǒng)/編譯器,這個cpu支持什么東西,這個cpu有些什么新東西之類的。所以,理論上可以設(shè)計一個cpu,不支持那些非常少用的指令,以降低cpu的設(shè)計復(fù)雜程度,也更省電省事。(對不起,你想吃的這個菜,我們不賣了,你找另外一家試試)

CPU架構(gòu)

這個主題,如果你有編程經(jīng)驗,食用效果更佳。

下面這段純屬個人經(jīng)歷,無關(guān)主題,可跳過。

如果你有編程經(jīng)驗,你有沒有想過,你寫的代碼是怎么運行的?

我當(dāng)初就是由于這個原因而對cpu感興趣然后不知不覺進了這一行。

我是這樣的一個人,我看到輪子轉(zhuǎn),我就想知道輪子是怎么轉(zhuǎn)的,我就想拆開馬達,拆開電線,然后學(xué)物理,學(xué)磁感線,然后知道是什么讓輪子轉(zhuǎn)。

后來由于各種原因我有緣接觸匯編,cpu架構(gòu)之后,對比起編程,我對cpu的運行原理非常興趣,我是興趣使動的,然后就花時間去研究了。其實UIUC對于半導(dǎo)體,EE那邊的研究更多更有趣,但是那邊的教授的所有課讓我對computer architecture的有濃厚興趣。

我學(xué)習(xí)過程是這樣的,怎么寫c->c怎么編譯會匯編語言->匯編語言怎么在cpu里面運行->cpu的組成->transistor的原理->半導(dǎo)體的電子學(xué)應(yīng)用->半導(dǎo)體的工業(yè)使用。

在學(xué)習(xí)半導(dǎo)體的時候,對各種光學(xué)半導(dǎo)體也曾經(jīng)非常感興趣,沒有繼續(xù)學(xué)下去的原因是,設(shè)備太貴了,里面的數(shù)學(xué)太難了(對,說的就是數(shù)學(xué),很多方程都沒有解答方法,很多是以前的數(shù)學(xué)家通過直接觀察式子,然后試答案試出來的,所以很多differential equation要單純靠記憶,我對背書非常非常不在行,如果有哪一天有數(shù)學(xué)家發(fā)現(xiàn)了可以怎么算,我學(xué)了算法也許還能去學(xué)一點)!

后來就去研究cpu怎么才能提高效率。

回歸正題,代碼是怎樣運行的呢?

給純來看科普的讀者的廚房比喻,你要組織一個宴會,然后你說了要弄些什么,你就是軟件。然后有個人,專門根據(jù)你你要求,弄成一份菜單,他就是編譯器。然后把這份菜單給廚房,基本上就是:讀菜單拿食材(instruction fetch),切菜(decode),煮菜(execute),上盤出餐(load store and writeback)。然后前面就一讀菜單,后面就一直工作。

給有一點編程知識的讀者:舉個例子,c:

int func(){

...

int a = 1;

a = a +3;

...

}

這段編譯后,大概就是

sub sp, 4 ; stack point increase變量都在函數(shù)棧里留一個位置,因為是int所以留4

mov ebx, 1 ; ebx用來存1,就是你定義 a了,a=1

; mov [sp], ebx ;有時候如果需要,就把ebx是值存到剛剛預(yù)留的棧里

; mov ebx, [sp] ;需要用的時候再讀出來,不是必然會發(fā)生的,但是這兩步可能發(fā)生

add ebx, 3 ; ebx = ebx+3, 當(dāng)然你可以用其他register

...

你不需要讀得懂,因為我手打的,分分鐘錯給你看。

然后這些東西,就會跑到內(nèi)存,沒錯,你運行軟件的時候,代碼是先去到內(nèi)存,如果想了解他們怎么從硬盤跑到內(nèi)存,這是另外一個主題,我這里先不討論,然后緩存又會把這些代碼讀取,緩存就已經(jīng)在SoC里面的,cpu在從緩存里面讀取,別問為什么這么麻煩讀這么多次,都是為了省錢和稍微加快速度。

由于是舉例子,我就隨便亂說個decode。這個是Intel公布的manual,問我為什么不用本家農(nóng)企是吧?因為我拿到農(nóng)企那個不是對外公布的,公布版我還要上網(wǎng)找。

Opcode Instruction Op/ En 64-bit Mode Compat/ Leg Mode D

05 id ADD EAX, imm32 I Valid Valid Add imm32 to EAX.

在cacheline里面看起來大概是這樣的 0x05__02___00000003

里面的_代表其他位不詳細講的,大概這個翻譯成機械碼就是 要做05(ADD加法)在02(ebx實際上我印象中ebx是02,然而eax是00,不是01,這些編碼亂七八糟的,Intel決定的,別問我)后面的00000003就是32為imm32,就是 add, ebx 03

cpu讀了這條cacheline叫instruction fetch,然后下一步就是把它decode,解釋成add, ebx 03,再下一步就是把運行(execute,沒錯,這么麻煩之后,最后終于要算了),把算得的結(jié)果存到ebx上,然后再看看需不需要存回去cacheline或者內(nèi)存里面(load/store writeback)。這個就是cpu的基本運行原理。

CPU pipeline

有時候會聽到cpu流水線,如果按照上面的做法,沒一個指令都要通過這幾部來預(yù)算,那么只有一部分電子器件在用的時候,其他部分都在發(fā)呆浪費電。就像是,廚房里面,從取菜到上盤全部都一個人做,肯定要累死那個人,但是你炒菜的時候,是不是想,如果有人已經(jīng)幫你切好菜,我就一直炒菜好了,這樣我們廚房工作效率就高了,cpu也是這樣。

上圖是一個經(jīng)典的cpu運行流水線。

換成廚房理論,就是,一個人專門去食材,一個人專門切菜,一個人專門炒菜,一個人專門上盤,一個人專門給客人下單上菜,是不是現(xiàn)代化很多呢!

然而這樣不能滿足我們cpu的工程師,我們還有branch prediction,什么叫branch prediction呢?程序黎里面最耗時間的一個就是branch,就像c里面的if,你得到答案之前不知道是繼續(xù)往下走還是進去if里面的括號。就像下單的小哥,那些猶豫不決而改菜單的人最討厭了。

于是cpu里面有了這個東西,他是怎么用的呢。下單的小哥也不是笨蛋,顧客a來了100多次了,有80次都改單把豬肉改成雞肉,那么他下單時候,小哥就先說了,改雞肉,如果顧客a覺得還是豬肉吧,就再抄,如果顧客a真的改單,那么廚房以及開始做了,而且有80%的幾率啊,小哥還是挺聰明的吧。

cpu也大概是這樣,根據(jù)每個loop的地址(顧客)來訓(xùn)練出一個未卜先知的系統(tǒng)。

上圖里面還有OOO(out of order),x86里面,real mode可以用的general register只有8個,eax,ebx,之類的,64位之后增加了8個。流水線工作,如果

mov eax,1;

add eax,1;

sub eax,2;

你們發(fā)現(xiàn)問題了沒,eax用了再用,但是流水線做add的時候,eax是1,sub在等add retire之前,是不能做的,那么你就不得不等。

那么流水線的效率就體現(xiàn)不出來了。因為這里有一個write after write 的dependency,就是同一個register,你兩個pipeline stage要用同一個register,而且x86在傳統(tǒng)模式只有8個register,eax,ebx等等,64位模式增加了一些。所以這中情況是非常常見的。為了解決這個問題,就有了out of order execute, in order commit。就是不按順序來運行指令,但是按順序完成指令。

用廚房理論解釋就是,有這么一道菜(或者說兩道菜),雞要先煮了然后炸,你煮熟雞之前不能炸,否則炸了再煮,口感就不同了,顧客肯定罵死你,但是后面又有其他菜在等,鍋你是有的,所以在煮雞的時候,你先做后面的菜,然后雞煮好了,再炸。出餐的時候,你還是先出了這道雞肉再出后的菜,那樣顧客就不會投訴出餐的順序不按菜單了。

大概就說這么一通吧,也不知道有沒有解釋清楚,我中文越來越差了,說話都咬舌頭,而且我說方言版本的粵語比較多,普通話有時候也說不準確了Orz(求別噴,用得少就說不好了)。

里面夾雜了一些英文,因為我看了中文的翻譯,我覺得那樣翻譯不好,也不準確,但是我又不想自己想個新詞來誤導(dǎo)讀者,只好用英文了。如果有讀者對某些題目有特別的興趣,我再想想什么時候有空再寫點什么吧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10879

    瀏覽量

    212188
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6850

    瀏覽量

    123429
  • ISA
    ISA
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    43760

原文標題:老奶奶都能看懂的CPU技術(shù)科普

文章出處:【微信號:EngicoolArabic,微信公眾號:電子工程技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LoRa技術(shù)科普

    、抗干擾性、拓撲結(jié)構(gòu)、最大終端連接數(shù)等參數(shù)上比較了Sigfox、LTE-M、ZigBee、WLAN、802.11ah和 LoRa的區(qū)別。后續(xù)的LoRa技術(shù)小型科普文(下)將具體解釋以上的部分參數(shù)
    發(fā)表于 11-03 13:08

    LoRa技術(shù)科普

    、抗干擾性、拓撲結(jié)構(gòu)、最大終端連接數(shù)等參數(shù)上比較了Sigfox、LTE-M、ZigBee、WLAN、802.11ah和 LoRa的區(qū)別。后續(xù)的LoRa技術(shù)小型科普文(下)將具體解釋以上的部分參數(shù)
    發(fā)表于 01-23 06:35

    STM32CubeMX是啥?

    SAST weekly 是由電子工程系學(xué)生科協(xié)推出的科技系列推送,內(nèi)容涵蓋信息領(lǐng)域技術(shù)科普、研究前沿?zé)狳c介紹、科技新聞跟進探索等多個方面,幫助同學(xué)們增長姿勢,開拓眼界,每周更新,歡迎關(guān)注!歡迎愿意
    發(fā)表于 02-15 06:51

    上汽通用前瞻技術(shù)科研中心實驗室初體驗

    2012年11月29日晚上,上海通用汽車公司在上海舉辦了第二屆“科技日”活動,并宣布通用汽車中國前瞻技術(shù)科研中心二期正式落成。這次“科技日”活動向我們展示了通用汽車尖端的技術(shù)研發(fā)成果以及參觀二期的前瞻技術(shù)科研中心實驗室,下面將帶
    的頭像 發(fā)表于 06-27 10:56 ?6180次閱讀

    IC運營工程技術(shù)科普

    IC運營工程技術(shù)科普篇識 ? Q1:如果發(fā)現(xiàn)產(chǎn)品fab的后端金屬層有EM的問題,如何評估lifetime?需要做什么測試。除了HTOL,有專門針對EM的lifetime?評估方式嗎? Answer
    的頭像 發(fā)表于 12-29 11:33 ?2479次閱讀

    技術(shù)科普:什么是SRv6?

    2020 年的最后一篇技術(shù)科普,我來聊聊 SRv6。 這兩年,SRv6 可謂是通信界的 “超級網(wǎng)紅”。不管是技術(shù)峰會,還是行業(yè)論壇,都少不了它的身影。很多大佬甚至聲稱:“SRv6 是未來網(wǎng)絡(luò)的靈魂
    的頭像 發(fā)表于 12-31 15:44 ?2w次閱讀

    京東方首檔自制技術(shù)科普綜藝《BOE解憂實驗室》燃情上線

    2022年9月2日,由BOE(京東方)自制的首檔技術(shù)科普綜藝節(jié)目《BOE解憂實驗室》在各大視頻平臺全面上線。作為國內(nèi)科技企業(yè)首檔綜藝,節(jié)目創(chuàng)新性地以技術(shù)科普與綜藝相結(jié)合的方式,邀請明星藝人、技術(shù)專家
    發(fā)表于 09-05 16:30 ?347次閱讀

    天河區(qū)科技活動周啟動!機智云致力助推物聯(lián)網(wǎng)技術(shù)科普及創(chuàng)新應(yīng)用

    ”簽約儀式,助推物聯(lián)網(wǎng)技術(shù)科普及創(chuàng)新應(yīng)用發(fā)展。 本屆天河區(qū)科技活動周以“崇尚科學(xué),熱愛科學(xué)”為主題,旨在充分聯(lián)動高校與科研院所、科技企業(yè)、科普基地等科技、科普資源,進一步加強資源整合,共同推動科技創(chuàng)新、
    的頭像 發(fā)表于 05-27 14:55 ?584次閱讀
    天河區(qū)科技活動周啟動!機智云致力助推物聯(lián)網(wǎng)<b class='flag-5'>技術(shù)科普</b>及創(chuàng)新應(yīng)用

    紅外溫度TS318傳感器技術(shù)科普

    紅外溫度TS318傳感器技術(shù)科普
    的頭像 發(fā)表于 05-19 16:40 ?841次閱讀
    紅外溫度TS318傳感器<b class='flag-5'>技術(shù)科普</b>

    經(jīng)緯恒潤再次受邀亮相一汽零部件新技術(shù)科技展

    7月24日-28日,中國一汽舉辦的“技領(lǐng)時代 智創(chuàng)未來”第五屆零部件新技術(shù)科技展在長春一汽總部盛大開幕。經(jīng)緯恒潤作為一汽戰(zhàn)略合作伙伴和理事會成員,再次受邀參加本次活動。
    的頭像 發(fā)表于 08-04 10:55 ?712次閱讀
    經(jīng)緯恒潤再次受邀亮相一汽零部件新<b class='flag-5'>技術(shù)科</b>技展

    經(jīng)緯恒潤再次受邀亮相一汽零部件新技術(shù)科技展

    7月24日-28日,中國一汽舉辦的“技領(lǐng)時代智創(chuàng)未來”第五屆零部件新技術(shù)科技展在長春一汽總部盛大開幕。長春市委領(lǐng)導(dǎo),中國一汽領(lǐng)導(dǎo)成員和相關(guān)部門主要負責(zé)人,以及來自全國各地的新技術(shù)科技供應(yīng)商伙伴,共同
    的頭像 發(fā)表于 08-04 08:00 ?1155次閱讀
    經(jīng)緯恒潤再次受邀亮相一汽零部件新<b class='flag-5'>技術(shù)科</b>技展

    MEMS技術(shù)科普文章

    得益于日益成熟的技術(shù),MEMS傳感器在各類電子產(chǎn)品上快速普及,我們身邊的智能手機、平板電腦等幾乎所有電子設(shè)備無不包含,然而大部分人對MEMS技術(shù)還是比較陌生的。
    發(fā)表于 08-15 14:15 ?922次閱讀
    MEMS<b class='flag-5'>技術(shù)科普</b>文章

    先進封裝技術(shù)科普

    半導(dǎo)體產(chǎn)品在由二維向三維發(fā)展,從技術(shù)發(fā)展方向半導(dǎo)體產(chǎn)品出現(xiàn)了系統(tǒng)級封裝(SiP)等新的封裝方式,從技術(shù)實現(xiàn)方法出現(xiàn)了倒裝(FlipChip),凸塊(Bumping),晶圓級封裝
    的頭像 發(fā)表于 08-14 09:59 ?738次閱讀
    先進封裝<b class='flag-5'>技術(shù)科普</b>

    天線該如何指向,才能有更好的傳播效果呢?

    這兩天,網(wǎng)上圍繞一個B站技術(shù)科普視頻,產(chǎn)生了很大的爭議。
    的頭像 發(fā)表于 11-27 10:31 ?1303次閱讀
    天線該如何指向,才能有更好的傳播效果呢?

    技術(shù)科普 | 芯片設(shè)計中的LEF文件淺析

    技術(shù)科普 | 芯片設(shè)計中的LEF文件淺析
    的頭像 發(fā)表于 11-13 01:03 ?286次閱讀
    <b class='flag-5'>技術(shù)科普</b> | 芯片設(shè)計中的LEF文件淺析