日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
OpenMP并行程序設(shè)計(jì)(一)

OpenMP是一個(gè)支持共享存儲(chǔ)并行設(shè)計(jì)的庫(kù),特別適宜多核CPU上的并行程序設(shè)計(jì)。今天在雙核CPU機(jī)器上試了一下OpenMP并行程序設(shè)計(jì),發(fā)現(xiàn)效率方面超出想象,因此寫出來(lái)分享給大家。   在VC8.0中項(xiàng)目的屬性對(duì)話框中,左邊框里的“配置屬性”下的“C/C++”下的“語(yǔ)言”頁(yè)里,將OpenMP支持改為“是/(OpenMP)”就可以支持OpenMP了。   先看一個(gè)簡(jiǎn)單的使用了OpenMP程序

創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),網(wǎng)絡(luò)空間、主機(jī)租用、主機(jī)托管,四川、重慶、廣東電信服務(wù)器租用,資陽(yáng)托管服務(wù)器,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國(guó)大陸、港澳臺(tái)以及歐美等多個(gè)國(guó)家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。

 
 
 
  1. int main(int argc, char* argv[]) 
  2. #pragma omp parallel for 
  3.      for (int i = 0; i < 10; i++ ) 
  4.      { 
  5.          printf("i = %d/n", i); 
  6.      } 
  7.      return 0; 
  8. 這個(gè)程序執(zhí)行后打印出以下結(jié)果: 
  9. i = 0 
  10. i = 5 
  11. i = 1 
  12. i = 6 
  13. i = 2 
  14. i = 7 
  15. i = 3 
  16. i = 8 
  17. i = 4 
  18. i = 9 

可見(jiàn)for 循環(huán)語(yǔ)句中的內(nèi)容被并行執(zhí)行了。(每次運(yùn)行的打印結(jié)果可能會(huì)有區(qū)別) 這里要說(shuō)明一下,
#pragma
omp parallel for
這條語(yǔ)句是用來(lái)指定后面的for循環(huán)語(yǔ)句變成并行執(zhí)行的,當(dāng)然for循環(huán)里的內(nèi)容必須滿足可以并行執(zhí)行,即每次循環(huán)互不相干,后一次循環(huán)不依賴于前面的循環(huán)。  
有關(guān)#pragma omp parallel for 這條語(yǔ)句的具體含義及相關(guān)OpenMP指令和函數(shù)的介紹暫時(shí)先放一放,只要知道這條語(yǔ)句會(huì)將后面的for循環(huán)里的內(nèi)容變成并行執(zhí)行就行了。  
 
將for循環(huán)里的語(yǔ)句變成并行執(zhí)行后效率會(huì)不會(huì)提高呢,我想這是我們最關(guān)心的內(nèi)容了。下面就寫一個(gè)簡(jiǎn)單的測(cè)試程序來(lái)測(cè)試一下:

 
 
 
  1. void test() 
  2.      int a = 0; 
  3.      clock_t t1 = clock(); 
  4.      for (int i = 0; i < 100000000; i++) 
  5.      { 
  6.          a = i+1; 
  7.      } 
  8.      clock_t t2 = clock(); 
  9.      printf("Time = %d/n", t2-t1); 
  10.   
  11. int main(int argc, char* argv[]) 
  12.      clock_t t1 = clock(); 
  13. #pragma omp parallel for 
  14.      for ( int j = 0; j < 2; j++ ){ 
  15.          test(); 
  16.      } 
  17.      clock_t t2 = clock(); 
  18.      printf("Total time = %d/n", t2-t1); 
  19.   
  20.      test(); 
  21.      return 0; 
  22.   
  23. 在test()函數(shù)中,執(zhí)行了1億次循環(huán),主要是用來(lái)執(zhí)行一個(gè)長(zhǎng)時(shí)間的操作。 
  24. 在main()函數(shù)里,先在一個(gè)循環(huán)里調(diào)用test()函數(shù),只循環(huán)2次,我們還是看一下在雙核CPU上的運(yùn)行結(jié)果吧: 
  25. Time = 297 
  26. Time = 297 
  27. Total time = 297 
  28. Time = 297 

可以看到在for循環(huán)里的兩次test()函數(shù)調(diào)用都花費(fèi)了297ms, 但是打印出的總時(shí)間卻只花費(fèi)了297ms,后面那個(gè)單獨(dú)執(zhí)行的test()函數(shù)花費(fèi)的時(shí)間也是297ms,可見(jiàn)使用并行計(jì)算后效率提高了整整一倍。

下一篇文章中將介紹OpenMP的具體指令和用法。

原文鏈接:http://blog.csdn.net/drzhouweiming/article/details/1131537


網(wǎng)站標(biāo)題:OpenMP并行程序設(shè)計(jì)(一)
URL鏈接:http://www.5511xx.com/article/dpsopep.html