copenmp並行程式在多核linu上如何最大化使用

2021-12-24 14:45:10 字數 3035 閱讀 4829

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 負載方面你把四個裝置看成四個消費者就好了。或者是說不是看成由一個佇列向裝置提交業務,而是四個裝置向一個佇列提取業務。裝置空閒的時候請求新的任務,只要粒度夠細自然就均衡了。具體情況不清楚,不過如果你的裝置支援批量處理業務,或...