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