本系列是 Parallel Programming in C with MPI and OpenMP 這本書的讀書心得!
延續之前幾篇,書中第二章內容筆記
書中定義:
Multiprocessor: multiple-CPU computer with a
shared memory
Same address on two different CPUs refers
to the same memory location
我的理解:
一台電腦裡面有很多CPU並且一起共享記憶體,所以這個架構下,如果這兩個CPU裡面的存放的記憶體位址是相同的,(Address一樣)
則他們所指的就是同一塊記憶體!
區別:Multiprocessor 與 Multicomputer
Multiprocessor : 不同CPU看同一個記憶體的address是一樣的!是multiprocessor
Multicomputer : 不同CPU看到相同記憶體的address不同,是multicomputer
Multiprocessor 跟上一篇介紹的 Processor Array 的區別是
Multiprocessor 改善了Processor Array的問題,使得可以支援多個使用者使用,也更有效率!
這是第一種的Multiprocessor !
直接把Uniprocessor做擴充!
直接把CPU掛到bus上!
不管哪一個CPU處理去連記憶體都一樣快!(有相同的Memory access time)
這種的稱為:
UMA : Uniform memory access multiprocessor
SMP : Symmetrical multiprocessor 對稱型的多處理機
架構圖:
架構:
直接再Bus上面掛CPU
記憶體跟I/O都沒增加!
優點:這樣每一個CPU去存取Memory的速度一樣
所以叫作Uniform memory access !
缺點:需要的頻寬很大才能,應付每一個CPU要求的記憶體存取量
Private data : 只有一個處理器在使用它(那個data)
Shared data: 有兩科以上的處理器去使用它
Shared data會面臨到的問題:
Cache coherence 快取的一致性:
每個處理器都會掛一個Cache ,所以會把要用的data 先掛到Cache裏面
如此會發生一種問題:同一個data會在不同cache裏面有了不同狀態,資料就會不同步!
解決方法:Mutual exclusion 一個人正在使用了其他人就不能動那個data
Barrier 設一個屏障!
舉個例子:
如圖,如果變數 X (他的值是 7) 同時被 CPU A 與 CPU B 用到!
此時:
如果CPU B 把資料改了(改成 2) 並且把結果存回去位於Memory裡面的變數X 當中
此時CPU A 拿到的資料是cache裡面的X的值 7 資料就會是錯的!
解法:
解法,加一個cache control monitor!!
來控管結果
他會一直盯著看原始的data是否被改動了
當CPU B嘗試要寫入的時候,Cache control monitor 就會告訴大家把手邊現有的丟掉,
換成正確的data !
這種叫做:Write Invalidate Protocol
這是另一種Multiprocessor的架構
這種架構下,每一個CPU都會分到(Distributed)一塊自己主要在用的Memory (primary memory)
增加Memory頻寬,降低存取Memory的時間
如此的好處是擴充性高!增加CPU不會像UMA架構那樣,直接占用到Bus的頻寬,
而是自己就會分配到一塊主要用的記憶體空間,不會常常需要跟別人共用
這種架構稱為
NUMA : non-uniform memory access multiprocessor
如下圖:
先將連續空間的記憶體切成三塊
這個架構底下,CPU可以存取全部的記憶體
只是有一個離他比較"近"
CPU存取不同區域的記憶體位置速度會不一樣快
所以這樣的memory access 都會
non-uniform !!! (NUMA架構)
現今大型電腦用的架構
(個人電腦還是用 UMA的架構)
(下集待續...)