OpenMP並行程式設計(一)

來源:互聯網
上載者:User
 

OpenMP 並行程式設計(一) OpenMP是一個支援共用儲存並行設計的庫,特別適宜多核CPU上的並行程式設計。今天在雙核CPU機器上試了一下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 = 0i = 5i = 1i = 6i = 2i = 7i = 3i = 8i = 4i = 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 = 297Time = 297Total time = 297Time = 297 可以看到在for迴圈裡的兩次test()函數調用都花費了297ms, 但是列印出的總時間卻只花費了297ms,後面那個單獨執行的test()函數花費的時間也是297ms,可見使用並行計算後效率提高了整整一倍。  下一篇文章中將介紹OpenMP的具體指令和用法。 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.