OpenMP多執行緒應用程式效能分析

2021-06-04 17:02:40 字數 849 閱讀 8267

影響效能的主要因素

根據前述的amdahl定律,我們應當努力提高並行化**在應用程式中的比率,這是通用的提高效率的方法。

1、openmp本身的開銷

openmp獲得應用程式多執行緒並行化的能力不是憑空而來的,而是需要一定的程式庫的支援。在這些執行時的程式庫對程式並行加速的同時需要執行庫的本身,因此,庫中**的執行必然會帶來一定的開銷。實際上,並不是所有的**都是需要並行化的,非常有可能在某些情況下,並行化之後的執行效率反而比不上序列執行的效率。因此,只有並行執行**段負擔足夠大,而引入的openmp本身的開銷又足夠小,此時引入並行化操作才能夠加速程式的執行。

2、負載均衡

我們知道,乙個openmp應用程式在執行的過程中,有很多的同步點,執行緒只有在同步點進行同步之後才能夠繼續執行下面的**。因此,某乙個執行緒在執行到同步點的時候若沒有進一步的工作需要完成,此執行緒只有等待其它執行緒執行完畢才能夠繼續。此時,如果各個執行緒之間的負載不均衡,就有可能造成某些執行緒在執行過程中無事可幹,經常處於空閒狀態;而另外一些執行緒則負擔沉重,需要很長時間才能夠完成任務。在openmp的執行時以及環境變數中對負載均衡的需求有一定的支援,例如可以劃分執行的粒度,並通過動態排程的方法消除一定的負載均衡問題。

3、區域性性

基於區域性性的假設:即程式在繼續執行的過程中,繼續訪問同樣的或者相鄰的資料的可能性要比隨機訪問其它資料的可能性要大。因此,在編寫程式的時候,需要考慮到快取記憶體的作用,有意地運用這種區域性性帶來的快取記憶體的效率提高。

4、執行緒同步帶來的開銷

對於多執行緒應用程式來說,相對於序列執行程式的乙個固有特點就是執行緒之間可能存在的同步開銷。多個執行緒在進行同步的時候必然帶來一定的同步開銷。考慮同步的必要性,消除不必要的同步,或者調整同步的順序,就有可能帶來效能上的提公升。

OpenMP多執行緒應用程式程式設計技術

2.1 迴圈並行化 pragma omp parallel for clause clause for index first test expression increment expr else task 1 return task void task queue int my task pra...

C 應用程式效能優化

本文選自c 應用程式效能優化 第2版 一書 總 序 去國離家十六載後,2006年,當我再次歸來凝視上海這座不夜城時,不由地感慨世界真的變小了 變平了,中國作為地球村的一員,正以驚人的速度發展變化著。世界正改變著中國,中國也不斷影響著世界。在備感欣喜振奮之餘,我亦常常思索,在乙個越來越小 越來越平的世...

C 應用程式效能優化

本文選自一書 總 序 去國離家十六載後,2006年,當我再次歸來凝視上海這座不夜城時,不由地感慨世界真的變小了 變平了,中國作為地球村的一員,正以驚人的速度發展變化著。世界正改變著中國,中國也不斷影響著世界。在備感欣喜振奮之餘,我亦常常思索,在乙個越來越小 越來越平的世界裡,中國會面對怎樣的挑戰和機...