2011-09-21 80 views
0

在多核系統(例如2,4,8核)中,我們通常使用互斥鎖和信號量來訪問共享內存。但是,我可以預見,這些方法會爲未來具有多個內核的系統帶來很高的開銷。有沒有其他方法可以更好地爲將來的許多核心繫統訪問共享內存。在許多核心繫統中如何訪問共享內存

回答

2

我不確定將來你想走多遠。但是從長遠來看,我們現在所知道的共享內存(任何內核都可以訪問的單個地址空間)是不可擴展的。因此,編程模型將不得不在某些時候改變,讓程序員的生活變得更加艱難,就像我們進入多核時一樣。

但是現在(也許再過10年),你可以逃避事務內存和其他硬件/軟件技巧。

從長遠來看,我說共享內存不可擴展的原因僅僅是由於物理原因。 (類似於單核/高頻如何擊中障礙)

總之,晶體管不能縮小到小於原子的大小(禁止使用新技術),並且信號傳播速度不能超過光速。因此,內存將變得越來越慢(相對於處理器),並且在某些時候,共享內存變得不可行。

我們現在可以在多套接字系統上看到NUMA的效果。大型超級計算機既不共享內存,也不兼容緩存。

6

Transactional memory就是這樣一種方法。

+0

但它很慢,不是嗎?那裏最快的實施是什麼? – MetallicPriest

+1

此頁面也可能有助於獲得更多信息:http://www.haskell.org/haskellwiki/Software_transactional_memory –

+0

@MetallicPriest - 它目前速度較慢,但​​這似乎部分歸因於核心數量較少,但是,鎖定方法,以及它是多麼新,它仍然可能是目前最好的方法。 –

0

1)只鎖定你正在訪問的內存部分,而不是整個表!這是在大型哈希表的幫助下完成的。桌子越大,鎖定機制越好。 2)如果可以,只鎖定寫入,而不是讀取(這要求在更新時讀取「先前值」時沒有問題,這通常是有效的情況)。

0

在任何多處理器/內核/線程應用程序同步中訪問最低級別的共享內存取決於總線鎖定。這樣的鎖可能會導致數百個(CPU)等待狀態,因爲它還包含鎖定那些具有總線主控設備(包括DMA)的I/O總線。理論上可以設想一箇中級鎖,當程序員確定存儲區被鎖定時不會受到任何I/O總線的影響時,可以調用該鎖。這樣的鎖定會更快,因爲它只需要將CPU緩存與主存儲器同步快速,至少與最慢的I/O總線的延遲相比。一般來說,程序員是否有能力決定何時使用哪種總線鎖定令其令人擔憂的主要可行性影響。這種鎖也可能需要其自己的專用外部引腳與其他處理器同步。

在多處理器Opteron系統中,每個處理器都有自己的內存,它成爲所有安裝的處理器可以「看到」的整個內存的一部分。試圖訪問內存的處理器將被連接到另一個處理器上,透明地通過高速互連總線(稱爲HyperTransport)向負責該內存的處理器(NUMA概念)完成訪問(儘管速度更慢)。只要處理器及其內核與物理連接的內存一起工作,處理速度就會很快。另外,許多處理器都配備了幾條外部存儲器總線,以增加其整體存儲器帶寬。

在Opteron系統上可以使用HyperTransport互連來實現理論中級鎖定。

至於任何可預見的未來,鎖定儘可能少且時間儘可能短的經典方法是,通過實現鎖定到位時使用的高效算法(以及相關的數據結構)仍然成立。