OpenMP - 维基百科,自由的百科全书
OpenMP - 維基百科,自由的百科全書
OpenMP
維基百科,自由的百科全書 跳轉到: 導航、 搜索OpenMP(Open Multi-Processing)是由OpenMP Architecture Review Board牽頭提出的,并已被廣泛接受的,用于共享內存并行系統的多線程程序設計的一套指導性注釋(Compiler Directive)。OpenMP支持的編程語言包括C語言、C++和Fortran;而支持OpenMP的編譯器包括Sun Studio和Intel Compiler,以及開放源碼的GCC和Open64編譯器。OpenMP提供了對并行算法的高層的抽象描述,程序員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程序進行并行化,并在必要之處加入同步互斥以及通信。當選擇忽略這些pragma,或者編譯器不支持OpenMP時,程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運作,只是不能利用多線程來加速程序執行。
目錄?[隱藏]?
|
[編輯] 特色
OpenMP提供的這種對于并行描述的高層抽象降低了并行編程的難度和復雜度,這樣程序員可以把更多的精力投入到并行算法本身,而非其具體實現細節。對基于數據分集的多線程程序設計,OpenMP是一個很好的選擇。同時,使用OpenMP也提供了更強的靈活性,可以較容易的適應不同的并行系統配置。線程粒度和負載平衡等是傳統多線程程序設計中的難題,但在OpenMP中,OpenMP庫從程序員手中接管了部分這兩方面的工作。
[編輯] 語法
#pragma omp <directive> [clause[[,] clause] ...][編輯] 例子
在 omp parallel 段內的程序代碼由多線程來執行:
int main(int argc, char* argv[]){#pragma omp parallel printf("Hello, world.\n");return 1;}[編輯] 執行結果
% gcc omp.c (由單線程來執行) % ./a.out Hello, world.% gcc -fopenmp omp.c (由多線程來執行) % ./a.out Hello, world. Hello, world. Hello, world. Hello, world.[編輯] 環境變量
OpenMP可以使用環境變量 OMP_NUM_THREADS以控制執行線程的數量。
[編輯] 例子
% gcc -fopenmp omp.c % setenv OMP_NUM_THREADS 2(由2線程來執行) % ./a.out Hello, world. Hello, world.[編輯] 爭議
作為高層抽象,OpenMP并不適合需要復雜的線程間同步和互斥的場合。 OpenMP的另一個缺點是不能在非共享內存系統(如計算機集群)上使用。在這樣的系統上,MPI使用較多。
[編輯] 外部鏈接
posted on 2012-08-21 07:09?lexus 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lexus/archive/2012/08/21/2648422.html
總結
以上是生活随笔為你收集整理的OpenMP - 维基百科,自由的百科全书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生产者消费者问题
- 下一篇: ZOJ3380- Patchouli's