Re: [問題] 問書- about openmp

看板C_and_CPP (C/C++)作者 (突然覺得自己是孤獨的...)時間14年前 (2011/08/14 20:56), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《tropical72 (藍影)》之銘言: : ----- : /* code 1 - bad opmmp */ : #pragma omp parallel for /* sorry, 是放外面效率較差 */ : for (int iterator=0; iterator<ITER; ++iterator) : for (int i=0;i<SIZE;++i) : in[i] = i + 2680; omp parallel for理論上是放外層效果會好 但你這個case明顯有問題, 資料發生相依性的問題, 也就是下次的結果必須要等這次算完才有, OpenMP當然不會改善你這程式的效能效能 事實上, 以這個case的計算來說, 應該是先來簡化計算, 可以直接得到 in[i] = func(i); // 看起來是 ITER*(2680 +i) 而搭配omp就只要一層迴圈 #pragma omp parallel for for (int i=0;i<size;++i) in[i] = inline_func(i); omp for應該要放的是能夠平行化的運算 比如說 omp for for (int i=0;i<nSize;i++) { for (j=0;j<jMax;j++) data[i] = xxxxxxxx; } 另外還有一些資料相依的做法, 可以指名變數與運算元 如#pragma omp for reduction( +:my_variable) int nSum = 0; #pragma omp parallel { #pragma omp for reduction( +:nSum) for( int i=0; i<10000;i++) for(int j=0;j<300000;j++) nSum += j; } cout << nSum << endl; 總之, 先了解平行化的限制再寫, 會比較好 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.51.19

08/14 23:07, , 1F
謝謝建議,不知是否有合適書籍可供進修?
08/14 23:07, 1F

08/16 00:06, , 2F
blog.csdn.net/drzhouweiming/article/details/4093624
08/16 00:06, 2F


08/16 02:29, , 4F
謝謝 C 大推薦, blog 裡的連結也都很精彩,感謝!!
08/16 02:29, 4F
文章代碼(AID): #1EHyNkc6 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1EHyNkc6 (C_and_CPP)