1樓:
openmp並行程式在多核linux上最大化使用cpu的方法如下:
#include
#include
#include
#include
int main()
clock_t t2 = clock();
sec = (t2 - t1);
//sec = (t2 - t1);
printf("program costs %.2lf clock tick.\n", sec);
exit(exit_success);
}以上**中,#pragma omp parallel for
這一行的作用即是呼叫openmp的功能,根據檢測到的cpu核心數目,將for (i = 0; i < 1000000000; i++)這個迴圈執行過程平均分配給每一個cpu核心。
去掉#pragma omp parallel for這行,則和普通的序列**效果一致。
注意,要使用openmp功能,在編譯的時候需要加上-fopenmp編譯引數。
以下是兩種編譯搭配兩種**出現的4種結果,可以很直觀地看到效果:
1、**裡含有#pragma omp parallel for,編譯引數有-fopenmp
endys-macbook-pro:desktop endy$ vi test.c
endys-macbook-pro:desktop endy$ gcc-6 test.c -o test -fopenmp
endys-macbook-pro:desktop endy$ ./test
program costs50202611.00clock tick.
2、**裡含有#pragma omp parallel for,編譯引數沒有-fopenmp
endys-macbook-pro:desktop endy$ gcc-6 test.c -o test
endys-macbook-pro:desktop endy$ ./test
program costs4068178.00clock tick.
3、**裡沒有#pragma omp parallel for,編譯引數有-fopenmp
endys-macbook-pro:desktop endy$ vi test.c
endys-macbook-pro:desktop endy$ gcc-6 test.c -o test -fopenmp
endys-macbook-pro:desktop endy$ ./test
program costs4090744.00clock tick.
4、**裡沒有#pragma omp parallel for,編譯引數沒有-fopenmp
endys-macbook-pro:desktop endy$ vi test.c
endys-macbook-pro:desktop endy$ gcc-6 test.c -o test
endys-macbook-pro:desktop endy$ ./test
program costs4170093.00clock tick.
可以看出,只有在情況1下,openmp生效,其他3種情況下,均為單核執行,2、3、4結果較為接近,而1的執行結果大約相差25%。
值得注意的是,使用多核心的case 1竟然比單核的其他3種case慢了25%,原因是在這種單一的迴圈運算中,並行分配cpu任務的指令比直接執行下一個迴圈指令的效率更低。所以並不是用並行運算就一定能夠提高運算效率的,要根據實際情況來判斷。
2樓:千鋒教育
openmp提供了對並行演算法的高層的抽象描述,程式設計師通過在源**中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程式進行並行化,並在必要之處加入同步互斥以及通訊。但是,作為高層抽象,openmp並不適合需要複雜的執行緒間同步和互斥的場合。
openmp的另一個缺點是不能在非共享記憶體系統(如計算機叢集)上使用,在這樣的系統上,mpi使用較多。
當然,還有一個更簡單的方法就是使用go語言。
在linux進行c語言程式設計的時候,程式裡使用了mpi或者openmp或者都使用了該怎麼進行編譯執行??謝謝
3樓:匿名使用者
mpi是一個平行計算的東西,使用的是mpicc,mpic++來進行編譯,例如
$ mpicc hello.c -o hello
$ ./hello
4樓:匿名使用者
mpi或者openmp
這個,你指的是庫?
如果是的話,編譯時,加上鍊接庫的編譯選項就可以。
比如 gcc -hello.c -o hello -lm -lxml -l/usr/local/lib -lts
-lm 連結了math庫
-lxml連結了xml庫
-l/usr/local/lib -lts 連結了ts庫,ts庫存在目錄/usr/local/lib中
執行openmp需要安裝什麼軟體?
5樓:匿名使用者
不需要了,大部分編譯器均支援openmp編譯選項的。
例如gcc為gcc -fopenmp ***.cicc: icc -openmp ***.cvs中在檔案或專案屬性中有編譯選項的
6樓:匿名使用者
不需要 ,在linux下就有了
源程式,目標程式,可執行程式,程式編輯,名詞解釋
源程式源程式,是指未經編譯的,按照一定的程式設計語言規範書寫的,人類可讀的文字檔案。通常由高階語言編寫。源程式可以是以書籍或者磁帶或者其他載體的形式出現,但最為常用的格式是文字檔案,這種典型格式的目的是為了編譯出計算機可執行的程式。將人類可讀的程式 文字翻譯成為計算機可以執行的二進位制指令,這種過程...
plc執行行程式的過程的哪個階段程式執行的結果儲存
當進人程式執行階段後,若輸人瑞又發生變化,則輸人映像區相應單元儲存的資訊,因被輸人 2 程式執行階段在程式執行階段,plc 的 cpu 從使用者程式的第 0 步開始,以接點資料為條件,根據使用者程式進行邏輯運算,並把運算結果存人輸出映像區單元中。對於使用者來說,在編寫使用者程式或選擇裝置時,必須清楚...
採用平行計算的程式用什麼程式語言開發最好
最好的是彙編,機器語言 c c 語言,多晶片平行計算,求程式設計思路。200 負載方面你把四個裝置看成四個消費者就好了。或者是說不是看成由一個佇列向裝置提交業務,而是四個裝置向一個佇列提取業務。裝置空閒的時候請求新的任務,只要粒度夠細自然就均衡了。具體情況不清楚,不過如果你的裝置支援批量處理業務,或...