主頁 > 作業系統 > 計算機系統4-> 計組與體系結構1 | 基礎概念與系統評估

計算機系統4-> 計組與體系結構1 | 基礎概念與系統評估

2022-03-08 06:25:41 作業系統

在大二上學期學習數字邏輯的程序中,我對計算機如何運作產生了興趣,因此開了這個系列來記錄自己在這方面的學習程序,此前三篇分別是:

  1. 計算機系統->Hello World的一生 | 程式如何運行,從大致程序上介紹了一個簡單的Hello World程式是如何被計算機實作的

  2. 計算機系統2->從芯片說起 | 芯片怎樣誕生是我在學習另一本書以及B站學習的時候的知識總結,主要講解數字邏輯層和半導體物理層之間的聯系,

  3. 計算機系統3-> 現代計算機基石 | 圖靈機理論,同樣十一篇讀書筆記,附上了自己的思考,這是計算機能夠成立的理論基礎,

本來嘛,按照這個系列的節奏,下一篇就是馮諾依曼結構或者是CPU的內部結構(事實上CPU的內部結構與原理已經在學了來著),再下一篇可能還會講講資訊論,但這學期開了一門專業課叫做計算機組成原理與體系結構,正好就是在講這方面的知識,因此接下來我會結合課本和此前讀的書進行系列的更新,并將實踐CPU的記錄也更新到這個系列中來,

今天這篇主要總結課本第一章的內容,即計算機組成與體系結構的基礎概念,比如計算機科學、設計思想、程式、硬體結構、性能評估等,本文可能有很多生詞,我盡力給出合理的批注,實際上其中很多東西大學計算機基礎可能都講了,但不幸,我們學院是沒有要求這門基礎課的(取而代之的是機械制圖),

寫的有點多,很多是對知識的復述,后續我會對文章進行精簡,系列后面也會注意,

參考資料:

  1. Computer Organization and Design the 5th Edition,即計算機組成與設計硬體軟體介面第五版

  2. 課件,由于是英文且只是老師的思路,所以是輔助參考

00 一些前言

00-1 這門課的重要性

作為一個計算機系的學生,從學科素養上講,如果四年學習下來,不了解DRAM、流水線、多級快取、I/O介面、虛擬記憶體這些概念,實在是說不過去,從日常生活上講,學了計算機還不懂得如何選購一臺性能較佳的電腦,也說不過去,

此外,這部分內容對于以后想要從事芯片設計、編譯器開發、作業系統設計等底層方向的同學是十分重要的,就算不從事這些方面,只從事軟體開發,這部分內容也會讓你對于優化程式或專案和bug除錯有更深的理解,對于特定的APP可以選用合適的硬體,

舉個例子,如果我們要進行一個大型的矩陣乘法運算,我們應用這門課的知識,就可以對其進行較深層次的優化,使其性能提高200倍:

  1. 采用資料級并行DLP(SIMD),在第三章中學到,性能提高3.8倍;

  2. 采用指令級并行ILP,回圈展開開發多指令發射、亂序執行硬體,第四章,性能提高2.3倍;

  3. 記憶體以及cache的存盤器層次優化,第五章,2.5倍;

  4. 執行緒級并行,在多核上并行回圈,第六章,14倍;

在課程學習開始前,還可以先思考幾個問題

  1. 如何評估一個程式的性能?如何改行程式性能?

  2. 什么是軟硬體之間的介面?軟體如何指導硬體完成作業?

  3. 如何進行記憶體管理:資料是怎么被放置的,放置在哪里?

  4. 如何進行執行緒管理:如何寫一個多執行緒的程式?

  5. 從硬體的角度講,哪些操作實作容易或者快一點?

如果無法理解這些問題,決定優劣與否,就會墮入反復實驗的復雜程序,反之,則是一個深入分析的科學程序,

00-2 關于計算機科學

計算機科學的發展簡史我就略過了,沒啥意思,回頭有空單出一篇這個文,

00-2-1 有關 IT | 資訊科學

IT(Inforamation Technology)是資訊理論和計算理論的結合,兩者共同奠基和定義了資訊科學,資訊理論方面有香農的資訊論(采集定理),計算理論即圖靈機和馮-諾伊曼結構,我們學習的計算機科學與技術偏向于計算理論,資訊理論主要是電子資訊方面在學習,

當然,有機會我會了解一些資訊方面的知識,

00-2-2 計算機應用分類

  1. 個人電腦

    強調對個人提供良好性能,價格較低,可運行第三方軟體,

    一般有4-12個CPU(中央處理單元Central Process Unit),記憶體在GB級(也有TB級的)

  2. 服務器

    用于運行大型程式的計算機,可以支持多用戶的并行使用,一般通過網路訪問,

    高端服務器稱為超級計算機,一般由海量處理器組成(上百萬CPU),記憶體為TB級,能耗很大但很高效;用于高端科學和工程計算,

    注意這里的Gb和GB并不相同,1Gb(gigabit) == 156MB,

  3. 嵌入式計算機

    即嵌入到其他設備里的計算機,運行預先設定好的一個或一組應用程式,是數量最多的一類計算機,用于如汽車、電視等的微處理器和處理器網路;

    通常程式和硬體集成在一起,一起交付給用戶,此類計算機關鍵在于可靠性、低成本和低功耗,

    許多嵌入式處理器使用處理器核,處理器核就是利用硬體描述語言(比如Verilog)描述的處理器版本,這樣設計者就能把處理器和其他硬體集成在一塊芯片上,

00-2-3 后PC時代

  1. 個人移動設備(Personal Mobile Device PMD)

    包括手機、平板、智能手表、甚至智能眼鏡;電池供電,下載軟體app進行功能實作,無鍵盤滑鼠,采用觸摸屏以及語音作為輸入,

  2. 云計算

    替代傳統服務器,依賴于倉儲規模計算機的巨型資料中心(Warehouse Scale Computer WSC),在網路上提供服務的大服務器集群,運營商根據需求出租一部分為PMD提供軟體服務,典型例子是Web搜索和社交網路,

    PMD / WSC是硬體工業的革命,通過云計算實作的軟體即服務是軟體工業的革命,

00-3 通用計算機結構

這個課程主要研究的是通用計算機的基本結構與組成,我們每一章都會學習一部分,下圖是一個概要,后面硬體概念的部分還會提到:

當然,講到通用計算機結構,離不開馮·諾伊曼結構:

  1. 存盤器 / 記憶體Memory:存盤資訊(資料/程式)

  2. 運算器:計算、處理資訊

  3. 輸入設備:把資訊放入電腦的途徑

  4. 輸出設備:電腦輸出資訊的途徑

  5. 控制器:確保以上各個部分在正確的時間正確地執行它們的任務

img

00-4 理解程式性能

此前寫的本系列的第一篇:《程式是如何運行的》是很淺薄的,正如前面提到的學習這門課的重要性那部分所提到的例子,程式性能的理解是貫穿這個課程的核心問題之一,

程式的性能取決于:

軟/硬體組成如何影響性能知識坐標
演算法 決定了原始碼級陳述句的數量和I/O運算元量 演算法與資料結構
編程語言、編譯器和體系結構 決定了每條原始碼級陳述句對應的計算機指令數量 本書第2、3章
處理器和存盤系統 決定了指令的執行速度 第4、5、6章
I/O系統 決定了I/O操作可能的執行速度 第4、5、6章

人類對于性能的要求是沒有上限的,新的演算法、新的應用、新的概念、對制造工藝進行改進、對計算機體系結構進行改進等

01 計算機系統結構中的8個偉大思想

  1. 面向摩爾定律的設計

    即單芯片上的集成度每18~24月翻一番,計算機設計者必須預測設計完成時的工藝水平,而不是設計開始時的,

    同時DRAM(動態隨機存取存盤器)是兩年翻一番,處理器是1.5年翻一番(這個在變慢,磁盤disk是一年翻一番

  2. 抽象簡化設計(abstraction)

    用抽象表示不同的設計層次,在高層次中忽略低層次的細節,抽象層次中的關鍵介面是指令級體系結構,這點在后面會繼續提到,這時硬體和底層軟體的介面,

  3. 加速大概率事件(common case fast)

    大概率事件通常比較簡單,所以易于提高性能,

  4. 通過并行提高性能(parallel performance)

    前面也提到了,會學到很多并行操作來提高性能,

  5. 通過流水線提高性能(pipelining)

    流水線是一個特別的并行性場景,可以理解為一個水管,每一個模塊是其中的一個管子,

  6. 通過預測提高性能(prediction)

    “求人準許不如求人原諒”,即假定從錯誤預測恢復的代價不高并且預測的準確率相對比較高,那么就可以通過預測的方式提前開始某些操作,這肯定比得到相關指令再啟動要快,

  7. 存盤器層次(hierarchy of memory)

    存盤器的速度影響性能,存盤器的容量限制了解題的規模,而當今計算機系統中存盤器的cost占了主要部分,所以存盤器的設計追求速度更快、容量更大、價格更便宜,設計者們的辦法之一就是設計存盤器層次:

    速度最快、容量最小(同時價格也最昂貴)的存盤器位于頂層,用于及時取放資料,而速度最慢、容量最大的存盤其位于最底層,就像一個三角塔一樣,

    而這樣設計,從外部以程式員的視角看來,就實作了存盤器高速度、大容量且便宜的整體特征,

  8. 通過冗余提高可靠性

    計算機的可靠性可以通過使用冗余部件的方式提高,就像遠行的汽車帶著的備胎,當輪胎出問題時,更換后可以繼續作業,

02 程式概念入門

這部分是對該系列第一篇計算機系統->Hello World的一生 | 程式如何運行的復習與深化,

02-1 系統軟體

計算機硬體只能執行很簡單的低級指令,我們撰寫的應用程式到這些低級指令之間,需要通過多個軟體層次(系統軟體)將高層次的陳述句操作逐層解釋/翻譯為簡單的計算機指令,這可以算作01部分抽象思想的一個體現,

如上圖所示,外層是應用軟體,在其與中心——硬體之間有一層系統軟體,系統軟體是提供常用服務的軟體,包括作業系統、編譯程式、加載程式、匯編程式等,

其中,作業系統編譯程式對于現代計算機是必要的,

  • 作業系統是為了讓程式更好地在計算機上運行而管理計算機資源的監控程式,是用戶程式與硬體之間的介面,為用戶提供各種基礎服務和監控功能,最重要的功能如下:

    1. 處理基本的輸入輸出操作;

    2. 分配外存和記憶體;

    3. 為多個應用程式提供共享計算機資源的服務;

    常見的作業系統有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)

回憶前文,程式從軟體再向下到硬體描述,就要通過體系結構(指令集和微體系結構)的對機器語言的翻譯規范、以及特定處理器實作向硬體指令和資料的轉化:

 

 

 

有沒有過這么一個問題,即組成原理和體系結構有什么區別?以下參考了這篇博客以及老師的課件:

舉個例子:

  1. 一臺機器是否具備乘法指令的功能,這是計算機體系結構的問題;

  2. 如何實作這個乘法指令的,使用專門的乘法電路還是采用連續相加的加法電路等,這是計算機組成的問題

日常生活的應用

許多計算機廠商向用戶提供一系列體系結構相同(實作邏輯)的計算機,而它們的組成(具體排布、實作方式)卻有很大的差異,因此只知道結構不知道組成是選不好適合的電腦的

專業一點的說

計算機體系結構是指那些能夠被程式員所見到的計算機屬性,所看到的計算機屬性,包括指令集、資料型別、存盤器尋址技術、I/O機理等(抽象,概念性)

比如IBM PC和 RS6000 是具有不同的指令集、資料型別、存盤器尋址技術、I/O機理,所以這兩種機器的結構各不相同,

從體系結構出發解決問題更像是一個建筑設計師

計算機組成就是如何具體實作這些計算機結構所體現的屬性,比如硬體細節,指令集體現了機器的屬性,這是結構問題,但指令的實作,比如如何取指令、分析指令、取運算元等等,這些都是計算機組成問題;

從組成原理出發解決問題更像是一個建筑(土木)工程師

03 ?硬體概念入門 | 馮·諾依曼體系結構

每臺計算機的硬體都要完成相同的幾個基本功能:

  1. 輸入資料

  2. 輸出資料

  3. 處理資料

  4. 存盤資料

即計算機是由完成輸入、輸出、處理、存盤資料任務的部件組成的,具體講有五個部件:輸入、輸出、存盤器、資料通路(運算器)、控制器,這也是馮·諾依曼結構的體現,

處理器從邏輯上包括了資料通路和控制器,前者負責算數運算,后者負責指導資料通路、存盤器和I/O設備按照程式指令正確執行,

處理器是計算機中最活躍的部分,有時人們也把處理器稱為中央處理單元,即CPU;

img

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個晶體管控制,

  1. 像素:影像元素的最小單元;

  2. 影像由像素矩陣組成,可以表示為二進制位的矩陣(位圖bit map),矩陣的大小反映了螢屏的尺寸以及解析度,彩色顯示幕用8位標識每個三原色,每個像素就是24位,

    這一點我此前在拓展數字邏輯課程知識的時候,用FPGA+VGA顯示矩陣色彩的時候接觸過,但沒有及時總結,預計數字邏輯實踐系列后續會總結這個程序,

  3. 動態矩陣顯示:液晶顯示技術;

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 計算機間通信

計算機除了上面提到的功能,還需要與其他計算機通信,即計算機網路功能,

聯網的計算機有以下優點:

  1. 通信:計算機之間高速交換資訊;

  2. 資源共享:有些I/O設備可以由網路上的計算機共享,而不必每臺計算機都有;

  3. 遠距離訪問:在很遠的地方通過別的設備訪問計算機,

網路型別:

  • 以太網

    • 最常見的網路型別,傳輸距離長(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基準

雖然執行時間對于性能的衡量已經很好了,但人們還是希望建立一個專門用于測量性能的尺度,

前面提到過,加速大概率事件是一種重要思想,但哪些事件是大概率事件呢?這也需要一個對基準測驗程式集合進行預測

SPEC(system performance evaluation cooperative)是由許多計算機銷售商共同支持的組織,它建立了主要面向處理器性能的基準程式集:

  1. 是一種對于固定程式集合執行時間的衡量手段,會基于集合里程式的運行情況給出一個評級;

    評級是程式運行時間經標準化處理后的幾何平均數,即乘積后開平方;

    我們知道算術平均,每個數一視同仁;幾何平均指明了引數的集中趨勢,中位數貢獻更大;調和平均(調和不等式),傾向于序列中較小的數值,

  2. 這個評級能夠反映特定CPU、記憶體系統、I/O系統、作業系統、編譯器的性能;

  3. 支持對不同的計算機系統進行簡單的比較;

    當然還有另外一些基準程式集,如PARSEC、SPLASH等

  4. 此外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 計算

幾個公式:

  1. 能耗由兩部分組成:動態能耗和靜態能耗;

    靜態能耗是由泄漏電流造成的,顧名思義它在晶體管不作業時也會產生,

  2. 動態能耗 = k × 負載電容 × 電壓2

    動態能耗是晶體管狀態翻轉程序產生的能耗,0-1-0或是1-0-1

  3. 一個晶體管動態能耗 = 0.5 × k × 負載電容 × 電壓2

  4. 一個晶體管動態功耗 = 0.5 × 負載電容 × 電壓2 × 開關頻率

    開關頻率由時鐘頻率決定

    負載電容是導線和晶體管的總電容

  5. 相對功耗 = P / P

由上式我們可以理解,時鐘頻率增長1000倍,功耗只增長30倍,,是因為每次工藝更新時鐘頻率上升時,設計者都會考慮使電壓都會降低,

面向性能的設計面向能量效率的設計有些目標是重合的,舉個例子:

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

在文章最后,我希望能夠總結一下前面大致說了點什么,留下一些宏觀的印象,以便于后續的進行,

  1. 計算機組成與體系結構的一些基礎概念和名詞,彌補一點大學計算機基礎沒有學習的缺漏,增加一點專業素養;

  2. 重講了一下程式的概念,不過較于之前那一篇,這次更加注重轉換程序,而不是編譯鏈;

  3. 計算機重要的組成硬體與馮·諾伊曼結構;

  4. 指令級體系結構等抽象思想;

  5. 性能的評估方式,我們可以以此照著店家說明書來比對電腦的性能;

  6. 能耗和功耗,這是性能之外的考慮,

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439117.html

標籤:其他

上一篇:CentOS7安裝部署Zabbix監控服務

下一篇:小白上手Linux系統安裝jdk教程

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more