我目前正在嘗試進入多核編程。我想用C++/Python/Java編寫/實現並行矩陣乘法(我猜Java是最簡單的)。一次只能有一個CPU訪問RAM?
但是我自己無法回答的一個問題是RAM訪問如何與多個CPU一起工作。
我的想法
我們有兩個矩陣A和B,我們想計算C = A * B:
並行執行只會更快,當N,M或p很大。假設n,m和p> = 10,000。爲簡單起見,假設n = m = p = 10,000 = 10^4。
我們知道,我們可以計算每個$ {C_ I,J} $ withouth的看着C的其他條目因此,我們可以計算在每一個平行{C_ I,J}:
但是,所有的c_ {1,i}(i \ in 1,...,p)都需要A的第一行。由於A是一個10^8雙精度的數組,它需要800 MB。這絕對比CPU緩存大。但是一行(80kB)將適合CPU緩存。所以我想最好把C的每一行都分配給一個CPU(只要CPU是空閒的)。所以這個CPU至少有A在它的緩存中,並從中受益。
我的問題
如何RAM訪問了不同的內核管理(在正常英特爾在筆記本)?
我想必須有一個「控制器」,一次給一個CPU獨佔訪問權限。這個控制器有一個特殊的名字嗎?
偶然地,兩個或多個CPU可能需要相同的信息。他們能同時得到它嗎?內存訪問是矩陣乘法問題的瓶頸嗎?
請讓我也知道,當你知道一些好書向你介紹多核編程(在C++/Python/Java中)。
您可能還想了解[cache coherence](http://en.wikipedia.org/wiki/Cache_coherence)。 –
多核和多CPU之間還有一個區別(從內存管理角度看),因爲同一物理CPU上的多個內核將共享(至少一些)高速緩存。所有內核都可以從RAM中讀取,儘管它不能「同步」。它們具有多個內核的典型現代CPU將在所有內核中實現共享的高級緩存。 – Leigh
爲什麼要發明輪子? :)爲什麼不採取像OpenBLAS這樣的東西,並看看實施? –