[問題] thread平行化處理 可加速?

看板C_and_CPP作者 (歪歪)時間12年前 (2013/04/26 16:36), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenMP 小弟想利用openMP的section同時做2件相同的事 但是要使用不同的參數計算 以下為簡單的測試程式碼 start=clock();//計時 #pragma omp parallel sections { #pragma omp section { for(int i=0 ; i<100000 ; i++){ for(int j=0 ; j<10000 ; j++){ sum1=j+sum1; } } } #pragma omp section { for(int m=0 ; m<100000 ; m++){ for(int n=0 ; n<10000 ; n++){ sum2=n+sum2; } } } } finish=clock();//結束時間 duration=(double)(finish-start)/CLOCKS_PER_SEC;//總時間 測試過後,運算時間為6秒,(偶爾2秒) 不使用openMP時,卻只要4秒, 桌電的CPU是i7-2600 4核,有支援Hyper-threading 請問一下,平行化處理不保證縮短計算時間嗎? 還是測試程式有錯? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.149.49

04/26 16:56, , 1F
平行不是神,要看程式怎樣規劃
04/26 16:56, 1F

04/26 16:57, , 2F
比較慢是有可能的
04/26 16:57, 2F


04/26 17:14, , 4F
雖然移植到Windows上的行為不太一樣...
04/26 17:14, 4F

04/26 17:22, , 5F
你這做的事情需要的cpu時間沒比叫OS去搞thread長多少啊\
04/26 17:22, 5F

04/26 18:02, , 6F
小弟認為主要原因是你的sum1,2是shared 的 openmp 會
04/26 18:02, 6F

04/26 18:02, , 7F
你要開thread也是要時間的,那也是要考慮的成本
04/26 18:02, 7F

04/26 18:02, , 8F
處理lock 所以比較慢
04/26 18:02, 8F

04/26 18:03, , 9F
平行盡量用在有很明確的data||function parallelism
04/26 18:03, 9F

04/26 18:05, , 10F
的地方 例如矩陣相乘
04/26 18:05, 10F
文章代碼(AID): #1HUZoIxo (C_and_CPP)