我們先來回顧一下之前的內容。CPU其實就是執(zhí)行指令的器件,指令從哪讀取要看PC寄存器,取得的指令需要翻譯成電路的控制信號,最后輸出一條指令的結果,這個結果可能會對下一條指令產(chǎn)生影響,也可能會對內存或地址空間中的某個值產(chǎn)生影響。
今天我們來講講線程、進程和CPU中的超線程。
我們通過不計其數(shù)的指令的組合,可以形成一個完整的線程。線程之間通過少量的必要的溝通組合形成一個進程,也就是我們通常意義上的應用程序。比如說音樂播放器中,音樂的播放是一個線程,用戶的操作界面是另外一個線程,兩個線程合起來構成了音樂播放器。當然,一個應用程序(進程)也可以只有一個線程。
早期的計算機不像現(xiàn)在如此發(fā)達,一般一臺計算機一段時間內只運行一個線程,比如說計算導彈軌跡什么的,在計算完成后輸出結果,線程結束。然而時代在改變,在寫這段文字的時候,我的平板一邊打開著wps,一邊播放著音樂。這兩個進程的運行是連續(xù)的、同時的。
為什么會連續(xù)、同時呢?
首先,當今的CPU的核心數(shù)早已不是單核心,一個非超線程(一會會講)的核心可以運行一個線程,現(xiàn)在的八核CPU就可以同時運行八個線程。但是這樣夠嗎?我們現(xiàn)在的電腦同一時刻需要運行的線程可遠不止八個。那看來光有核心數(shù)還不夠,我們還需要別的辦法。
第二個辦法便是分時間片。CPU運算速度極快,我們能不能讓CPU在這一些線程上反復橫跳,快速切換并輪流執(zhí)行這些個線程,營造出一種這些線程是同時進行的錯覺。具體怎么操作呢?可以設置一個“鬧鐘”,當?shù)褂嫊r結束的時候強行停止CPU當前的線程(中斷),PC寄存器跳轉到相應的地址,將當前未處理完的線程的PC值、寄存器組數(shù)據(jù)等信息用一種數(shù)據(jù)類型保存到內存中,CPU將根據(jù)操作系統(tǒng)給出的決定切換到接下來要運行的下一個線程。CPU此時要將接下來要運行的線程從內存中讀取,恢復該線程到CPU內核心中,就像它之前被切換出去時的樣子,然后開始執(zhí)行這個線程。(暫不細講)
第三個方法則是今天的主角--超線程技術。這個技術我沒記錯的話是Intel率先提出來的,他們聲稱增加5%的晶體管數(shù)量可以提升20%的性能。
具體怎么操作呢?首先我們先要考慮一下為什么一個核心只能同時運行一個線程。
1.只有一個PC寄存器,只能指示一個線程目前運行到哪了。
2.無法區(qū)分對寄存器組的操作。比如線程A要把第一個寄存器的值寫成0,B要讀出第一個寄存器的值,現(xiàn)在也就是0。但這個0是B想要的嗎?肯定不是。
3.還有一些涉及到線程的棧指針和頁表基地址的寄存器,也只能支撐一個線程的運行。
因此,超線程簡單來講就是把這些不能公用的資源加倍。而那些流水線上的操作邏輯電路、ALU單元等則可以不用復制。以此實現(xiàn)多個線程同時在一個CPU的核心中進行處理。注意,不一定一個核心只能虛擬出兩個線程,IBM的某款CPU甚至一個核心虛擬出了八個線程。
那為什么性能會提升呢?共用了這么多資源,性能應該會有所下降才對。是的,有些時候性能確實會下滑,尤其是某個線程需要很大計算量的時候,因為共用,可能會導致該線程運行速度減慢。那Intel是瞎吹他們的超線程技術嗎?并不是,往往CPU限制運行速度的不是計算而是讀寫。讀寫要做的就是等待數(shù)據(jù)的傳輸,這個過程CPU沒事可做,只能空等。但有了超線程就不一樣了,CPU可以在本該空等的地方擇機執(zhí)行另外一個線程的指令,實現(xiàn)了時間管理,縮短了兩個程序執(zhí)行的總體時間。
審核編輯:劉清
-
寄存器
+關注
關注
31文章
5343瀏覽量
120401 -
cpu
+關注
關注
68文章
10868瀏覽量
211844 -
ALU
+關注
關注
0文章
33瀏覽量
13101
發(fā)布評論請先 登錄
相關推薦
評論