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 下的 語言 頁裡,...