深入理解計算機系統 併發與並行

2021-07-12 03:18:32 字數 2174 閱讀 4790

數字計算機的整個歷史中,有兩個需求是驅動進步的持續動力:乙個是我們想要計算機做的更多,另乙個是我們想要計算機執行的更快。當處理器同時能夠做更多事情時,這兩個因素都會改進。併發(concurrenccy)是乙個通用的概念,指乙個同時具有多個活動的系統;而並行(parallelism)指的是用併發是乙個系統執行的更快。併發可以在計算機系統的多個層次上運用。在此,我們按照系統層次結構中由高到低的順序重點強調了這三個層次。

一、執行緒級併發

構建程序這個抽象,我們能夠設計出同時執行多個程式的系統,這就導致了併發。使用執行緒,我們甚至能夠在乙個程序中執行多個控制流。傳統意義上,這種併發執行只是模擬出來的,通過是一台計算機在它正在執行的程序間快速切換的方式實現的,就好像乙個雜技演員保持多個球在空中飛舞一樣。這種併發試下允許多個使用者同時與系統互動,例如,我們可以一一邊上網一邊聽歌,還能打字。在以前,即使處理器必須在多個任務間切換,大多是實際的計算也都是由乙個處理器來完成的。這種配置稱為單處理器系統。(上次有乙個面試官問我,單核的cpu如何實現多執行緒,答案應該就是上面這樣吧)。

當構建乙個由單作業系統核心控制的多處理器組成的系統時,我們就得到了乙個多處理器系統。其實從20實際80年代開始,在大規模的計算中就採用這種系統,但是隨著發展,隨著多核處理器和超執行緒(hyperthreading)的出現,這種系統才變得常見。

多核處理器是將多個cpu(稱為「核」)整合到乙個積體電路晶元上。如下圖inter core i7處理器的組成結構,其中微處理器晶元有4個cpu核,每個核都有自己的l1和l2告訴快取。但是他們共享更高層次的告訴快取以及到主存的介面。

超執行緒:大家也叫它同時多執行緒,是一項允許乙個cpu執行多個控制流的技術。它涉及cpu某些硬體有多個備份,比如程式計數器和暫存器檔案;而其他的硬體部分只有乙份,比如執行浮點運算的單元。常規的處理器大約需要20000個時鐘週期做不同的執行緒間的切換,而超執行緒的處理器可以在單個週期的基礎上決定要執行哪乙個執行緒。這使得cpu能夠更好的利用它的處理資源。例如,假設乙個執行緒必須等到某些資料被裝載到快取記憶體中,那cpu就可以繼續去執行另乙個執行緒。舉個例子,intel core i7處理器可以讓乙個核執行兩個執行緒,所以4核的系統實際上可以並行的執行8個執行緒。

多處理器的使用可以從兩個方面提高系統效能。

首先,它減少了在執行多工時模擬併發的需要。正如前面提到的,即使是只有乙個使用者使用的個人計算機也需要併發的執行多個活動。其次,它可以使應用程式執行的更快。當然,這必須要求程式是以多執行緒的方式來書寫的,這些執行緒可以併發的高效執行。

二、指令級並行

在較低的抽象層次上,現代處理器可以同時執行多條指令的屬性稱為指令級並行。早起的微處理器,如2023年的intel 8086,需要多個(通常是3~10個)機器週期來執行一條指令。比較先進的處理器可以保持每個時鐘週期2~4調指令的執行速度。其實每條指令從開始到結束需要長得多的時間,大約20個或者更多的週期,但是處理器使用了非常多的聰明技巧來同時處理多達100條指令。在流水線中,將執行一條指令所需要的活動劃分為不同的步驟,將處理器的硬體組織成一系列的階段,每個階段執行乙個步驟。這些階段可以並行的操作。用來處理不同指令的不同部分。通過一些簡單的硬體設計,它能夠達到接近乙個時鐘週期一條指令的執行速率。

如果處理器可以達到比乙個週期一條指令更快的執行速率,就稱之為超標量處理器。大多數現代處理器都支援超標量操作。

三、單指令、多資料並行

在最低層次上,許多現代處理器擁有特殊的硬體,允許一條指令產生多個可以並行執行的操作。這種方式稱為單指令、多資料,即simd並行。例如,較新的intel和amd處理器都具有並行執行對4對單精度浮點數做加法的指令。

提供這些simd指令多事為了提高處理影響、聲音和視屏資料應用的執行速度。雖然有些編譯器試圖從c程式中自動抽取simd並行性,但是更可靠的方法是使用編譯器支援的特殊向量資料型別來寫程式。比如gcc就支援向量資料型別。

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...

《深入理解計算機系統》

知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...

深入理解計算機系統

系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...