您好,登錄后才能下訂單哦!
本篇內容主要講解“OpenMP并行程序設計方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“OpenMP并行程序設計方法是什么”吧!
在VC8.0中項目的屬性對話框中,左邊框里的“配置屬性”下的“C/C++”下的“語言”頁里,將OpenMP支持改為“是/(OpenMP)”就可以支持OpenMP了。
先看一個簡單的使用了OpenMP程序
int main(int argc, char* argv[]) { #pragma omp parallel for for (int i = 0; i < 10; i++ ) { printf("i = %d/n", i); } 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() { int a = 0; clock_t t1 = clock(); for (int i = 0; i < 100000000; i++) { a = i+1; } clock_t t2 = clock(); printf("Time = %d/n", t2-t1); } int main(int argc, char* argv[]) { clock_t t1 = clock(); #pragma omp parallel for for ( int j = 0; j < 2; j++ ){ test(); } 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并行程序設計方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。