電腦系統4-> 計組與體系結構1 | 基礎概念介紹
在大二上學期學習數字邏輯的過程中,我對電腦如何運作產生了興趣,因此開了這個系列來記錄自己在這方面的學習過程,此前三篇分別是:
本來嘛,按照這個系列的節奏,下一篇就是馮諾依曼結構或者是CPU的內部結構(事實上CPU的內部結構與原理已經在學了來著),再下一篇可能還會講講資訊理論,但這學期開了一門專業課叫做電腦組成原理與體系結構,正好就是在講這方面的知識,因此接下來我會結合課本和此前讀的書進行系列的更新。並將實踐CPU的記錄也更新到這個系列中來。
今天這篇主要總結課本第一章的內容,即電腦組成與體系結構的基礎概念,比如電腦科學、設計思想、程式、硬體結構、性能評估等。本文可能有很多生詞,我儘力給出合理的批註。實際上其中很多東西大學電腦基礎可能都講了,但不幸,我們學院是沒有要求這門基礎課的(取而代之的是機械製圖)。
寫的有點多,很多是對知識的複述,後續我會對文章進行精簡,系列後面也會注意。
參考資料:
-
Computer Organization and Design the 5th Edition,即電腦組成與設計硬體軟體介面第五版
-
課件,由於是英文且只是老師的思路,所以是輔助參考
00 一些前言
00-1 這門課的重要性
作為一個電腦系的學生,從學科素養上講,如果四年學習下來,不了解DRAM、流水線、多級快取、I/O介面、虛擬記憶體這些概念,實在是說不過去,從日常生活上講,學了電腦還不懂得如何選購一台性能較佳的電腦,也說不過去。
此外,這部分內容對於以後想要從事晶片設計、編譯器開發、作業系統設計等底層方向的同學是十分重要的。就算不從事這些方面,只從事軟體開發,這部分內容也會讓你對於優化程式或項目和bug調試有更深的理解,對於特定的APP可以選用合適的硬體。
舉個例子,如果我們要進行一個大型的矩陣乘法運算,我們應用這門課的知識,就可以對其進行較深層次的優化,使其性能提高200倍:
-
採用數據級並行DLP(SIMD),在第三章中學到。性能提高3.8倍;
-
採用指令級並行ILP,循環展開開發多指令發射、亂序執行硬體,第四章。性能提高2.3倍;
-
記憶體以及cache的存儲器層次優化,第五章。2.5倍;
-
執行緒級並行,在多核上並行循環,第六章。14倍;
在課程學習開始前,還可以先思考幾個問題:
-
如何評估一個程式的性能?如何改進程式性能?
-
什麼是軟硬體之間的介面?軟體如何指導硬體完成工作?
-
如何進行記憶體管理:數據是怎麼被放置的,放置在哪裡?
-
如何進行執行緒管理:如何寫一個多執行緒的程式?
-
從硬體的角度講,哪些操作實現容易或者快一點?
如果無法理解這些問題,決定優劣與否,就會墮入反覆實驗的複雜過程,反之,則是一個深入分析的科學過程。
00-2 關於電腦科學
電腦科學的發展簡史我就略過了,沒啥意思。回頭有空單出一篇這個文。
00-2-1 有關 IT | 資訊科學
IT(Inforamation Technology)是資訊理論和計算理論的結合,兩者共同奠基和定義了資訊科學,資訊理論方面有香農的資訊理論(採集定理),計算理論即圖靈機和馮-諾伊曼結構。我們學習的電腦科學與技術偏向於計算理論,資訊理論主要是電子資訊方面在學習。
當然,有機會我會了解一些資訊方面的知識。
00-2-2 電腦應用分類
-
個人電腦
強調對個人提供良好性能,價格較低,可運行第三方軟體。
一般有4-12個CPU(中央處理單元Central Process Unit),記憶體在GB級(也有TB級的)
-
伺服器
用於運行大型程式的電腦,可以支援多用戶的並行使用,一般通過網路訪問。
高端伺服器稱為超級電腦,一般由海量處理器組成(上百萬CPU),記憶體為TB級,能耗很大但很高效;用於高端科學和工程計算。
注意這裡的Gb和GB並不相同,1Gb(gigabit) == 156MB。
-
嵌入式電腦
即嵌入到其他設備里的電腦,運行預先設置好的一個或一組應用程式,是數量最多的一類電腦,用於如汽車、電視等的微處理器和處理器網路;
通常程式和硬體集成在一起,一起交付給用戶。此類電腦關鍵在於可靠性、低成本和低功耗。
許多嵌入式處理器使用處理器核,處理器核就是利用硬體描述語言(比如Verilog)描述的處理器版本,這樣設計者就能把處理器和其他硬體集成在一塊晶片上。
00-2-3 後PC時代
-
個人移動設備(Personal Mobile Device PMD)
包括手機、平板、智慧手錶、甚至智慧眼鏡;電池供電,下載軟體app進行功能實現,無鍵盤滑鼠,採用觸控螢幕以及語音作為輸入。
-
雲計算
替代傳統伺服器,依賴於倉儲規模電腦的巨型數據中心(Warehouse Scale Computer WSC),在網路上提供服務的大伺服器集群,運營商根據需求出租一部分為PMD提供軟體服務。典型例子是Web搜索和社交網路。
PMD / WSC是硬體工業的革命,通過雲計算實現的軟體即服務是軟體工業的革命。
00-3 通用電腦結構
這個課程主要研究的是通用電腦的基本結構與組成,我們每一章都會學習一部分,下圖是一個概要,後面硬體概念的部分還會提到:
當然,講到通用電腦結構,離不開馮·諾伊曼結構:
-
存儲器 / 記憶體Memory:存儲資訊(數據/程式)
-
運算器:計算、處理資訊
-
輸入設備:把資訊放入電腦的途徑
-
輸出設備:電腦輸出資訊的途徑
-
控制器:確保以上各個部分在正確的時間正確地執行它們的任務
00-4 理解程式性能
此前寫的本系列的第一篇:《程式是如何運行的》是很淺薄的,正如前面提到的學習這門課的重要性那部分所提到的例子,程式性能的理解是貫穿這個課程的核心問題之一。
程式的性能取決於:
軟/硬體組成 | 如何影響性能 | 知識坐標 |
---|---|---|
演算法 | 決定了源碼級語句的數量和I/O操作數量 | 演算法與數據結構 |
程式語言、編譯器和體系結構 | 決定了每條源碼級語句對應的電腦指令數量 | 本書第2、3章 |
處理器和存儲系統 | 決定了指令的執行速度 | 第4、5、6章 |
I/O系統 | 決定了I/O操作可能的執行速度 | 第4、5、6章 |
人類對於性能的要求是沒有上限的,新的演算法、新的應用、新的概念、對製造製程進行改進、對電腦體系結構進行改進等
01 電腦系統結構中的8個偉大思想
-
面向摩爾定律的設計
即單晶片上的集成度每18~24月翻一番,電腦設計者必須預測設計完成時的製程水平,而不是設計開始時的。
同時DRAM(動態隨機存取存儲器)是兩年翻一番,處理器是1.5年翻一番(這個在變慢,磁碟disk是一年翻一番
-
抽象簡化設計(abstraction)
用抽象表示不同的設計層次,在高層次中忽略低層次的細節。抽象層次中的關鍵介面是指令級體系結構,這點在後面會繼續提到,這時硬體和底層軟體的介面。
-
加速大概率事件(common case fast)
大概率事件通常比較簡單,所以易於提高性能。
-
通過並行提高性能(parallel performance)
前面也提到了,會學到很多並行操作來提高性能。
-
通過流水線提高性能(pipelining)
流水線是一個特別的並行性場景,可以理解為一個水管,每一個模組是其中的一個管子。
-
通過預測提高性能(prediction)
「求人准許不如求人原諒」,即假定從錯誤預測恢復的代價不高並且預測的準確率相對比較高,那麼就可以通過預測的方式提前開始某些操作,這肯定比得到相關指令再啟動要快。
-
存儲器層次(hierarchy of memory)
存儲器的速度影響性能,存儲器的容量限制了解題的規模,而當今電腦系統中存儲器的cost佔了主要部分。所以存儲器的設計追求速度更快、容量更大、價格更便宜。設計者們的辦法之一就是設計存儲器層次:
速度最快、容量最小(同時價格也最昂貴)的存儲器位於頂層,用於及時取放數據,而速度最慢、容量最大的存儲其位於最底層。就像一個三角塔一樣。
而這樣設計,從外部以程式設計師的視角看來,就實現了存儲器高速度、大容量且便宜的整體特徵。
-
通過冗餘提高可靠性
電腦的可靠性可以通過使用冗餘部件的方式提高。就像遠行的汽車帶著的備胎,當輪胎出問題時,更換後可以繼續工作。
02 程式概念入門
這部分是對該系列第一篇
02-1 系統軟體
電腦硬體只能執行很簡單的低級指令,我們編寫的應用程式到這些低級指令之間,需要通過多個軟體層次(系統軟體)將高層次的語句操作逐層解釋/翻譯為簡單的電腦指令。這可以算作01部分抽象思想的一個體現。
如上圖所示,外層是應用軟體,在其與中心——硬體之間有一層系統軟體。系統軟體是提供常用服務的軟體,包括作業系統、編譯程式、載入程式、彙編程式等。
其中,作業系統和編譯程式對於現代電腦是必要的。
-
作業系統是為了讓程式更好地在電腦上運行而管理電腦資源的監控程式。是用戶程式與硬體之間的介面,為用戶提供各種基礎服務和監控功能,最重要的功能如下:
-
處理基本的輸入輸出操作;
-
分配外存和記憶體;
-
為多個應用程式提供共享電腦資源的服務;
常見的作業系統有Windows,Linux,iOS等。
在作業系統中,封裝了I/O操作、存儲器分配和其他低級的系統功能細節,使得程式設計師不需要再過多注意這些瑣碎的細節。
-
-
編譯程式將高級程式語言如C++、Java等寫成的程式翻譯成硬體能夠執行的指令。
02-2 從高級語言到硬體語言
要想控制底層的電子硬體,就要描述電子硬體的狀態:通、斷。電腦中用1、0來描述。因此電腦語言是二進位數,每個字元就是二進位數字中的一個二進位位 / 一位(bit),
我們對電腦的命令就是指令,即能被電腦識別、理解並執行的命令位串,比如1000110010100000,表示兩個數相加。可見這串數字既描述了指令,又描述了數據。這是電腦的基礎。
最開始,程式設計師就是通過二進位將指令傳達給電腦的,但這很難,後來發明了助記符,手工比對二進位,但依然繁瑣;隨後設計人員就開發了被稱為彙編程式的軟體,可以將助記符自動翻譯為對應的二進位。比如寫下:
add A,B
彙編程式就會將該符號翻譯為表示兩數相加的機器指令
1000110010100000
上面的助記符所代表的符號語言今天仍然在使用,即彙編語言,而機器能夠理解的二進位語言被稱為機器語言。
雖然這已經是一個巨大的進步,但依然與人工演算的符號相差很多,並且需要程式設計師完全像電腦一樣思考。
於是更進一步的抽象誕生了高級程式語言及其編譯語言,大大提高了軟體生產率。下圖是這些程式與程式語言的關係圖:
可以看到,C語言經過編譯編程彙編語言程式,再經過彙編變為機器語言。
留意一下,這裡的轉變都是軟體層面的。
編譯程式的出現,使得程式設計師可以寫
A+B
來表示
add A,B
編譯程式會自動實現前者向後者的轉換。這樣做好處顯然多多,解放了程式設計師的思考難度、提高了生產效率、提高了程式相對於電腦的獨立性。
02-3 關於(指令集)體系結構
講到這裡,我們可能還是不明白課程名字中的體系結構是什麼意思,與組成原理又有什麼不同呢,我此前一直認為組原是指概念,而體系結構是組成電腦的硬體,實際上:
電腦體系結構(architecture) = 指令集(ISA)+ 電腦組成(microarchitecture)
為什麼放在這裡講而不是前言,是因為指令級體系結構使用了抽象的設計思想,是最重要的抽象之一,也是程式從高級到底層中的關鍵一環。
電腦體系結構的存在可以讓設計者討論更宏觀的設計方法,而不需要考慮硬體電路的狀態;這一抽象層分開了我們解決問題的軟體思路和硬體電路的具體實現,就比如我們寫出一個時鐘程式,實現計時、顯示時間、設置鬧鐘等功能,就不必考慮底層的LED、時鐘控制電路等。體系結構在電腦系統的層次如下:
自下而上,依次為電子管 -> 電路 -> 數字邏輯 / 硬體邏輯 -> 微體系結構 -> 指令級體系結構 -> 運行時系統(作業系統級)-> 程式語言 -> 演算法 -> 問題。同時這也展示了電腦系統中的抽象層次;
指令級體系結構就在ISA那一層,負責軟體向硬體的過渡。
微體系結構也稱微處理器體系結構,是在電腦工程中,將一種給定的 指令集架構 在 處理器 中執行的方法。
運行時系統的作用與作業系統相似,主要是進行記憶體管理和任務調度等。
提供給程式設計師的基本指令及和作業系統介面合稱為應用二進位介面(Application Binary Interface ABI)
回憶前文,程式從軟體再向下到硬體描述,就要通過體系結構(指令集和微體系結構)的對機器語言的翻譯規範、以及特定處理器實現向硬體指令和數據的轉化:
有沒有過這麼一個問題,即組成原理和體系結構有什麼區別?以下參考了
舉個例子:
一台機器是否具備乘法指令的功能,這是電腦體系結構的問題;
如何實現這個乘法指令的,使用專門的乘法電路還是採用連續相加的加法電路等,這是電腦組成的問題
日常生活的應用
許多電腦廠商向用戶提供一系列體系結構相同(實現邏輯)的電腦,而它們的組成(具體排布、實現方式)卻有很大的差異,因此只知道結構不知道組成是選不好適合的電腦的
專業一點的說
電腦體系結構是指那些能夠被程式設計師所見到的電腦屬性。所看到的電腦屬性,包括指令集、數據類型、存儲器定址技術、I/O機理等(抽象,概念性)
比如IBM PC和 RS6000 是具有不同的指令集、數據類型、存儲器定址技術、I/O機理,所以這兩種機器的結構各不相同。
從體系結構出發解決問題更像是一個建築設計師;
電腦組成就是如何具體實現這些電腦結構所體現的屬性,比如硬體細節,指令集體現了機器的屬性,這是結構問題。但指令的實現,比如如何取指令、分析指令、取操作數等等,這些都是電腦組成問題;
從組成原理出發解決問題更像是一個建築(土木)工程師;
03 ⭐硬體概念入門 | 馮·諾依曼體系結構
每台電腦的硬體都要完成相同的幾個基本功能:
-
輸入數據
-
輸出數據
-
處理數據
-
存儲數據
即電腦是由完成輸入、輸出、處理、存儲數據任務的部件組成的,具體講有五個部件:輸入、輸出、存儲器、數據通路(運算器)、控制器。這也是馮·諾依曼結構的體現。
處理器從邏輯上包括了數據通路和控制器。前者負責算數運算,後者負責指導數據通路、存儲器和I/O設備按照程式指令正確執行。
處理器是電腦中最活躍的部分,有時人們也把處理器稱為中央處理單元,即CPU;
03-1 一些實物結構
不同的電腦設備的內部模組安排不盡相同,我們可以從其拆卸外殼後的結構排布大致看出一些設計思想與理念。這部分只能是列舉一些,進一步感興趣可以看一些拆解記錄和拆解影片。
03-1-1 iPad Air 2邏輯主板
-
紅色圈中是一個蘋果APL1012 A8X 64位處理器,
-
橘色爾必達/美光q科技的F8164A3MD的2Gb記憶體,
-
黃色是SK海力士H2JTDG8UD1BMR的 128Gb(16GB)NAND快閃記憶體
-
綠色:NXP 65V10 NFC模組(同iPhone 6/iPhone 6 Plus所用相同)
-
藍色是蘋果(Cirrus Logic) 338S1213音頻解碼器,
-
紫色是ARM Cortex-M3微控制器(蘋果M8協處理器);
-
黑色是Murata 339S02541 Wi-Fi模組。
03-1-2 奔騰四處理器
一般給出下面兩個圖,我們就能了解一個硬體內部的結構和組成。
可以看到組成原理圖中左上角的是多級記憶體模組,右上角是數字和邏輯處理單元、左下角是前台(解碼器、快取器trace cache、分支預測等)、右下角是亂序執行單元。每個框圖裡分別是內部的一些邏輯結構。
這個是系統結構圖,更加接近硬體的真實情況。
03-2 輸入設備和輸出設備
這部分會在第五第六章講解,現在介紹一些基本硬體。
03-2-1 顯示器
圖形顯示器無疑是最有人氣的I/O設備,PMD大多使用輕巧、低功耗的液晶顯示(Liquid Crystal Display LCD),LCD不是光源,而是利用液晶的光學原理控制光的傳輸。
大多數LCD顯示器採用動態矩陣顯示(active matrix display),每一個像素都由一個電晶體控制電流,這樣使影像更清晰。而彩色動態矩陣LCD中,還有一個紅-綠-藍屏決定三種顏色分量的強度,這時每個像素點需要3個電晶體控制。
像素:影像元素的最小單元;
影像由像素矩陣組成,可以表示為二進位位的矩陣(點陣圖bit map),矩陣的大小反映了螢幕的尺寸以及解析度,彩色顯示器用8位標識每個三原色,每個像素就是24位。
這一點我此前在拓展數字邏輯課程知識的時候,用FPGA+VGA顯示矩陣色彩的時候接觸過,但沒有及時總結,預計數字邏輯實踐系列後續會總結這個過程。
動態矩陣顯示:液晶顯示技術;
03-2-2 觸控螢幕
PC使用LCD顯示器,而後PC的平板和智慧手機使用觸控螢幕進一步替代了鍵盤和滑鼠,用戶體驗得到了很大的提升。
03-3 處理器
這部分會在第四章講解。
處理器從邏輯上包括兩個部分:數據通路和控制器。分別相當於處理器 的肌肉和大腦,
上圖是一個蘋果A5的處理器積體電路結構圖。晶片尺寸位12.1mm×10.1mm,採用45nm製程,中間靠左側的是兩個ARM處理器,左上角是有4個數據通路的圖形處理器單元(GPU Graphic Processor Unit);左下角以及底部是與主存的介面。
處理器目前的發展趨勢是向多核處理器轉變,這就是並行性革命的發展。多核處理器的意思就是再同一塊微處理器中加入多個處理器,增加處理事務的速度(單位時間內完成的任務數,吞吐率)。
我們所說的四核微處理器,其實就是有四個處理器的微處理器、或是四個core的晶片。
後續有機會,我會進一步了解並行編程。
03-4 存儲器
03-1-1的iPad Air2的主板介紹中提到了兩個存儲器晶片,每塊容量1Gb也就是156MB。
記憶體是程式運行時的存儲空間,同時也保存程式運行時使用的數據。記憶體由多片DRAM晶片組成(DRAM:動態隨機訪問存儲器 dynamic random access memory),用來承載程式的指令和數據。
DRAM的特點是無論數據存儲在什麼位置,訪問的時間基本一致。這一點與串列訪問記憶體的磁帶不同。
提到存儲器,其實03-3中的處理器內部也使用一種存儲器,即快取(cache memory),它的特點是小而快,作為連接高速處理器和較低速記憶體的一個緩衝區。這一點前面八大思想中也有提及。
cache採用的是另一種存儲技術:靜態隨機訪問存儲器SRAM,速度更快,價格高一點。
快取和記憶體(也是主存)是存儲器層次中的兩層。接下來一節會完整介紹存儲器的全部層次:
03-5 數據存儲安全
前面提到的記憶體是易失性存儲器(比如DVD,關掉電源,記錄內容不會丟失,DVD採用的是非易失性存儲器),我們需要解決電腦數據在關掉電源之後的存儲。
對於易失性存儲器和非易失性存儲器,前者也稱主存(DRAM技術),後者也稱二級存儲器,這是繼前文的快取、記憶體下更低的一層,用來保存兩次運行之間的程式和數據。我們平時叫的磁碟(magnetic disk),就是二級存儲器的一種。
目前PMD中快閃記憶體(flash memory)使用的更多:
-
快閃記憶體比DRAM更慢、價格便宜很多,但要比磁碟高一點;
-
但是快閃記憶體在體積、電容、可靠性和能耗方面都比磁碟優秀;
-
但是,快閃記憶體在寫入100000~1000000次後會老化或損壞;
-
所以相應的,使用快閃記憶體的文件系統需要記錄寫入操作的數目,並考慮避免存儲器損壞的辦法。
03-6 電腦間通訊
電腦除了上面提到的功能,還需要與其他電腦通訊,即電腦網路功能。
聯網的電腦有以下優點:
-
通訊:電腦之間高速交換資訊;
-
資源共享:有些I/O設備可以由網路上的電腦共享,而不必每台電腦都有;
-
遠距離訪問:在很遠的地方通過別的設備訪問電腦。
網路類型:
-
乙太網
-
最常見的網路類型,傳輸距離長(1000千米)、傳輸速率高(40Gbps),可以將同一層樓的電腦連接起來,這就是區域網的一個例子。
-
區域網是在一個小的局部地區使用的傳輸數據的網路。
-
區域網通過交換機連接,可以提供路由和安全服務。
-
-
廣域網
-
支援萬維網,以光纖為基礎像通訊公司租用。
-
將區域擴展到幾百千米範圍的網路。
-
04 性能
好了,下面我們終於要來探討一些與買電腦有關一點的事情了。這也是本文最後的實質性內容。
04-1 性能的定義與衡量
在評價性能之前,我們需要給出性能的評價標準,是否電腦速度快就是好呢?恐怕也不盡然。對於性能,我們有很多描述方法,用於在不同情境下的性能衡量。下面這些是有關性能的一些名詞。
-
響應時間
-
電腦完成某任務所需要的全部時間,包括硬碟訪問、記憶體訪問、I/O活動、作業系統開銷以及CPU執行時間;
-
對於普通用戶以及PMD而言,響應時間可能最重要,這會影響工作性能或者遊戲體驗;
-
-
吞吐率
-
也叫頻寬,表示單位時間內完成的任務數;
-
而對於伺服器,會更注重吞吐率。
-
-
二者關係
-
降低響應時間,基本上就會增加頻寬;
-
採用多處理器分別處理獨立任務,只能增加頻寬。
-
-
性能
-
性能 = 1 / 響應時間
-
此後在前幾篇子系列文中,會著重討論響應時間代表的性能,但本文會討論另一個概念:
-
-
CPU時間
-
但問題很明顯,同一個處理器上並不是只運行一個任務,我們要把運行自己任務的時間和一般的響應時間區別開來;
-
CPU(執行)時間就只表示在CPU上花費的時間,不包括I/O操作等;
-
當然,我們感受到的還是響應時間,而不是CPU時間;
-
CPU時間進一步劃分:
-
·CPU用於用戶程式的時間:用戶CPU時間;
-
作業系統為用戶服務花費的CPU時間:系統CPU時間;
-
-
相應地:
-
CPU性能描述用戶CPU時間;
-
系統性能描述空載系統的響應時間;
-
-
電腦性能既可以指響應時間度量,也適用於CPU時間的度量;
-
下面我們討論的重點就是CPU性能,響應時間的度量會放在後面講;
-
04-2 CPU的性能
CPU性能是用戶和設計者都看重的性能。
-
公式一:一個程式的CPU執行時間 = 一個程式的CPU時鐘周期數 × 時鐘周期時間
-
公式二:一個程式的CPU執行時間 = 一個程式的CPU時鐘周期數 / 時鐘頻率
由以上式子可知,減少等號右側物理量,就可以改進性能,但這種改進並不容易。有時減少時鐘周期數還會引起時鐘周期時間的增加。
雖然目前電腦會有不同的時鐘頻率,但我們還是使用一個平均值來做。
04-3 指令的性能
繼續對上面的公式進行考量,我們可以對時鐘周期數進行細分,執行任務的是程式,而運行程式的基本單元是指令,所以可以有:
-
公式三:CPU時鐘周期數 = 程式指令數 × CPI
CPI表示執行每條指令所需的時鐘周期數的平均值;同時IPC是它的倒數(instruction per clock cycle)
指令數:某程式所需要的總指令數;
公式四:CPI = CPU時鐘周期數 / 程式指令總數
04-4 ⭐性能公式
綜上所述(04-2以及04-3),CPU性能公式為:
-
公式五:CPU時間 = 指令數 × CPI × 時鐘周期時間
-
公式六:CPU時間 = 指令數 × CPI / 時鐘頻率
-
性能的評估取決於時間,指令多少和CPI都不能單獨決定性能,公式右側的子集都不能決定性能;
-
下面是對於公式五的進一步分析,再具體到測量單位指標:
-
性能的分量 測量單位 程式的CPU時間 程式執行的執行時間,s 指令數目 程式執行的指令數 CPI 每條指令平均執行的時鐘周期數 時鐘周期時間 每個時鐘周期的長度,s
-
-
公式七:CPU執行時間 = 時間 / 程式數 = 指令數 / 程式 數× 時鐘周期數 / 指令數 × 時間 / 時鐘周期
04-5 程式性能的評估
上面00-4理解程式性能中,介紹過程式性能的影響因素,現在拿上面公式中的因子再套用一下:
硬體或軟體因素 | 影響 | 影響方式 |
---|---|---|
演算法 | 指令數,可能會影響CPI | 演算法決定了源程式指令的數目,進而決定了CPU執行指令的數目。同時演算法也可能影響CPI,比如使用過多除法,CPI會變大 |
程式語言 | 指令數,CPI | 程式語言必然與指令數掛鉤,因為要翻譯為指令;影響CPI的方式比如Java支援數據抽象而進行的間接調用會使得CPI指令變大 |
編譯程式 | 指令數,CPI | 決定源程式到指令的翻譯過程,所以編譯程式的效率會影響指令和CPI兩者 |
指令集體系結構 | 指令數,CPI,時鐘頻率 | 雖然具體過程還不知道,但指令集體系結構會影響這三者。⭐ |
04-6 指令集的性能
衡量指令集的性能的方式有很多:
-
設計指標:
-
能否被實現;
-
多長時間;
-
代價如何;
-
-
靜態指標:
-
在該指令集下程式的記憶體佔用;
-
-
動態指標:
-
對於一個程式需要執行多少指令?
-
處理器需要多少位元組的空間來執行程式?
-
每個指令需要幾個時鐘周期?
-
-
最佳的指標是執行時間。
04-7 SPEC基準 | Amdahl’s law | MIPS
04-7-1
雖然執行時間對於性能的衡量已經很好了,但人們還是希望建立一個專門用於測量性能的尺度。
前面提到過,加速大概率事件是一種重要思想,但哪些事件是大概率事件呢?這也需要一個對基準測試程式集合進行預測。
SPEC(system performance evaluation cooperative)是由許多電腦銷售商共同支援的組織,它建立了主要面向處理器性能的基準程式集:
-
是一種對於固定程式集合執行時間的衡量手段,會基於集合里程式的運行情況給出一個評級;
評級是程式運行時間經標準化處理後的幾何平均數,即乘積後開平方;
我們知道算術平均,每個數一視同仁;幾何平均指明了參數的集中趨勢,中位數貢獻更大;調和平均(調和不等式),傾向於序列中較小的數值。
-
這個評級能夠反映特定CPU、記憶體系統、I/O系統、作業系統、編譯器的性能;
-
支援對不同的電腦系統進行簡單的比較;
當然還有另外一些基準程式集,如PARSEC、SPLASH等
-
此外SPEC還建立了對於功耗的基準測試程式,功能和上面相似,計算公式不同:
評級 = Σ工作負載在每10%增量處的性能 / Σ對應的功耗和;
如果是順序看到這裡,功耗在05部分;
04-7-2 阿姆達爾定律
這一定律是加速大概率事件思想的量化總結。當我們對系統的某個部分加速時,其對系統的整體性能影響取決於該部分所佔比例和加速的程度。
-
公式:改進後的執行時間 = 改進部分的原執行時間 / 改進程度+ 不受影響的執行時間;⭐
-
舉個例子來說吧,100s的原總時長中,我們改善其中的50s,運行速度改善到原來的5倍,則現時長 = 50 / 5 + 50 = 60;
-
從例子也知道,這種優化存在一種極限,或是說,我們每次做相同程度的優化,收益在遞減(再對同一部分進行一次5倍的優化,總時長變化在減小);
我們可以使用這個定律來進行一些性能提升的預測。
04-7-3 MIPS
這裡的MIPS不是指令集的名字,這是一種新的性能衡量方法,跟前面所有以時間度量的方法不同。
MIPS(million instruction per second,每秒百萬條指令):
-
公式:MIPS = 指令數 / (執行時間 × 106)
-
表示指令執行的速率,規定性能與時間成反比,那麼高MIPS值的電腦就越快,這符合直覺。
-
但是這也有問題,很明顯,指令之間並不相同。
-
不同指令集的電腦不能比較。
-
就算在同一電腦上,對於不同的程式也會有不同的MIPS值。
-
有些指令的執行速度快於另一些,這也可能導致MIPS值大小與真正性能好壞的差距。
-
05 能耗 | 功耗
05-1 計算
幾個公式:
-
能耗由兩部分組成:動態能耗和靜態能耗;
靜態能耗是由泄漏電流造成的,顧名思義它在電晶體不工作時也會產生。
-
動態能耗 = k × 負載電容 × 電壓²
動態能耗是電晶體狀態翻轉過程產生的能耗,0-1-0或是1-0-1
-
一個電晶體動態能耗 = 0.5 × k × 負載電容 × 電壓²
-
一個電晶體動態功耗 = 0.5 × 負載電容 × 電壓² × 開關頻率
開關頻率由時鐘頻率決定
負載電容是導線和電晶體的總電容
-
相對功耗 = P新 / P舊
面向性能的設計和面向能量效率的設計有些目標是重合的。舉個例子:
1GHz的處理器原本100s的運行總時長,70W用於動態能耗,30W靜態能耗,現在升為1.2GHz,請問能耗怎麼變化?
答:降低。
現能量 = (70 × 1.2 + 30) × 100 / 1.2 = 9500J;
原能量 = 100W × 100s = 10000J.
目前功耗達到了一個瓶頸。
05-2
-
功耗(Power),功率的損耗,在單位時間中所消耗的能源的數量,單位為 W;
-
能耗(Energy),能源轉換實物量的損耗,單位是焦耳/秒。在後 PC 時代,能源是真正的資源更需要關注。
-
例如 WSC,關注的不僅僅是耗電功率(功耗),而是由於高溫帶來的昂貴冷卻費用。因此在評價功耗時,使用能耗比功耗更加合理。
06 簡單總結 | Review
在文章最後,我希望能夠總結一下前面大致說了點什麼,留下一些宏觀的印象,以便於後續的進行。
-
電腦組成與體系結構的一些基礎概念和名詞,彌補一點大學電腦基礎沒有學習的缺漏,增加一點專業素養;
-
重講了一下程式的概念,不過較於之前那一篇,這次更加註重轉換過程,而不是編譯鏈;
-
電腦重要的組成硬體與馮·諾伊曼結構;
-
指令級體系結構等抽象思想;
-
性能的評估方式,我們可以以此照著店家說明書來比對電腦的性能;
-
能耗和功耗,這是性能之外的考慮。