什麼?一個核同時執行兩個線程?

CPU裏的時間

Hi,很久不見,我是CPU一號車間的阿Q,不認識個人話,能夠看看:完了!CPU一味求快出事兒了!編程

真的是很久不見了,人類有個說法叫天上一天,地上一年,而在咱們的世界裏,人類一天,咱們不知要過多少年~~跨域

圖源網絡,侵刪

在我所在的CPU這座工廠裏,時間的概念有些不太同樣。工廠大門外的中央廣場上掛着一個大大的鐘表,整個計算機世界裏的居民可以掐着時間過日子全都仰仗它,大家人類把它叫作晶振緩存

這個鐘錶每隔66000000分之一秒就會報一次時,比人類的鐘表不知道快到哪裏去了。網絡

早些年仍是夠用的,不過隨着咱們CPU工廠生產效率的不斷提高,咱們屢次向晶振提出提高報時的精度,想讓他報時報的的更快一些,不過都被拒絕了。給咱們的理由是內存那傢伙聯合主板上其餘單位帶頭反對,說他們受條件限制,沒辦法像咱們這麼快。編程語言

圖源網絡,侵刪

靠人不如靠己,爲此,我們工廠專門設立了一個叫倍頻器的部門進一步把這個報時細分,達到了3600000000分之1秒,做爲咱們工廠內部工做做息的時鐘週期,這數字實在是太長了,人類爲了好記,取了一個叫主頻的名字,表示1秒鐘報時的次數,就是3.6GHz。操作系統

一不當心扯遠了,此次想給你們說一件事兒······線程

指令依賴

咱們這座工廠的任務就是不斷的執行人類編寫的程序指令,咱廠裏有8個車間,你們開足了馬力,就能同時執行8個線程,那速度那叫一個快。3d

但是廠裏的老闆仍是嫌咱們不夠快,那天竟然告訴咱們要每一個車間執行兩個線程,實現八核十六線程,是要把咱們的勞動力壓榨到極致!咱們都滿肚子怨言······code

事情的原由是這樣的~~blog

有一次,咱們一號車間的四人組趁着工做的空當,又鬥起了地主,忽然領導過來視察。

圖源網絡,侵刪

「大家怎麼又在玩?是工做量不飽和嗎?」,見咱們幾個閒着,領導一下就不高興了。

我趕忙上前解釋到:「很差意思領導,我們剛剛執行了一條指令,須要內存中的一塊數據,恰好又不在緩存中,因此找內存那傢伙要數據去了,這不您也知道那傢伙向來很慢,咱們閒着也是閒着因此就稍微放鬆了一下······」

聽了個人話領導一下皺起了眉頭,「還給我狡辯,廠裏如今不是用上了亂序執行技術嗎?有這閒功夫大家能夠先執行後面的指令啊」

「這咱們固然知道,這不您看,咱們把後面那幾條指令也都處理了,如今遇到了一條無法提早執行的指令才停下來的」

領導看了一下問到:「爲啥那條不能提早執行?」

「那是一個加法指令,加數依賴於如今正在處理的指令的運算結果呢,因此內存那傢伙不來消息,咱們只能擱置着了」,我繼續解釋到。

領導聽完,一臉不高興的離開了。

資源閒置

過了幾天,領導又來到我們一號車間來了,也不知道怎麼回事,這明明有八個車間,領導怎麼老愛往咱們這邊跑。

不過這一次,咱們沒有鬥地主,正在辛辛苦苦的工做着。

當時,我正在執行一個浮點數運算,領導過來一看,拍了拍個人肩膀說到:「喲,阿Q,忙着吶,這是在作什麼啊?」

我笑着說到:「領導好,我剛剛用浮點數運算電路單元作了一個浮點數乘法,正在等待計算結果呢」

圖源網絡,侵刪

領導點了點頭,往周邊巡視一圈,指着一堆設備問到:「這一堆是什麼?」

「哦,那是整數運算電路單元,這條指令用不到它」

領導再次點了點頭,如有所思的離開了。

超線程技術

又過了幾天,廠裏召開了一次會議,八個車間都派了表明參會。

圖源網絡,侵刪

會上,領導發話了:「前段時間我到各個車間視察,發現如今我們廠裏資源浪費的狀況很嚴重!」

二號車間的虎子一聽就坐不住了,「領導,我們你們夥工做都挺賣力的,哪裏有浪費啊?」

領導瞥了一眼,繼續說到:「一方面,廠裏的計算資源——電路設備得不到充分利用,另外一方面,又由於內存讀取緩慢、指令依賴等方面的緣由,浪費你們太多時間花在等待上」

八號車間的表明向來愛拍馬屁,接着領導的話問到:「領導是有什麼指示?咱們八號車間絕對支持!」

「咱們幾個管理層通過討論,決定讓大家一個車間由如今執行一個線程,變成執行兩個線程!

圖源網絡,侵刪

領導這話一出,會場竊竊私語此起彼伏。虎子偏頭小聲對我說到:「這資本家改不了剝削的本色,這壓榨的也太狠了!」

領導咳嗽了幾聲,會場再次安靜了下來。

我起身問到:「領導,這我們一個車間怎麼能執行兩個線程呢,每一個車間的寄存器只有一套,這用起來豈不是要亂掉?」

「這個你不用擔憂,咱們會給每一個車間配兩套寄存器!」

五號車間的表明一據說到:「要再也不給咱們添點人手吧,這樣效率確定提高快!」

領導一聽笑着說到:「還添人手?要不要再給大家添點運算設備?那我不如再增長几個車間,還開這會幹嗎?此次會議的主題就是如何讓咱們現有的資源獲得最大程度的利用,減小浪費現象!」

會場一度陷入了尷尬又緊張的氛圍。

仍是虎子打破了安靜,「領導,這兩個線程的工做該怎麼開展,咱們心底沒有數啊!」

領導滿意的笑了一下:「這纔是大家該問的問題嘛!每一個車間回去從新分配一下工做,劃分爲兩套班子,各自維護一套寄存器,對外宣稱大家是兩個不一樣的物理核心,但各車間的緩存和計算資源仍是隻有一套。大家內部協調好,在執行代碼指令的時候,充分利用等待的時間執行另外一個線程的指令,這樣也不用擔憂指令依賴的問題。」

你們一邊聽一邊作着筆記。

圖源網絡,侵刪

「還有,若是遇到資源閒置的狀況,也能夠同時執行兩個線程的指令。好比一個線程是執行整數運算指令,一個線程是執行浮點數運算指令,就能夠一塊兒來,讓工廠的計算資源充分用起來,別閒置。」

看咱們都認真的記着筆記,領導露出了滿意的笑容,「都記好了吧,咱們給這項革命性的技術取了個特別酷的名字,叫超線程技術!」

散會後,你們都紛紛抱怨,把你們逼得這麼緊,之後上班看來是無法摸魚了,這日子真是愈來愈難過了。

譭譽參半的超線程

不過,抱怨歸抱怨,你們仍是得按照新規來執行。

很快,廠裏就落地了這項技術,我們一個車間搖身一變,變成了倆,我們原來八核八線程的CPU一下變成了八核十六線程。操做系統那幫人都被咱們給騙了,還覺得我們是十六核的CPU呢!

圖源網絡,侵刪

不過畢竟計算資源仍是隻有一份,遇到兩個線程都要使用一樣的計算單元時,仍是得要排隊,還要花時間在兩個線程以前的協調工做上,因此總體工做效率的根本沒有2倍,絕大多數時候能提高個20%-30%就不錯了。

不只如此,車間改造後,增長了新的邏輯電路單元,咱這CPU工廠的功耗也更大了,工廠門口那座巨大的風扇也得加大馬力給咱們降溫了。

廠子裏對這項技術的反對聲音開始不絕於耳。

圖源網絡,侵刪

不事後來發生了一件事,讓人們不得不關閉這項技術。聽聞這個消息,咱們都樂開了花,看來又能夠繼續摸魚了······

彩蛋

每當有網絡數據包到來,網卡那傢伙就經過中斷告訴咱們CPU去處理。

可咱明明有8個車間,它非得一個勁的只給咱們車間發中斷,搞得咱們都無法好好工做。

終於,我忍不住了······

預知後事如何,請關注後續精彩······


說明

超線程技術出現時間其實早於多核技術。本故事僅爲敘述方便,不表明兩者真實的發展順序。

往期TOP5文章

真慘!連各大編程語言都擺起地攤了!

由於一個跨域請求,我差點丟了飯碗

完了!CPU一味求快出事兒了!

哈希表哪家強?幾大編程語言吵起來了!

一個HTTP數據包的奇幻之旅

相關文章
相關標籤/搜索