幾年之前,cpu的效能還主要取決於cpu的主頻,經過超摩爾定律的發展後,沒過多長時間cpu的主頻速度就已接近「極限」,使得單單靠提高cpu的主頻來提公升效能變得非常困難。
目前,intel、amd等cpu生產商都轉而採用了多核技術來提公升cpu效能,甚至提出了群核cpu的概念。這意味著,要充分發揮多核cpu的效能,程式就必須採用多執行緒併發計算的方式,傳統的序列程式將會極大地浪費多核cpu的運算能力!
c++是上世紀80年代誕生的語言,它的前身是同樣風靡全球的c語言。一直以來它都以**效率卓越著稱,進入多核時代後,因為c++標準庫沒有提供多執行緒支援,要用c++開發出充分利用多核cpu的程式將面臨很大挑戰。
於是,在c++社群出現了不少優秀的庫以支援並行程式設計,如各種跨平台的執行緒庫,openmp,clik++等。另一方面,微軟也從win2k開始不斷地加入執行緒池api(如queueuserworkitem),c++09標準也明確地表示要加入多執行緒的支援。
使用執行緒庫編寫並行程式的優點是可以精確排程各個執行緒,並且可以在所有c++編譯器裡使用。不過要充分發揮多核cpu的效能,還要考慮很多因素,主要難點有:
· 死鎖 編寫多執行緒必然會遇到同步問題,如果同步控制出現問題,就可能出現死鎖或髒資料。
· 執行緒之間通訊 使用何種機制在多個執行緒之間通訊?即要保證通訊資料同步又要保證效率。
· 負載平衡 分配到每個執行緒的工作量要盡量平衡,避免乙個執行緒忙乙個執行緒閒的情形發生。
· 資源匹配 程式應該使用多少個執行緒?過少的執行緒不能充分利用cpu的多核優勢,而過多的執行緒會造成執行緒排程過於頻繁同樣會降低效率。
openmp的例子:
參考文章《
cpu affinity
參考文章《
管理處理器的親和性
(affinity)
多核技術與併發多執行緒技術介紹
看多很多人在這個上面把概念弄混淆,我這裡給大家簡單介紹一下這兩個技術的不同。多核技術可以看成是一種cpu的整合技術,在乙個cpu處理模組上,可以整合2個或者是多個cpu,但是,他們還是單獨的物理cpu。併發多執行緒技術則需要os的支援,是在os級別上,可以實現乙個物理cpu的多執行緒併發處理,提高o...
跨平台多核多執行緒程式設計指南
1.pragma omp parallel for 把for迴圈拆分成執行緒進行多核併發處理 2.pragma omp parallel section 把 段實現成執行緒進行多核併發處理 3.pragma omp critical 標誌併發處理的臨界塊 4.pragma omp master si...
單核 多核 多執行緒
1 鎖競爭 單核中,如果單個執行緒取得所,則獲取cpu執行時間,其他等待獲取鎖的執行緒被阻塞。使用了鎖,影響的只是枷鎖和解鎖的耗時,cpu始終執行。多核中,若2個 更多 執行緒使用同一把鎖,則會導致cpu飢餓。實際還是序列化執行!2 執行緒分解和執行的區別 對單核cpu,對客戶端軟體,採用多執行緒,...