OpenMP並行程式設計(一)

2021-04-16 05:30:09 字數 1369 閱讀 9150

openmp並行程式設計(一)

openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。

在vc8.0中專案的屬性對話方塊中,左邊框裡的「配置屬性」下的「c/c++」下的「語言」頁裡,將openmp支援改為「是/(openmp)」就可以支援openmp了。

先看乙個簡單的使用了openmp程式

intmain(int argc, char* argv)

return 0;

} 這個程式執行後列印出以下結果:

i = 0

i = 5

i = 1

i = 6

i = 2

i = 7

i = 3

i = 8

i = 4

i = 9

可見for 迴圈語句中的內容被並行執行了。(每次執行的列印結果可能會有區別)

這裡要說明一下,

#pragma

omp parallel for

這條語句是用來指定後面的for迴圈語句變成並行執行的,當然for迴圈裡的內容必須滿足可以並行執行,即每次迴圈互不相干,後一次迴圈不依賴於前面的迴圈。

有關#pragma omp parallel for 這條語句的具體含義及相關openmp指令和函式的介紹暫時先放一放,只要知道這條語句會將後面的for迴圈裡的內容變成並行執行就行了。

將for迴圈裡的語句變成並行執行後效率會不會提高呢,我想這是我們最關心的內容了。下面就寫乙個簡單的測試程式來測試一下:

void

test()

clock_t t2 = clock();

printf("time = %d/n", t2-t1); }

intmain(int argc, char* argv)

clock_t t2 = clock();

printf("total time = %d/n", t2-t1);

test();

return 0; }

在test()函式中,執行了1億次迴圈,主要是用來執行乙個長時間的操作。

在main()函式裡,先在乙個迴圈裡呼叫test()函式,只迴圈2次,我們還是看一下在雙核cpu上的執行結果吧:

time = 297

time = 297

total time = 297

time = 297

可以看到在for迴圈裡的兩次test()函式呼叫都花費了297ms, 但是列印出的總時間卻只花費了297ms,後面那個單獨執行的test()函式花費的時間也是297ms,可見使用平行計算後效率提高了整整一倍。

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...