【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估
- 概論
- 計算機體系結構簡介
- 計算機的分類
- 并行體系結構
- 指令集體系結構(ISA)
- 分類
- 存儲器尋址
- 尋址模式
- 操作數大小
- 指令
- ISA的編碼
- 程序的優化
- 計算機體系結構
- 量化評估
- 存儲器體系結構
概論
計算機體系結構與計算機組成原理之間的聯系非常緊密,其研究范疇基本一致,計算機體系結構與計算機組成原理兩者是相輔相成的。但是,計算機體系結構更加注重從理論和整體上把握計算機設計的思想,即如何設計一種計算機,而計算機組成原理更加注重如何具體實現一臺計算機,其更加偏向于實踐層面。
計算機體系結構簡介
自第一代通用計算機出現至今,計算機的計算能力已得到大大的提升。在1978到1986年之間,計算機的性能每年平均增長25%,在1986年到2003年,計算機的性能平均增長52%,在2003年至2010年,性能平均增長22%。
計算機性能的提升,受到多方面的影響。但是,其本質上的提升在于其物理設備的制造技術的進步以及體系結構的發展。對于第一代到第四代計算機的劃分,就是從其物理基礎上劃分的,即電子管,晶體管,集成電路。基本上,整個計算機體系中的飛躍式的進步,絕大多數都是由計算機的物理基礎和體系結構的發展所造成的。比如,基于硅的集成電路的發展,使得計算機體積越來越小,單位面積的邏輯門電路越來越大。
我們知道,一個計算機程序,可以看作是一組計算機指令組成的集合,程序的執行過程,可以看作是一條條的計算機指令的執行。對于一條指令,其本質上只是一種特殊的二進制串,這種二進制串可以控制物理機器去進行一系列特定的操作。因此,對于計算機體系結構在整個計算機體系中的地位和功能,可以看作是向上提供一組指令集,人們可方便的應用指令集去控制底層物理設備實現相應的功能。計算機體系結構也是處于發展之中的。
舊有的計算機體系結構主要關注于指令集體系結構(ISA)設計,即關于寄存器、內存尋址、尋址模式、指令操作數、可用操作、控制流指令、指令編碼。而如今的計算機體系結構更多關注于目標機器的具體要求,設計可在約束因素下實現性能最大化:成本、功耗和可用性。不僅包括ISA,更包含微體系結構、硬件等等與計算機性能存在聯系的多個方面。
計算機體系結構的發展,并不僅僅是由自身產生的,其也受到上層應用以及下層物理設備的影響,也就是說,計算機體系結構的發展是受到與計算機存在聯系的方方面面所影響的,我們不能只看體系結構的發展,而忽略體系結構為什么這樣發展。盡管技術是不斷進步的,但是只有當技術發展到一定程定的時候才能引起質變,導致新的體系結構出現,而一個體系結構也要有其技術支持,在技術發展到一定程度之前,這種體系結構是無法實現的。
在計算機的發展歷程中,存在著兩個重大的變化,第一,高級編程語言的開發,人們越來越少的去直接使用匯編語言去編寫計算機程序,人們使用高級編譯語言,可以更高效的開發復雜的計算機程序,可以實現更加復雜的算法,比如動態規劃,插值法,以及各種AI算法。對于由高級語言編寫的程序,一般是由編譯器將其編譯成匯編語言組成的匯編程序,然后通過匯編器將匯編語言轉變為0和1組成的二進制機器指令流。第二,是獨立的操作系統的應用。對于操作系統,其可以屏蔽具體的體系結構細節,僅僅向上提供用戶友好的接口,方便各種人群快捷,便利的使用計算機。操作系統的應用降低的體積結構商業化應用的風險。
并且,受到計算機物理設備(比如晶體管)的制約,我們現今可以從物理設備得到的性能提升已到達一個瓶頸,因此,由于上層軟件和下層硬件的多重影響,人們在20世紀80年代開發出了一種新式的體系結構——精簡指令集計算機(RISC)體系結構。對于RISC體系結構,其主要關注于指令級并行(ILP)去實現性能的提升(主要是流水線(pipeline),多發射和緩存的使用)。對于RISC體系結構,可以實現更大的指令級的性能提升。并且,由于微處理器和具體物理設備的發展,越來越多的使用復雜指令集的計算機體系結構逐漸向RISC體系結構發展,比如intel的x86體系結構,其內部的80x86指令可以以很低的消耗轉換成RISC指令。在當下,應用廣泛的一種RISC體系結構便是ARM。
半導體技術的改進(集成電路邏輯、DRAM、閃存、磁盤),晶體管的縮放(特征尺寸、時鐘速度),計算機體系結構的改進,HLL編譯器啟用,UNIX, RISC 架構共同促進了輕量級計算機的發展和用戶友好的編譯/解釋編程語言的使用。
然而,由于受到最大功耗的限制(散熱技術)和指令級并行技術的開發瓶頸的制約,使得ILP的發展緩慢。如今,人們更多的將關注重點轉變為數據級并行(DLP)和線程級并行(TLP),以及對于一些應用場景下的請求級并行(RLP)。
對于ILP,其對開發人員是屏蔽的,是隱式實現的,而對于DLP,ILP以及RLP,是顯式實現的,需要開發人員的關注。
計算機的分類
由于計算機的應用場景不同,我們可以將計算機分為以下幾類,個人移動設備(PMD),桌面計算,服務器,集群倉庫級計算機,嵌入式計算機。
對于不同類型的計算機,其關注的主要性能是存在差異的。對于PMD,其主要關注于響應速度和實時性能,即應用程序的一個程序段必須有一個確定的最大執行時間。對于桌面計算,主要關注于性價比,即性能和成本的比例。對于服務器,主要關注于可用性,吞吐量和可擴展性。對于集群倉庫級計算機(WSC(倉庫級計算機)和超級計算機),主要關注于性價比和功耗,對于超級計算機,還關注于浮點計算能力。對于嵌入式計算機(我們可以按照能否運行第三方軟件劃分嵌入式和非嵌入式計算機),其主要關注于價格。
不同的應用場景對于計算機的要求也是不同的,因此,要結合具體的應用場景選擇最合適的計算機。
并行體系結構
并行是對于提高計算能力的一種有力的手段。并行主要有ILP,DLP,TLP,RLP。以下幾章將詳細介紹。
對于一個計算機,我們可以按照并行關系將其劃分為以下四類,單指令流、單數據流(SISD),此類計算機包含使用ILP的單處理器順序計算機;單指令流、多數據流(SIMD),此類計算機包含應用DLP技術(向量體系結構,多媒體擴展,GPU等等)的多數據流計算機,;多指令流、單數據流(MISD);多指令流、多數據流(MIMD),此類計算機主要包含使用任務級并行的計算機。這種劃分標準僅僅是按照并行關系,因此是一種粗粒度的劃分。
指令集體系結構(ISA)
ISA通常包含以下幾個部分:寄存器,操作訪問,操作數的類型和大小,指令集,尋址模式,指令編碼。一個ISA應該設計為與微處理器的硬件實現分離,與具體的應用程序分離。計算機體系結構的重大進步通常與地標性指令集設計相關。
分類
ISA可以看作是軟件和硬件的界限,其將編程語言抽象于機器,是高級語言最終通過編譯器/解釋器的最終可執行的目標。對于計算機體系結構,ISA其重要的一部分。目前,常用的ISA主要有兩大類,一是通用寄存器體系結構,其指令存在兩個顯式操作數,通用寄存器體系結構主要有兩種,一種是寄存器-儲存器ISA,比如80x86,其指令可以直接訪問存儲器;另一種是載入-存儲ISA,比如MIPS和ARM,其只能通過載入和存儲指令訪問存儲器。二是堆棧體系結構,比如JVM(java虛擬機),堆棧結構采用兩個隱藏操作數。三是AC(累加器)架構,比如EDSAC,IAS。AC架構的指令采用1個顯示操作數,1個隱藏操作數。
存儲器尋址
尋址的過程是通過地址從存儲器中獲取操作數(數據)的過程。大多數的體系結構的存儲器尋址采用字節尋址,但是有些體系結構采用的是對齊的方式,比如ARM和MIPS,而有些則不要求強制對齊。對于一個大小為s的對象,其字節地址為A,若A mod s