2012年8月20日 星期一

在 Fedora 中,用 Eclipse 開發 OpenMP 程式

多執行緒 (Multi-Thread) 在物件導向 (Object-Oriented) 程式中很重要,但是真正使用它來寫程式並不普遍,可能是因為將資料分由數個執行緒合作完成,在資料的安排上有些複雜。現在的電腦多是多處理器、多核心,多執行緒的程式可以分在不同處理器/核心執行,可以增加不少運算速度。
    OpenMP 應用 thread 的方式來達到「平行處理」的目的,也解決了資料分散處理、合併的問題。因此是該好好學習它了,利用 Eclipse 的方便,開發、除錯 OpenMP 的程式應該是個好主意。
    接下來介紹一下,如何在 Fedora (或 Linux) 中,用 Eclipse 開發 OpenMP 程式。
之前已經寫過一些用 Eclipse 開發 C 、 OpenCV 的文章,所以這次就直接切入重點。需要前情提要,請參考 "在 Fedora 中,用 Eclipse 寫第一個程式 HelloWorld" 及 "在 Fedora 中,用 Eclipse 開發 OpenCV 程式" 兩篇。

一、建立新專案 HelloOpenMP

一開始就寫 OpenMP 程式怎麼可能,先下載個現成的 HelloOpenMP.c 程式吧! 這是美國.Lawrence Livermore 國家實驗室 "OpenMP 教程" 中的範例,待會把它貼到 HelloWorld.c 上,覆蓋掉原來的程式。
注意:編譯前,在程式的 main() 最後加上 " return 1; ",不然編譯會出現錯誤訊息。

二、設定專案參數

從「選單」→「專案(P)」點選「內容(P)」,以設定專案的內容。
  • 當跳出專案設定視窗後,從左欄的「C/C++ Build」點選「Settings」,接著再設定右欄 Settings。在右欄中的「Configuration:」選 "[All Configurations]",使「除錯版」與「釋出版」有相同設定。
  • 設定編譯的參數要從「Tool Settings」→「GCC C Compiler」點選「Miscellaneous」。在右方的「Other flags」的最後加上 "-fopenmp" 。
注意:上面的「Configuration:」設定中若「除錯版」與「釋出版」的設定要求不同時,就要分開設定。

最後要設定 Link (鏈結) 的參數,一樣從「Tool Settings」→「GCC C Linker」點選「Miscellaneous」,在右方的「Linker flags」中加上 "-fopenmp" 。
按確定後,完成專案的編譯、連結參數之設定。

三、編譯、執行

按「鐵鎚」選定「釋出版」模式,再按一次「鐵鎚」就會進行「編譯」。
接著按「執行」鈕,開始執行程式。測試的電腦是雙處理器,多按幾次會發現執行的結果都不一樣。
Hello World from thread = 0
Hello World from thread = 1
Number of threads = 2

Hello World from thread = 1
Number of threads = 2
Hello World from thread = 0

Number of threads = 2
Hello World from thread = 1
Hello World from thread = 0

已測試版本:

  • Fedora: 14
  • Eclipse: 3.6.1

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)