文章目錄
最初計算機都是一次只能運行一個程序。
馮諾依曼架構:其主要特點就是內存和CPU的分離,但是這也造成了馮諾依曼瓶頸:CPU執行指令比從內存中讀取指令要快得多
main memory是一堆地址的集合
sRAM主要使用於作爲寄存器或者作爲cache,價格比較昂貴。
進程
操作系統是控制軟件的基礎軟件
一些操作系統分配給程序的資源描述符
多任務
會讓人產生一種錯覺,單核處理器也可以同時運行多個程序
每個進程排隊等待被執行,時間到了就需要停止
線程
把程序分割成多個任務,一個任務就是一個線程。當一個線程在訪問內存時阻塞了,同一個程序的其他進程還可以繼續執行。
線程可以看做是一種輕量級的進程
馮諾依曼架構的改進
緩存結構
緩存是CPU 的一個組成部分,之間通信將比和內存快得多
現代計算機的體系架構是一種層式架構,與CPU數據交互最快的是寄存器和緩存,接下來是主存。
內存行或者內存塊指的是內存中的一整塊數據,把它放在緩存中。
低級別緩存可以看做是緩存的緩存,高級別緩存的組成部分中中有低級別緩存
緩存命中
順利找到相應變量
緩存缺失
在緩存中找不到對應變量,只能再從內存中讀取,會放慢時間。
緩存與主存的問題
數據不一致
當CPU向緩存中寫入數據時,緩存中數據可能和主存有所不同。
其中,寫回機制的效率較高,使用較爲廣泛。
cache和主存之間的映射機制
從內存中回去的緩存行怎樣在緩存中存貯
具體例子
最近最少使用原則
全相聯和n路組相連從內存中申請內存行在緩存中的存放位置不是唯一的,如果有很多內存行都可以映射至緩存上的同一位置,如何確定哪一個內存行最終被保留。
因此,在最近時間內,最少被使用的緩存行將被替換,最近被訪問多的可以被保留。
緩存和程序
以第一個程序來看,矩陣A的一行剛好是一個緩存行,所以只會在查找A[ 0 ] [ 0 ]的時候發生一次cache miss,在訪問同一行的其他元素時,它們已經被放在緩存中了,類似的情況也發生在其他行中,也就是說,只會發生四次cache miss。
然而第二個程序按照列來讀取數據,這樣的話,如果緩存比較小隻能裝兩個緩存行,就需要發生16次緩存缺失,導致運行時間可能會差別很大。
實際上,矩陣規模可能會大很多,cache的大小也會大一些。
虛擬存儲技術
虛存是將主存看做緩存來使用,虛存和主存相當於形成了主存和緩存的關係
交換空間中存儲不活躍的數據,比緩存行的大小大得多。
有可能導致虛存中的頁指向主存中的同一塊地址。
- 在程序運行時,需要轉換虛擬地址到實際地址。頁表(page table)用於進行這樣一種翻譯映射操作
轉譯後備緩衝區
爲了減少加載頁表的時間,CPU中有一個專門的轉譯後備緩衝區用於存放頁表
指令集並行
流水線
多發射
算術邏輯單元ALU中部分相同功能單元是不止一個的,可以同時執行不同任務。
靜態多發射
動態多發射(超標量處理器)
多發射預測
爲了充分利用多任務問題,系統必須認識到那些任務可以同時執行。
如果出現錯誤,還存在一種退回機制。
硬件多線程
比如計算斐波那契數列,就不能進行同時執行。
細粒度的
在執行一個指令之後,編譯器都允許切換至別的線程指令來執行
粗粒度的
只有在讀內存或者硬盤等耗時過大的指令時,可以切換。
同步多線程(細粒度的一種變種)
允許充分利用超標量處理器的潛能
一個物理核=兩個邏輯核,因爲是多發射的,同步多線程的技術。每個核中有兩個線程
並行硬件
SIMD
對多個數據執行相同的指令來實現並行計算,適合數據並行的任務方式。
如果ALU和數組長度相等,那麼每個ALU將執行相同的操作。
如果數量不同呢?
缺陷
向量處理器
vector_length:4-128
優點
缺點
顯卡上圖形處理單元GPU
也借鑑了了SIMD的架構,衍生出不同於CPU的結構
一個SIMD內部,都在執行相同的指令,但是在GPU中 不是這樣的
MIMD
時間上是不同步的。