OPENMP編程指南

 

進入多核時代後,必須使用多線程編寫程序才能讓各個CPU核得到利用。在單核時代,通常使用操作系統提供的API來創建線程,然而,在多核系統中,情況發生了很大的變化, 如果仍然使用操作系統API來創建線程會遇到一些問題。具體來說,有以下三個問題:

1)CPU核數擴展性問題

          多核編程需要考慮程序性能隨CPU核數的擴展性,即硬件升級到更多核後,能夠不修改程序就讓程序性能增長,這要求程序中創建的線程數量需要隨CPU核數變化,不能創建固定數量的線程,否則在CPU核數超過線程數量上的機器上運行,將無法完全利用機器性能。雖然通過一定方法可以使用操作系統API創建可變化數量的線程,但是比較麻煩,不如OpenMP方便。

2)方便性問題

          在多核編程時,要求計算均攤到各個CPU核上去,所有的程序都需要並行化執行,對計算的負載均衡有很高要求。這就要求在同一個函數內或同一個循環中,可能也需要將計算分攤到各個CPU核上,需要創建多個線程。操作系統API創建線程時,需要線程入口函數,很難滿足這個需求,除非將一個函數內的代碼手工拆成多個線程入口函數,這將大大增加程序員的工作量。使用OpenMP創建線程則不需要入口函數,非常方便,可以將同一函數內的代碼分解成多個線程執行,也可以將一個for循環分解成多個線程執行。

3)可移植性問題

         目前各個主流操作系統的線程API互不兼容,缺乏事實上的統一規範,要滿足可移植性得自己寫一些代碼,將各種不同操作系統的api封裝成一套統一的接口。OpenMP是標準規範,所有支持它的編譯器都是執行同一套標準,不存在可移植性問題。

綜上所述,在多核編程中,使用OpenMP就很有必要,下面列出以前發表在我的CSDN博客中的OpenMP文章,供大家參考。

1OpenMP並行程序設計(一) (OpenMP基礎知識)

介紹OpenMP程序在並行計算時的效率,在雙核CPU上效率增加了整整一倍。 閱讀全文

2OpenMP並行程序設計(二) (OpenMP程序設計的關鍵技術)

1、fork/join並行執行模式的概念 2、OpenMP指令和庫函數介紹 3、parallel 指令的用法 4、for指令的使用方法 5 sections和section指令的用法。閱讀全文

3OpenMP中的數據處理子句      (OpenMP程序設計的細節)

本文主要介紹了OpenMP中的private、firstprivate、lastprivate、threadprivate、reduction、copyin、copyprivate等數據處理子句的用法。 閱讀全文

4OpenMP中的任務調度              (OpenMP線程同步)

本文主要介紹了OpenMP中任務調度子句schedule的使用方法。閱讀全文

5OpenMP創建線程中的鎖及原子操作性能比較

        主要比較了原子操作,Windows CriticalSection, OpenMP庫帶的鎖在單任務運行情況下和多任務運行情況下的性能情況,在多核CPU上,多任務的鎖競爭花費的時間是單任務時的鎖運行花費時間的18倍。鎖競爭帶來的效率下降完全出乎意料之外,由此也可見多核編程和單核多線程編程是有很大區別的。 閱讀全文

6OpenMP程序設計的兩個小技巧

         講述瞭如何動態設置線程數量以適應硬件和軟件的擴展性,如何將嵌套循環並行化的技巧。 閱讀全文

 

        上面列出的這些OpenMP知識,屬於初步的入門知識,如果需要進一步深入掌握OpenMP或者瞭解其實現原理,則需要看更多的參考文獻。下面列出我寫的《多核計算與程序設計》一書的第3章OpenMP程序設計中的參考文獻,供需要深入掌握的人蔘考。其中的文獻【2】講解了OpenMP的實現原理。

【1】 Ananth Grama, Anshul Gupta,“並行計算導論”,張武等譯,機械工業出版社,2005.01

【2】 Barbara Chapman, “How OpenMP is Compiled ”,http://cobweb.ecn.purdue.edu/ParaMount/iwomp2008/documents/chapman-underthehood

【3】 Bruce McMillin等,“Parallel Algorithm Fundamentals and Analysis”,http://citeseer.ist.psu.edu/mcmillin93parallel.html

【4】 Common Language Infrastructure (CLI) Partitions I to VI http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-335.pdf

【5】 Introduction to OpenMP,A Directive-based API for Parallel Processing on Shared-memory Computers,http://scv.bu.edu/documentation/tutorials/OpenMP/

【6】 Michael J. Quinn, “MPI與OpenMP並行程序設計”,陳文光等譯,清華大學出版社,2004.10

【7】 Mitsuhisa Sato, Shigehisa Satoh, Kazuhiro Kusano and Yoshio Tanaka, “Design of OpenMP Compiler for an SMP Cluster”,

http://www.hpcs.is.tsukuba.ac.jp/~msato/pdplab/papers/ewomp99.pdf

【8】 MSDN幫助材料

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vclang/html/652414c5-78ed-4b7f-8283-1a9fe4c5e78d.htm

【9】 Omni OpenMP compiler, http://phase.hpcc.jp/omni/home.html.

【10】 OpenMP2.0規範http://www.openmp.org/

【11】 OpenMP2.5規範http://www.openmp.org/

【12】 OpenMP: Simple, portable, scalable SMP Programming, http://www.OpenMP.org.

【13】 Rudolf Eigenmann and Timothy G. mattson. “OpenMP tutorial, part 2: Advanced OpenMP.”, http://www.cise.ufl.edu/research/ParallelPatterns/sc01-omp-tut-advanced.ppt.

【14】 Ruud van der Pas ,“An Introduction Into OpenMP”,http://www.nic.uoregon.edu/iwomp2005/iwomp2005_tutorial_openmp_rvdp.pdf

【15】 Sanjiv Shah, Grant Haab, Paul Petersen, & Joe Throop,“Flexible Control Structures for Parallelism in OpenMP”,http://www.it.lth.se/ewomp99/papers/grant.pdf

【16】 Shameem Akhter等,“多核程序設計技術-通過軟件多線程提升性能”,電子工業出版社,2007.03

【17】 Special issue on OpenMP and its applications. Scientific Programming, 11(2),2003.

【18】 Y. Charlie Hu, Honghui Lu, Alan L. Cox, and Willy Zwaenepoel. “OpenMP for networks of SMPs”,In Proceedings of 13th International Parallel Processing Symposium and 10th Symposium on Parallel and Distributed Processing, page 302-310. IEEE Computer Society, 1999.

 

 

 

 

多核編程相關文章:

1)用原子操作解決多線程退出問題

2)原子操作在多核編程中的使用

3)多核編程僞共享問題及其對策

4)多核編程鎖競爭問題及其對策

5)多核分佈式隊列的實現:“偷”與“自私”的運用

6)多核編程中的條件同步模式

7)多核編程的四層境界

8)“老子”是偉大的多核計算科學家

9)程序員的十層樓(1~3層)

10)多核編程文章彙總

11)並行順序搜索及終止檢測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章