[問題] OpenMP 如何確定每顆核心都有用到?

看板C_and_CPP (C/C++)作者 (笨小孩)時間9年前 (2016/05/20 10:04), 9年前編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) g++ on Raspberry Pi 3 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenCV OpenMP 問題(Question): 在加速一些追蹤的演算法,在雙核的筆電上以驗證過,速度變1.8倍 但在4核心的樹莓派3上卻也只大約變2倍 餵入的資料(Input): 可平行化的迴圈(如程式碼) 預期的正確結果(Expected Output): 速度變為原來的3倍多 錯誤結果(Wrong Output): 效能不符合預期 程式碼(Code):(請善用置底文網頁, 記得排版) vector<double> vSumRadio(sampleBoxNum, 0); #pragma omp parallel for num_threads(4) for (int j=0; j< sampleBoxNum; j++) { double eSumRadioTmp = 0; double eTmp1 = 0; double eTmp2 = 0; eSumRadioTmp = 0.0f; for (int i = 0; i<featureNum; i++) { double ePosTmp = 0, eNegTmp = 0; eTmp1 = (sampleValue[i][j]-Pos[i])*(sampleValue[i][j]-Pos[i]); eTmp2 = (sampleValue[i][j]-Neg[i])*(sampleValue[i][j]-Neg[i]); ePosTmp = exp(eTmp1/-(2.0f*sigmaPos[i]*sigmaPos[i] +1e-30))/(sigmaPos[i] + 1e-30); eNegTmp = exp(eTmp2/-(2.0f*sigmaNeg[i]*sigmaNeg[i]+ 1e-30))/(sigmaNeg[i]+1e-30); eSumRadioTmp += log(ePosTmp + 1e-30) - log(eNegTmp + 1e-30); } vSumRadio[j] = eSumRadioTmp; } 補充說明(Supplement): 1. 原本沒用 num_threads(4),用omp_get_thread_num()抓出來的執行緒只有0跟1 2. omp_get_num_procs() 抓出來的核心數確定為4核心 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.212.76 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1463709878.A.999.html ※ 編輯: hardman1110 (111.251.212.76), 05/20/2016 10:29:55

05/20 11:32, , 1F
不是 top 看一下就知道了嗎
05/20 11:32, 1F

05/20 12:16, , 2F
top是指?? 如果真的只用到其中兩顆核心 那要怎做才能
05/20 12:16, 2F

05/20 12:17, , 3F
4顆都用到呢?
05/20 12:17, 3F

05/20 12:33, , 4F
/usr/bin/top 啊
05/20 12:33, 4F

05/20 13:36, , 5F
top是linux下的一隻程式,可看cpu使用率等資訊
05/20 13:36, 5F

05/20 13:36, , 6F
不過我更喜歡htop
05/20 13:36, 6F

05/20 13:44, , 7F
time 看 real 和 user 的比例
05/20 13:44, 7F

05/20 15:11, , 8F
謝謝指導 還真的不知道top 看了一下CPU使用率,不管
05/20 15:11, 8F

05/20 15:12, , 9F
我有沒有強制切成4個執行緒,run程式時4顆cpu
05/20 15:12, 9F

05/20 15:13, , 10F
使用率都會增加到40~50% 原本都5%以內
05/20 15:13, 10F
文章代碼(AID): #1NFd2scP (C_and_CPP)
文章代碼(AID): #1NFd2scP (C_and_CPP)