本文來(lái)自微信公眾號(hào):編程技術(shù)宇宙 (ID:xuanyuancoding),作者:軒轅之風(fēng) O
CPU 里的時(shí)間
Hi,好久不見(jiàn),我是 CPU 一號(hào)車(chē)間的阿 Q,不認(rèn)識(shí)我的話,可以看看:完了!CPU 一味求快出事兒了!
真的是好久不見(jiàn)了,人類(lèi)有個(gè)說(shuō)法叫天上一天,地上一年,而在我們的世界里,人類(lèi)一天,我們不知要過(guò)多少年~~
在我所在的 CPU 這座工廠里,時(shí)間的概念有些不太一樣。工廠大門(mén)外的中央廣場(chǎng)上掛著一個(gè)大大的鐘表,整個(gè)計(jì)算機(jī)世界里的居民能夠掐著時(shí)間過(guò)日子全都仰仗它,你們?nèi)祟?lèi)把它叫做晶振。
這個(gè)鐘表每隔 66000000 分之一秒就會(huì)報(bào)一次時(shí),比人類(lèi)的鐘表不知道快到哪里去了。
早些年還是夠用的,不過(guò)隨著我們 CPU 工廠生產(chǎn)效率的不斷提升,我們多次向晶振提出提升報(bào)時(shí)的精度,想讓他報(bào)時(shí)報(bào)的的更快一些,不過(guò)都被拒絕了。給我們的理由是內(nèi)存那家伙聯(lián)合主板上其他單位帶頭反對(duì),說(shuō)他們受條件限制,沒(méi)辦法像我們這么快。
靠人不如靠己,為此,咱們工廠專(zhuān)門(mén)設(shè)立了一個(gè)叫倍頻器的部門(mén)進(jìn)一步把這個(gè)報(bào)時(shí)細(xì)分,達(dá)到了 3600000000 分之 1 秒,作為我們工廠內(nèi)部工作作息的時(shí)鐘周期,這數(shù)字實(shí)在是太長(zhǎng)了,人類(lèi)為了好記,取了一個(gè)叫主頻的名字,表示 1 秒鐘報(bào)時(shí)的次數(shù),就是 3.6GHz。
一不小心扯遠(yuǎn)了,這次想給大家說(shuō)一件事兒??????
指令依賴
我們這座工廠的任務(wù)就是不斷的執(zhí)行人類(lèi)編寫(xiě)的程序指令,咱廠里有 8 個(gè)車(chē)間,大家開(kāi)足了馬力,就能同時(shí)執(zhí)行 8 個(gè)線程,那速度那叫一個(gè)快。
可是廠里的老板還是嫌我們不夠快,那天居然告訴我們要每個(gè)車(chē)間執(zhí)行兩個(gè)線程,實(shí)現(xiàn)八核十六線程,是要把我們的勞動(dòng)力壓榨到極致!我們都滿肚子怨言??????
事情的起因是這樣的~~
有一次,我們一號(hào)車(chē)間的四人組趁著工作的空當(dāng),又斗起了地主,突然領(lǐng)導(dǎo)過(guò)來(lái)視察。
“你們?cè)趺从衷谕妫渴枪ぷ髁坎伙柡蛦??”,?jiàn)我們幾個(gè)閑著,領(lǐng)導(dǎo)一下就不高興了。
我趕緊上前解釋到:“不好意思領(lǐng)導(dǎo),咱們剛剛執(zhí)行了一條指令,需要內(nèi)存中的一塊數(shù)據(jù),剛好又不在緩存中,所以找內(nèi)存那家伙要數(shù)據(jù)去了,這不您也知道那家伙向來(lái)很慢,我們閑著也是閑著所以就稍微放松了一下??????”
聽(tīng)了我的話領(lǐng)導(dǎo)一下皺起了眉頭,“還給我狡辯,廠里現(xiàn)在不是用上了亂序執(zhí)行技術(shù)嗎?有這閑功夫你們可以先執(zhí)行后面的指令啊”
“這我們當(dāng)然知道,這不您看,我們把后面那幾條指令也都處理了,現(xiàn)在遇到了一條沒(méi)法提前執(zhí)行的指令才停下來(lái)的”
領(lǐng)導(dǎo)看了一下問(wèn)到:“為啥那條不能提前執(zhí)行?”
“那是一個(gè)加法指令,加數(shù)依賴于現(xiàn)在正在處理的指令的運(yùn)算結(jié)果呢,所以內(nèi)存那家伙不來(lái)消息,我們只能擱置著了”,我繼續(xù)解釋到。
領(lǐng)導(dǎo)聽(tīng)完,一臉不高興的離開(kāi)了。
資源閑置
過(guò)了幾天,領(lǐng)導(dǎo)又來(lái)到咱們一號(hào)車(chē)間來(lái)了,也不知道怎么回事,這明明有八個(gè)車(chē)間,領(lǐng)導(dǎo)怎么老愛(ài)往我們這邊跑。
不過(guò)這一次,我們沒(méi)有斗地主,正在辛辛苦苦的工作著。
當(dāng)時(shí),我正在執(zhí)行一個(gè)浮點(diǎn)數(shù)運(yùn)算,領(lǐng)導(dǎo)過(guò)來(lái)一看,拍了拍我的肩膀說(shuō)到:“喲,阿 Q,忙著吶,這是在做什么啊?”
我笑著說(shuō)到:“領(lǐng)導(dǎo)好,我剛剛用浮點(diǎn)數(shù)運(yùn)算電路單元做了一個(gè)浮點(diǎn)數(shù)乘法,正在等待計(jì)算結(jié)果呢”
領(lǐng)導(dǎo)點(diǎn)了點(diǎn)頭,往周邊巡視一圈,指著一堆設(shè)備問(wèn)到:“這一堆是什么?”
“哦,那是整數(shù)運(yùn)算電路單元,這條指令用不到它”
領(lǐng)導(dǎo)再次點(diǎn)了點(diǎn)頭,若有所思的離開(kāi)了。
超線程技術(shù)
又過(guò)了幾天,廠里召開(kāi)了一次會(huì)議,八個(gè)車(chē)間都派了代表參會(huì)。
會(huì)上,領(lǐng)導(dǎo)發(fā)話了:“前段時(shí)間我到各個(gè)車(chē)間視察,發(fā)現(xiàn)現(xiàn)在咱們廠里資源浪費(fèi)的情況很?chē)?yán)重!”
二號(hào)車(chē)間的虎子一聽(tīng)就坐不住了,“領(lǐng)導(dǎo),咱們大家伙工作都挺賣(mài)力的,哪里有浪費(fèi)啊?”
領(lǐng)導(dǎo)瞥了一眼,繼續(xù)說(shuō)到:“一方面,廠里的計(jì)算資源 —— 電路設(shè)備得不到充分利用,另一方面,又因?yàn)閮?nèi)存讀取緩慢、指令依賴等方面的原因,浪費(fèi)大家太多時(shí)間花在等待上”
八號(hào)車(chē)間的代表向來(lái)愛(ài)拍馬屁,接著領(lǐng)導(dǎo)的話問(wèn)到:“領(lǐng)導(dǎo)是有什么指示?我們八號(hào)車(chē)間絕對(duì)支持!”
“我們幾個(gè)管理層經(jīng)過(guò)討論,決定讓你們一個(gè)車(chē)間由現(xiàn)在執(zhí)行一個(gè)線程,變成執(zhí)行兩個(gè)線程!”
領(lǐng)導(dǎo)這話一出,會(huì)場(chǎng)竊竊私語(yǔ)此起彼伏?;⒆悠^小聲對(duì)我說(shuō)到:“這資本家改不了剝削的本色,這壓榨的也太狠了!”
領(lǐng)導(dǎo)咳嗽了幾聲,會(huì)場(chǎng)再次安靜了下來(lái)。
我起身問(wèn)到:“領(lǐng)導(dǎo),這咱們一個(gè)車(chē)間怎么能執(zhí)行兩個(gè)線程呢,每個(gè)車(chē)間的寄存器只有一套,這用起來(lái)豈不是要亂掉?”
“這個(gè)你不用擔(dān)心,我們會(huì)給每個(gè)車(chē)間配兩套寄存器!”
五號(hào)車(chē)間的代表一聽(tīng)說(shuō)到:“要不再給我們添點(diǎn)人手吧,這樣效率肯定提升快!”
領(lǐng)導(dǎo)一聽(tīng)笑著說(shuō)到:“還添人手?要不要再給你們添點(diǎn)運(yùn)算設(shè)備?那我不如再增加幾個(gè)車(chē)間,還開(kāi)這會(huì)干嘛?這次會(huì)議的主題就是如何讓我們現(xiàn)有的資源得到最大程度的利用,減少浪費(fèi)現(xiàn)象!”
會(huì)場(chǎng)一度陷入了尷尬又緊張的氛圍。
還是虎子打破了安靜,“領(lǐng)導(dǎo),這兩個(gè)線程的工作該怎么開(kāi)展,我們心底沒(méi)有數(shù)??!”
領(lǐng)導(dǎo)滿意的笑了一下:“這才是你們?cè)搯?wèn)的問(wèn)題嘛!每個(gè)車(chē)間回去重新分配一下工作,劃分為兩套班子,各自維護(hù)一套寄存器,對(duì)外宣稱(chēng)你們是兩個(gè)不同的物理核心,但各車(chē)間的緩存和計(jì)算資源還是只有一套。你們內(nèi)部協(xié)調(diào)好,在執(zhí)行代碼指令的時(shí)候,充分利用等待的時(shí)間執(zhí)行另一個(gè)線程的指令,這樣也不用擔(dān)心指令依賴的問(wèn)題?!?/p>
大家一邊聽(tīng)一邊做著筆記。
“還有,如果遇到資源閑置的情況,也可以同時(shí)執(zhí)行兩個(gè)線程的指令。比如一個(gè)線程是執(zhí)行整數(shù)運(yùn)算指令,一個(gè)線程是執(zhí)行浮點(diǎn)數(shù)運(yùn)算指令,就可以一起來(lái),讓工廠的計(jì)算資源充分用起來(lái),別閑置?!?/p>
看我們都認(rèn)真的記著筆記,領(lǐng)導(dǎo)露出了滿意的笑容,“都記好了吧,我們給這項(xiàng)革命性的技術(shù)取了個(gè)特別酷的名字,叫超線程技術(shù)!”
散會(huì)后,大家都紛紛抱怨,把大家逼得這么緊,以后上班看來(lái)是沒(méi)法摸魚(yú)了,這日子真是越來(lái)越難過(guò)了。
毀譽(yù)參半的超線程
不過(guò),抱怨歸抱怨,大家還是得按照新規(guī)來(lái)執(zhí)行。
很快,廠里就落地了這項(xiàng)技術(shù),咱們一個(gè)車(chē)間搖身一變,變成了倆,咱們?cè)瓉?lái)八核八線程的 CPU 一下變成了八核十六線程。操作系統(tǒng)那幫人都被我們給騙了,還以為咱們是十六核的 CPU 呢!
不過(guò)畢竟計(jì)算資源還是只有一份,遇到兩個(gè)線程都要使用同樣的計(jì)算單元時(shí),還是得要排隊(duì),還要花時(shí)間在兩個(gè)線程之前的協(xié)調(diào)工作上,所以整體工作效率的根本沒(méi)有 2 倍,絕大多數(shù)時(shí)候能提升個(gè) 20%-30% 就不錯(cuò)了。
不僅如此,車(chē)間改造后,增加了新的邏輯電路單元,咱這 CPU 工廠的功耗也更大了,工廠門(mén)口那座巨大的風(fēng)扇也得加大馬力給我們降溫了。
廠子里對(duì)這項(xiàng)技術(shù)的反對(duì)聲音開(kāi)始不絕于耳。
不過(guò)后來(lái)發(fā)生了一件事,讓人們不得不關(guān)閉這項(xiàng)技術(shù)。聽(tīng)聞這個(gè)消息,我們都樂(lè)開(kāi)了花,看來(lái)又可以繼續(xù)摸魚(yú)了??????
彩蛋
每當(dāng)有網(wǎng)絡(luò)數(shù)據(jù)包到來(lái),網(wǎng)卡那家伙就通過(guò)中斷告訴我們 CPU 去處理。
可咱明明有 8 個(gè)車(chē)間,它非得一個(gè)勁的只給我們車(chē)間發(fā)中斷,搞得我們都沒(méi)法好好工作。
終于,我忍不住了??????
預(yù)知后事如何,請(qǐng)關(guān)注后續(xù)精彩??????
說(shuō)明:
超線程技術(shù)出現(xiàn)時(shí)間其實(shí)早于多核技術(shù)。本故事僅為敘述方便,不代表二者真實(shí)的發(fā)展順序。
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。