隨著多核時代的到來與流行,傳統的單執行緒序列程式的程式設計模式必將改變,取而代之的將是並行程式設計。目前已經有五種主要並行程式設計模型,下面將對此五種模型進行概括性的分析與比較:
1. mpi
mpi(message passing inte***ce)訊息傳遞介面是mpi論壇發布的乙個庫,而不是一門實現語言,支援c/c++/fortran。是一種訊息傳遞程式設計模型,為程序間通訊服務。mpi提供了一種與平台無關,可以被廣泛使用的編寫訊息傳遞程式的標準。用它來編寫訊息傳遞程式,不僅實用、可移植、高效和靈活,而且和當前已有的實現沒有太大的變化。目前mpi的主要實現有以下三種:
優點:可以在集群上使用,也可以在單核/多核cpu上使用,它能協調多台主機間的平行計算,因此並行規模上的可伸縮性很強,能在從個人電腦到世界top10的超級計算機上使用。
缺點:第一,基於訊息傳遞,需要顯示劃分和分布計算任務,顯示進行訊息傳遞與同步,且不易增量開發序列程式的並行性;第二,使用程序間通訊的方式協調平行計算,這導致並行效率較低、記憶體開銷大、不直觀、程式設計麻煩。
參考資料:mpi論壇
2. openmp
openmp(open multi processing)是由open arb發布的一種用於並行程式設計的規範,是建立在序列語言上的擴充套件,目前可以在c/c++/fortran中使用。
openmp由三部分組成:編譯指導(compiler directive)、執行庫(runtime library)和環境變數(environment variables)。其語言模型基於以下假設:執行單元是共享乙個位址空間的執行緒,即openmp是基於派生/連線(fork/join)的程式設計模型。fork/join的並行機制如下圖所示:
fork/join並行機制:並行區前,序列命令派生出多條並行命令並行執行,執行到並行區末等待,等所有並行任務都結束,再轉到序列執行。
openmp有兩種常用的並行開發形式:一是通過簡單的fork/join對序列程式並行化;二是採用單程式多資料對序列程式並行化。
優點:第一,共享儲存模型,使得程式設計師不必進行資料劃分和分布,使得開發並行程式比較容易;第二,更適合於smp系統;第三,主要面向迴圈級的並行開發,可以容易地實現增量性的並行化。
缺點:第一,openmp只適用於smp結構;第二,openmp主要開發迴圈級的並行程式,受此限制,對某些應用並不適合;第三,openmp的編寫、正確性除錯和效能排程複雜。
參考資料:open arb - openmp
優點:是經過效能高度優化的庫,執行效率高。
缺點:專用於intel處理器和某些領域,不方便移植。
參考資料:intel ipp產品介紹
4. intel tbb
intel tbb(threading building blocks),intel執行緒構建模組,是乙個為建立可靠的、可移植的和可擴充套件的並行程式的c++模板庫。專用於編寫高層抽象的c++程式,和可移植的程式。
優點:可移植、可擴充套件。
缺點:效能沒有ipp高。
五種主要多核並行程式設計方法分析與比較
隨著多核時代的到來與流行,傳統的單執行緒序列程式的程式設計模式必將改變,取而代之的將是並行程式設計。目前已經有五種主要並行程式設計模型,下面將對此五種模型進行概括性的分析與比較 1.mpi mpi message passing inte ce 訊息傳遞介面是mpi論壇發布的乙個庫,而不是一門實現語...
五種主要多核並行程式設計方法分析與比較
隨著多核時代的到來與流行,傳統的單執行緒序列程式的程式設計模式必將改變,取而代之的將是並行程式設計。目前已經有五種主要並行程式設計模型,下面將對此五種模型進行概括性的分析與比較 1.mpi mpi message passing inte ce 訊息傳遞介面是mpi論壇發布的乙個庫,而不是一門實現語...
幾種多核並行程式設計方法的比較
隨著多核時代的到來與流行,傳統的單執行緒序列程式的程式設計模式必將改變,取而代之的將是並行程式設計。目前已經有五種主要並行程式設計模型,下面將對此五種模型進行概括性的分析與比較 mpi mpi message passing inte ce 訊息傳遞介面是mpi論壇發布的乙個庫,而不是一門實現語言,...