1. 程式人生 > 其它 >計算機系統結構的基礎知識

計算機系統結構的基礎知識

計算機系統結構的基本概念

計算機系統的層次結構

  1. 計算機系統= 硬體/韌體 + 軟體
  2. 計算機語言從低階向高階發展:高一級語言的語句相對於低一級語言來說功能更強。,更便於應用,但又都以低階語言為基礎。
  3. 從計算機語言的角度,把計算機系統按照功能劃分成多層次結構。
    • 物理機:用硬體或韌體實現的機器
    • 虛擬機器:由軟體實現的機器,虛擬機器中有些操作可以由硬體或韌體實現。韌體是具有軟體功能的硬體。
    • 各機器級的實現主要靠翻譯或解釋或兩者結合。
      • 翻譯:先用轉換程式將高一級機器上的程式轉換成低一級機器上等效的程式,然後再在這低一級機器上執行,實現程式的功能。
      • 解釋:對於高一級機器上的程式中的每一條語句或指令,都是轉去執行低一級機器上的一段等效程式。執行完後,再去高一級機器取下一條語句或指令,再進行解釋執行,如此反覆,直到解釋執行完整個程式。
    • 解釋執行比編譯後再執行所花的時間多,但佔用的儲存空間較少。

計算機系統結構的定義

  1. 傳統機器程式設計師所看到的計算機屬性,即概念性結構與功能特性。
  2. 按照計算機系統的多級層次結構,不同級程式設計師所看到的計算機具有不同的屬性。
  3. 透明性:在計算機技術中,把這種本來存在的事物或屬性,但從某種角度看又好像不存在的概念稱為透明性。
  4. 廣義的系統結構定義:指令系統結構、組成、硬體。

計算機系統結構的實質:確定計算機系統中軟硬體的介面,介面之上是軟體實現的功能,介面之下是硬體和韌體實現的功能。

計算機組成和計算機實現

  1. 計算機系統結構:計算機系統的軟、硬體的介面,即機器語言程式設計師所看到的傳統機器所具有的屬性。
  2. 計算機組成:計算機系統結構的邏輯實現。
    • 包含物理機器級中的資料流和控制流的組成以及邏輯設計等。
    • 著眼於物理機器級內各事件的排序方式與控制方式、各部件的功能以及各部件之間的聯絡。
  3. 計算機實現:計算機組成的物理實現
    • 包括處理機、主存等部件的物理結構。器件的整合度和速度,模組、外掛、底板的劃分與連線,訊號傳輸,電源、冷卻以及整機裝配技術等。
    • 著眼於器件技術(起主導作用)、微組裝技術。

具有相同系統結構的計算機可以採用不同的計算機組成。同一種計算機組成又可以採用多種不同的計算機實現。

  1. 系列機:由同一廠家生產的具有相同系統結構,但具有不同組成和實現的一系列不同型號的機器。

計算機系統結構的分類

常見的計算機系統結構分類法有3種:Flynn分類法馮氏分類法Handler分類法

  1. Flynn分類法

    • 按照指令流和資料流的多倍性進行分類。指令流:計算機執行的指令序列;資料流:由指令流呼叫的資料序列。多倍性:在系統最受限的部件上,同時處於同一執行階段的指令或資料的最大數目。
    • 把計算機系統的結構分為4
      • 單指令流單資料流SISD
      • 單指令流多資料流SIMD
      • 多指令流單資料流MISD
      • 多指令流多資料流MIMD
    • 4類計算機的基本結構
      • IS:指令流
      • DS:資料流
      • CS:控制流
      • CU:控制部件
      • PU:處理部件
      • MMSM:儲存器
  2. 馮氏分類法

    • 用系統的最大並行度對計算機進行分類。最大並行度:計算機系統在單位時間內能夠處理的最大的二進位制位數。如:用平面直角座標系中的一個點代表一個計算機系統,其橫座標表示字寬(n位),縱座標表示一次能同時處理的數字(m字),\(m \times n\)就表示了其最大並行度。

    • 4類不同最大並行度的計算機系統結構

      • 字串位串:\(n = 1 , m = 1\):第一代計算機發展初期的純序列計算機。
      • 字串位並:\(n > 1 , m = 1\):傳統的單處理機,同時處理單個字的多個位。
      • 字並位串:\(n = 1 , m > 1\):同時處理多個字的同一位。
      • 字並位並:\(n > 1 , m > 1\):同時處理多個字的多個位。
    • 平均並行度:與最大並行度密切相關的一個指標。取決於系統的運用程度,與應用程式有關。

      假設每個時鐘週期內能同時處理的二進位制位數為\(P_i\),則\(T\)個時鐘週期內的平均並行度為:

      \[p_{a} = \frac{\sum\limits_{i = 1}^{T}p_i}{T} \]

      系統在\(T\)個時鐘週期內的平均利用率定義為:

      \[\mu = \frac{P_a}{P_m} = \frac{\sum\limits_{i = 1}^Tp_i}{TP_m} \]
  3. Handler分類法

    • 根據並行度和流水線對計算機進行分類。
    • 把計算機的硬體結構分成3個層次:
      • 程式控制部件(PCU)的個數k
      • 算術邏輯部件(ALU)或處理部件(PE)的個數d
      • 每個算術邏輯部件包含基本邏輯線路(ELC)的套數w
    • 用公式表示:t(系統型號) = (k , d , w)
    • 進一步改進:t(系統型號)=(k x k' , d x d' , w x w')
      • k':巨集流水線中程式控制部件的個數。
      • d':指令流水線中算術邏輯部件的個數。
      • w':操作流水線中基本邏輯線路的套數。

計算機系統的設計

計算機系統設計的定量原理

4個定量原理

以經常性事件為重點

  • 對經常發生的情況採用優化方法的原則進行選擇,以得到更多的總體上的改進。
  • 優化是指分配更多的資源、達到更高的效能或者分配更多的電能等。

Amdahl定律

加快某部件執行速度所能獲得的系統性能加速比,受限於該部件的執行時間佔系統中總執行時間的百分比。

系統性能加速比:

\[加速比 = \frac{系統性能_{改進後}}{系統性能_{改進前}} = \frac{總執行時間_{改進前}}{總執行時間_{改進後}} \]

加速比依賴於兩個因素:

  • 可改進比例\(F_e\):在改進前的系統中,可改進部分的執行時間在總的執行時間中所佔的比例,它總是小於等於1的。 例如:一個需要執行60秒的程式中有20秒的運算可以加速,那麼這個比例就是\(\frac{20}{60}\)
  • 部件加速比\(S_e\):可改進部分改進以後效能提高的倍數。它是改進前所需的執行時間與改進後執行時間的比。一般情況下部件加速比是大於1的。例如:若系統改進後,可改進部分的執行時間是2秒,而改進前其執行時間是5秒,則部件加速比為\(\frac{5}{2}\)

改進後程序的總執行時間\(T_n\)

\[T_n = T_0(1 - F_e + \frac{F_e}{S_e}) \]

\(T_0\):改進前整個程式的執行時間。\(1-F_e\):不可改進比例。

系統加速比\(S_n\)為改進前與改進後總執行時間之比:

\[S_n = \frac{T_0}{T_n} = \frac{1}{(1 - F_e) + \frac{F_e}{S_e}} \]

例1.1 將計算機系統中某一功能的處理速度加快15倍,但該功能的處理時間僅佔整個系統執行時間的40%,則採用此增強功能方法後,能使整個系統的效能提高多少?

:由題可知:\(F_e = 40\% = 0.4 , S_e = 15\)

根據Amdahl定律可知:

\[S_n = \frac{1}{(1 - F_e) + \frac{F_e}{S_e}} = \frac{1}{(1 - 0.4) + \frac{0.4}{15}} \approx 1.6 \]

採用此增強功能方法後,能使整個系統的效能提高到原來的\(1.6\)倍。

例1.2 某計算機系統採用浮點運算部件後,使浮點運算速度提高到原來的25倍,而系統執行某一程式的整體效能提高到原來的4倍,試計算該程式中浮點操作所佔的比例。

由題可知:\(S_e = 25 , S_n = 4\)

根據Amdahl定律可知:

\[4 = \frac{1}{1 - F_e + \frac{F_e}{25}} \]

由此可得:\(F_e = 78.1\%\)。即程式中浮點操作所佔的比例為\(78.1\%\)

Amdahl定律:一種效能改進的遞減規則,即如果僅僅對計算任務中的一部分做效能改進,則改進得越多,所得到的總體效能的提升就越有限。

重要推論:如果只針對整個任務的一部分進行改進和優化,那麼所獲得的加速比不超過:\(\frac{1}{1 - 可改進比例}\)

CPU效能公式

執行一個程式所需的CPU時間:CPU時間= 執行程式所需的時鐘週期數 X 時鐘週期時間

其中:時鐘週期時間是系統時鐘頻率的倒數。

每條指令執行的平均時鐘週期數CPI:CPI = 執行程式所需的時鐘週期數 ÷ IC

IC:所執行的指令條數

程式執行的CPU時間可以寫成:CPU時間 = IC X CPI X 時鐘週期時間

CPU的效能取決於三個引數:

  • 時鐘週期時間:取決於硬體實現技術和計算機組成。
  • CPI : 取決於計算機組成和指令系統的結構。
  • IC:取決於指令系統的結構和編譯技術。

對CPU效能公式進一步細化:

假設:計算機系統有\(n\)種指令;第\(i\)種指令的處理時間為\(CPI_i\);在程式中第\(i\)種指令出現的次數為\(IC_i\),則:CPU時鐘週期數 = \(\sum\limits_{i = 1}^{n}(CPI_i \times IC_i)\)

CPU時間 = 執行程式所需的時鐘週期數 x 時鐘週期時間 = \(\sum\limits_{i = 1}^{n}(CPI_i \times IC_i)\times 時鐘週期時間\)

CPI可以表示為:\(CPI = \frac{時鐘週期數}{IC} = \frac{\sum\limits_{i = 1}^{n}(CPI_i \times IC_i)}{IC} = \sum\limits_{i = 1}^{n}(CPI_i \times \frac{IC_i}{IC})\)

其中\(\frac{IC_i}{IC}\)反映了第\(i\)種指令在程式中所佔的比例。

例1.3 假設FP指令的比例為25%,其中,FPSQR佔全部指令的比例為2%FP操作的CPI4FPSQR操作的CPI20 ,其他指令的平均CPI1.33。現有兩種改進方案,第一種是把FPSQR操作的CPI減至2,第二種是把所有的FP操作的CPI減至2,試比較兩種方案對系統性能的提高程度。

沒有改進前,每條指令的平均時鐘週期CPI為:

\[CPI = \sum\limits_{i = 1}^{n}(CPI \times \frac{IC_i}{IC}) = (4 \times 25\%) + (1.33 \times 75\%) = 2 \]

採用第一種方案FPSQR操作的CPI\(CPI_{FPSQR} = 20\)減至\(CPI_{FPSQR} = 2\),則整個系統的指令平均時鐘週期數為:

\[CPI_1 = CPI - (CPI_{FPSQR} - CPI_{FPSQR}') \times 2\%= 2 - (20 - 2) \times 2\% = 1.64 \]

採用第二種方案 所有FP操作的CPI\(CPI_{FP} = 4\)減至\(CPI_{FP} = 2\),則整個系統的指令平均時鐘週期數為:

\[CPI_2 = CPI - (CPI_{FP} - CPI_{FP}') \times 25\% = 2 - (4 - 2) \times 25\% = 1.5 \]

從降低整個系統的指令平均時鐘週期的程度來看,第二種方案優於第一種方案。

例1.4 考慮條件分支指令的兩種不同設計方法:

  • \(CPU_1\):通過比較指令設定條件碼,然後測試條件碼進行分支。
  • \(CPU_2\):在分支指令中包括比較過程。

在這兩種CPU中,條件分支指令都佔用2個時鐘週期,而所有其它指令佔用1個時鐘週期。對於\(CPU_1\),執行的指令中分支指令佔30%;由於每條分支指令之前都需要有比較指令,因此比較指令也佔30%。由於\(CPU_1\)在分支時不需要比較,因此\(CPU_2\)的時鐘週期時間是\(CPU_1\)1.35倍。問:哪一個CPU更快?如果\(CPU_2\)的時鐘週期時間只是\(CPU_1\)1.15倍,哪一個\(CPU\)更快呢?

我們不考慮所有系統問題,所以可用CPU效能公式。佔用2個時鐘週期的分支指令佔總指令的30%,剩下的指令佔用1個時鐘週期。

所以\(CPI_1 = 0.3 \times 2 + 0.70 \times 1 = 1.3\)

\(CPU_1\)效能為:\(總CPU時間_1 = IC_1 \times 1.3 \times 時鐘週期_1\)

根據假設有:\(時鐘週期_2 = 1.35 \times 時鐘週期_1\)

\(CPU_2\)中沒有獨立的比較指令,所以\(CPU_2\)的程式量為\(CPU_1\)70%,分支指令的比例為:\(\frac{30\%}{70\%} = 42.8\%\)

這些分支指令佔用2個時鐘週期,而剩下的57.2%的指令佔用1個時鐘週期,因此:

\[CPI_2 = 0.428 \times 2 + 0.572 \times 1 = 1.428 \]

因為\(CPU_2\)不執行比較,故:\(IC_2 = 0.7 \times IC_1\)

因此\(CPU_2\)效能為:

\[\begin{align} 總CPU時間_2 &= IC_2 \times CPI_2 \times 時鐘週期_2\\ &=0.7 \times IC_1 \times 1.428 \times 1.35 \times 時鐘週期_1\\ &=1.349 \times IC_1 \times 時鐘週期_1 \end{align} \]

在這些假設之下,儘管\(CPU_2\)執行指令條數較少,\(CPU_1\)因為有著更短的時鐘週期,所以\(CPU_1\)快。

如果\(CPU_2\)的時鐘週期時間僅僅是\(CPU_1\)1.15倍,則\(時鐘週期_2 = 1.15\times 時鐘週期_1\)

\(CPU_2\)的效能為:

\[\begin{align} 總CPU時間_2 &= IC_2 \times CPI_2 \times 時鐘週期_2\\ &=0.7 \times IC_1 \times 1.428 \times 1.15 \times 時鐘週期_1\\ &=1.15 \times IC_1 \times 時鐘週期_1 \end{align} \]

因此\(CPU_2\)由於執行更少指令條數,比\(CPU_1\)執行更快。

程式的區域性性原理

程式執行時所訪問的儲存器地址分佈不是隨機的,而是相對地簇聚。

常用的一個經驗規則:程式執行時間的90%都是在執行程式中10%的程式碼。

程式的時間區域性性:程式即將用到的資訊很可能就是目前正在使用的資訊。

程式的空間區域性性:程式即將用到的資訊很可能與目前正在使用的資訊在空間上相鄰或者臨近。

計算機系統設計者的主要任務

  1. 計算機系統設計者的任務包括:指令系統的設計、資料表示的設計、功能的組織、邏輯設計以及其物理實現等。
  2. 設計一個計算機系統大致要完成3個方面的工作。
    • 確定使用者對計算機系統的功能、價格和效能的要求;
    • 軟硬體功能分配;
    • 設計出生命週期長的系統結構。

計算機系統設計的主要方法

  1. 由上往下設計:從層次結構中的最上面一級開始,逐層往下設計各層的機器;適用於專用機的設計,而不適合通用機的設計。
  2. 由下往上設計:從層次結構的最下面一級開始,逐層往上設計各層的機器;採用這種方法時,軟體技術完全處於被動狀態,這會造成軟體和硬體的脫節,使整個系統的效率降低。
  3. 從中間開始設計:“由上往下”和“由下往上”設計方法的主要缺點是軟、硬體設計分離和脫節;解決方法是綜合考慮軟、硬體的分工,從中間開始設計。“中間”:層次結構中的軟硬體的交介面,目前一般是在傳統機器語言機器級與作業系統機器級之間。從中間開始設計首先要進行軟、硬體功能分配,確定好這個介面。然後從這個介面開始,軟體設計者開始往上設計。作業系統、彙編、編譯系統等,硬體設計者開始往下設計傳統機器級、微程式機器級等。

計算機系統的效能評測

總執行時間 : 機器執行所有測試程式的總時間

平均執行時間:各測試程式執行時間的算術平均值:\(S_m = \frac{1}{n}\sum\limits_{i = 1}^{n}T_i\),其中\(T_i\)表示第\(i\)個測試程式的執行時間,\(n\)表示測試程式組中程式的個數。

加權執行時間:各測試程式執行時間的加權平均值:\(A_m = \sum\limits_{i = 1}^{n}W_i \times T_i\),其中\(W_i\)表示第\(i\)個測試程式在測試程式組中所佔的比重,且\(\sum\limits_{i = 1}^{n}W_i = 1\)\(T_i\)表示第\(i\)個測試程式的執行時間。

調和平均值法\(H_m = \frac{n}{\sum\limits_{i = 1}^{n}\frac{1}{R_i}}= \frac{n}{\sum\limits_{i = 1}^{n}T_i}\)。其中\(R_i\)表示由\(n\)個程式組成的工作負荷中執行第\(i\)個程式的速度,\(R_i = \frac{1}{T_i}\)\(T_i\)表示第\(i\)個程式的執行時間。加權調和平均公式:$H_m = (\sum\limits_{i = 1}{n}\frac{W_i}{R_i}){-1} = (\sum\limits_{i = 1}{n}W_iT_i){-1} $。

幾何平均值法:以某臺計算機的效能作為參考標準,其他計算機效能則除以該參考標準而獲得一個比值:\(G_m = \sqrt [n]{\prod\limits_{i = 1}^{n}R_i} = \sqrt [n]{\prod\limits_{i = 1}^{n}\frac{1}{T_i}}\),其中\(R_i\)表示由\(n\)個程式組成的工作負荷中執行第\(i\)個程式的速度,\(R_i = \frac{1}{T_i}\)\(T_i\)表示第\(i\)個程式的執行時間。

計算機系統結構中並行性的發展

並行性的概念

  1. 並行性:計算機系統在同一時刻或者同一時間間隔內進行多種運算或操作。只要在時間上相互重疊,就存在並行性。同時性:兩個或兩個以上的事件在同一時刻發生。併發性:兩個或兩個以上的事件在同一時間間隔內發生。
  2. 從處理資料的角度來看,並行性等級從低到高可分為:
    • 字串位串:每次只對一個字的一位進行處理。最基本的序列處理方式,不存在並行性。
    • 字串位並:同時對一個字的全部位進行處理,不同字之間是序列的。
    • 字並位串:同時對許多字的同一位進行處理,具有較高的並行性。
    • 字並位並:同時對許多字的全部位或部分位進行處理。最高一級的並行。
  3. 從執行程式的角度來看,並行性等級從低到高可分為:
    • 指令內部並行:單條指令中各微操作之間的並行。
    • 指令級並行:並行執行兩條或兩條以上的指令。
    • 執行緒級並行:並行執行兩個或兩個以上的執行緒。通常是以一個程序內派生的多個執行緒為排程單位。
    • 任務級或過程級並行:並行執行兩個或兩個以上的過程或任務(程式段)以子程式或程序為排程單元。
    • 作業或程式級並行:並行執行兩個或兩個以上的作業或程式。

提高並行性的技術途徑

  1. 時間重疊:引入時間因素,讓多個處理過程在時間上相互錯開,輪流重疊地使用同一套硬體裝置的各個部件,以加快硬體週轉而贏得速度。
  2. 資源重複:引入空間因素,以數量取勝。通過重複設定硬體資源,大幅度地提高計算機系統的效能。
  3. 資源共享:這是一種軟體方法,它使多個任務按一定時間順序輪流使用同一套硬體裝置。

習題

後面再補充