openMP多核編程框架
OpenMP是由OpenMP Architecture Review Board牽頭提出的,并已被廣泛接受的,用于共享內(nèi)存并行系統(tǒng)的多線程程序設(shè)計的一套編譯指令 (Compiler Directive)。OpenMP支持的編程語言包括C語言、C++和Fortran;而支持OpenMP的編譯器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMP提供了對并行算法的高層的抽象描述,程序員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程序進(jìn)行并行化,并在必要之處加入同步互斥以及通信。當(dāng)選擇忽略這些pragma,或者編譯器不支持OpenMP 時,程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運作,只是不能利用多線程來加速程序執(zhí)行。
OpenMP提供的這種對于并行描述的高層抽象降低了并行編程的難度和復(fù)雜度,這樣程序員可以把更多的精力投入到并行算法本 身,而非其具體實現(xiàn)細(xì)節(jié)。對基于數(shù)據(jù)分集的多線程程序設(shè)計,OpenMP是一個很好的選擇。同時,使用OpenMP也提供了更強的靈活性,可以較容易的適 應(yīng)不同的并行系統(tǒng)配置。線程粒度和負(fù)載平衡等是傳統(tǒng)多線程程序設(shè)計中的難題,但在OpenMP中,OpenMP庫從程序員手中接管了部分這兩方面的工作。
但是,作為高層抽象,OpenMP并不適合需要復(fù)雜的線程間同步和互斥的場合。
OpenMP的另一個缺點是不能在非共享內(nèi)存系統(tǒng)(如計算機集群)上使用。在這樣的系統(tǒng)上,MPI使用較多。
