2011年4月26日 星期二

OpenMP 心得 (六) Single Construct and Master Construct

在平行執行程式時有些工作其實只要由一個執行緒來做即可,例如印出訊息到螢幕或者是讀寫檔案資料等,像這類只需要指派一個執行緒來做的工作我們可以將它們放到 single construct 或 master construct 之中。這兩個 constructs 的功用看起來雖然相同,但在操控執行緒的行為上卻有些不一樣,在這篇文章中我們將討論這兩個 constructs 的用法以及在什麼情況下該採用那個 construct。

2011年4月16日 星期六

OpenMP 心得 (五) Sections Construct

大部分的程式實際上是由許多個工作任務所組合而成,有些工作任務可能只是一行簡單的敘述,像是輸出資訊到螢幕;也可能是由數個敘述或小型任務所組成的程式區塊,例如條件判斷結構、迴圈結構、以及函式等。在些任務在序列執行的環境下按照我們編撰它們的順序被執行,其中有些任務在處理過程中是彼此相關的,即某些任務在運算時需要用到其它任務的執行結果,處理這類具有相關性的任務必須要按其因果順序來進行。但有些任務彼此間是不相關的,也就是說執行它們並不需要按一定的順序,誰先誰後都不會影響到程序接下來的進展以及最後的計算結果,像這樣互為獨立的程式任務就可以使用 OpenMP 的 sections construct 來將它們平行化。

2011年4月9日 星期六

OpenMP 心得 (四) Loop Construct

OpenMP 的 work-sharing constructs 共有四種,分別是 loop construct、sections construct、single construct、以及 Fortran 語言專有的 workshare construct。它們的功用是分配 parallel construct 所產生的多執行緒去平行執行程式,其中最常被使用的是前兩個構造 loop construct 與 sections construct,本篇文章我們將先介紹用於平行迴圈結構的 loop construct。

2011年3月30日 星期三

OpenMP 心得 (三) Parallel Construct

本文將介紹 OpenMP 最基本且最重要的 construct: parallel construct,如果程式中沒有 parallel construct 則程式只能被序列執行。另外文中也將示範 barrier construct 以及 omp_get_thread_num() 函式的用法。

2011年3月25日 星期五

OpenMP 心得 (二) 基本知識與常見術語

在介紹 OpenMP 的用法前,我們先來瞭解一些相關的基本知識與術語,讓讀者可以對 OpenMP 建立起一個大略的圖像以及統一一些專有名詞,這對之後的學習與討論都會有相當的幫助。有關專門術語的中文翻譯部分,翻得不好不如不翻,所以除非是使用上已經比較有共識的名詞外,其它術語我個人是傾向不翻譯而直接使用原文,然後試著在它們第一次出現時再加以說明。

2011年3月19日 星期六

OpenMP 心得 (一)

最近幾年多核心 CPU 已蔚為流行,四核以上的 CPU 不再是少數追求高效能的電腦玩家才會選擇的昂貴零組件,而是漸漸成為一般電腦的標準配備,可以想見再過幾年在市面上出現十幾、三十幾核的桌上型 CPU 也不是不可能的事。多核心的 CPU 代表電腦擁有可以同時處理多項工作的能力,所以我們可以一次執行數個程式來獲得較佳的工作量對時間之效益比,或者是將單一工作分解成數個可獨立執行的部份來平行處理以縮短該工作的執行時間。後者便是平行程式發展的著眼點。早期有需要寫平行程式的人大多是屬於比較專業的研究人員,也只有這些人所屬的機構單位才有經費去設置高價的多 CPU 電腦系統。但是在多核心電腦普及的現在,一般程式開發人員也開始有需要去接觸這方面的知識,畢竟好的程式設計師就是要在許可的範圍內盡量去榨取電腦系統的資源,只使用一個核心去執行程式卻放著其它的核心在旁邊納涼對某些程式設計師而言根本是一種罪惡。