多核多執行緒技術程式設計

2021-06-17 18:42:11 字數 909 閱讀 2031

幾年之前,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,對客戶端軟體,採用多執行緒,...