為您揭曉多核并行計算是什么
由處理器技術(shù)的發(fā)展而催生的多核技術(shù)帶動了軟件編程的變革.
以前只有在超級計算機中才能體驗的并行計算目前被普及到了臺式機中.
在多核技術(shù)沒有產(chǎn)生之前,臺式機中有一種多CPU的架構(gòu):對稱式多處理器,在一塊主板上放置多塊CPU的技術(shù),但是這種主板架構(gòu)當(dāng)時來講也非常昂貴,winNT支持這種技術(shù),一般在服務(wù)器上才被應(yīng)用.
多核CPU的產(chǎn)生,開啟了并行計算的美好篇章,普通開發(fā)者/用戶都可以廉價的得到它(xp支持這種多核CPU,win98則不支持).
多核CPU架構(gòu)與多CPU架構(gòu)并無太大區(qū)別,只是將芯片封裝的更緊密,成本更低而已.
在***的Intel i7系列處理器上同時支持多核與超線程,這意味著處理器將擴充一倍的內(nèi)核數(shù)量,如4核心CPU,將被操作系統(tǒng)識別為8核心.
例如在一個主板上有4個CPU插槽,每個槽插一個4核的CPU,并且每一核都具有超線程,那么將會有32個線程共同執(zhí)行代碼(32位windows支持CPU數(shù)量的極限),這太帥了,不是嗎?
概念
Concurrent(并發(fā))與Parallel(并行)
并發(fā)是用來描述并行執(zhí)行的方式(看上去一起發(fā)生的事件,例如目前操作系統(tǒng)的多任務(wù)調(diào)度程序,看上去桌面上有許多程序在同時運行.),并發(fā)是形容詞.
并行是指通過并發(fā)將一個操作分解成一組粒度更細(xì)的工作單元,并且這些工作單元可以在不同的處理器內(nèi)核上運行.并行是動詞,指必須有兩個以上的事件發(fā)生.
工作單元,以粒度可分為最小到單一CPU指令,大到函數(shù)或系統(tǒng)任務(wù).
并行有數(shù)據(jù)并行性與任務(wù)并行性
數(shù)據(jù)并行性指對許多數(shù)據(jù)執(zhí)行相同的并行操作,比如對一組數(shù)的每個數(shù)進(jìn)行加法操作.
任務(wù)并行性指對相同的一組數(shù)據(jù)執(zhí)行不同的并行操作,比如一個執(zhí)行加法操作,而另一個執(zhí)行乘法操作.
優(yōu)秀的多核微處理器:
AMD Multicore Opteron
Intel Core2 Duo
并行編程的麻煩:內(nèi)存一致模型簡稱內(nèi)存模型
緩存一致性(cache coherency) 將緩存與主內(nèi)存數(shù)據(jù)進(jìn)行同步
內(nèi)存一致性模型(memory consistency model)
CPU可以對內(nèi)存的讀取或?qū)懭氩僮髦匦屡判?亂序執(zhí)行Out of Order),而導(dǎo)致內(nèi)存一致性的產(chǎn)生.就是指CPU中實際內(nèi)存訪問操作與程序代碼中內(nèi)存訪問操作的不一致性程度.
CPU的硬件架構(gòu)決定了內(nèi)存模型的強度,強度越高寫代碼就會更容易.
x86/64架構(gòu)的CPU有較強的內(nèi)存一致性模型,而安騰系列處理器Itanium(IA-64)是較弱的模型.它為了提高性能(不必根蹤緩存行的狀態(tài))不會主動刷新緩存,而是提供指令操作緩存刷新到主內(nèi)存.
還有一些軟件實現(xiàn)的內(nèi)存模型,比如java虛擬機和.NET CLR,它們都是比較強的內(nèi)存模型,而且不考慮具體的硬件實現(xiàn).
解決辦法:內(nèi)存柵欄(memory fence)
內(nèi)存柵欄可以阻止目標(biāo)架構(gòu)對指令進(jìn)行重排.利用語言平臺的特性或原子方法可以實現(xiàn)內(nèi)存柵欄,比如.net中的Interlocked類方法,c++中的volatile變量.
附錄一些并行庫:
Single Unix Specification的POSIX線程庫.
Intel的TBB線程庫.
Standard Template Adaptive Parallel Library,STAPL:標(biāo)準(zhǔn)模板適配并行庫.
***并行編程庫必須得到操作系統(tǒng)的支持,如果系統(tǒng)沒有相應(yīng)功能api,上面那些并行庫也就一無是處了.
原文標(biāo)題:并行編程 - 給不及格的程序員
鏈接:http://www.cnblogs.com/ioriwellings/archive/2010/06/08/1749343.html
【編輯推薦】