[問題] OpenMP沒有效果

作者: ogstruggle (亂搞)   2016-11-18 09:05:08
開發平台(Platform): (Ex: Win10, Linux, ...)
Win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenMP
問題(Question):
各位版大大家好
小弟最近需要加速一個function,因為function裡面只是兩層for迴圈,所以選用
OpenMP來加速。在自己寫的測試程式當中是正常可以使用的,也能確認OpenMP有發揮強
大的效果,但當我將測試程式寫回需要使用的專案中之後OpenMP的加速效果就消失了,
已確認編譯器參數有調整(/openmp),也有include omp.h,編譯無報錯,程式正常執行,
小弟經過以下兩點判斷OpenMP沒有發揮加速效果:
1.時間測試
2.使用omp_get_thread_num(),得到的值全為0
目前個人推估可能是編譯器直接略過#pragma,或是執行緒都被佔用??(有測試指定thread
num給parallel for,但還是沒有效果)
但目前對於如何解決還沒有方向,希望版大們賜教!
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
void CMFC_TestSpeedUpDlg::TFunction1D(float srcMx[], float dstMx1[], float
dstMx2[], int Width, int Height, float **cLUT, float **sLUT)
{
#pragma omp parallel for
for (int u = 0; u < Width; u++)
{
float sigma = 0.0f;
float sigma2 = 0.0f;
for (int x = 0; x < Width; x++)
{
sigma += srcMx[x] * cLUT[u][x];
sigma2 += srcMx[x] * sLUT[u][x];
}
dstMx1[u] = sigma;
dstMx2[u] = sigma2;
sigma = sigma2 = 0;
}
}
補充說明(Supplement):
開發平台(Platform): (Ex: Win10, Linux, ...)
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
作者: soheadsome (師大狗鼻哥)   2016-11-18 10:06:00
因為你每次最外面的迴圈最後都要寫入那兩個陣列所以平行的就會卡在那平行化不一定等於加速
作者: ogstruggle (亂搞)   2016-11-18 10:24:00
感謝大大回覆QQ但是相同的code我用自己的測試小專案是可以的,但加到工作要用的專案上就無效,不知道跟你說的是否有直接關聯
作者: Caesar08 (Caesar)   2016-11-18 13:29:00
omp_set_num_threads?
作者: LiloHuang (十年一刻)   2016-11-18 19:02:00
可考慮改用 Intel TBB Library 的 tbb::parallel_for
作者: ilikekotomi (Young)   2016-11-18 19:31:00
工作用專案無效是否是專案設定問題? VS我記得有選項
作者: LiloHuang (十年一刻)   2016-11-18 19:34:00
樓主也有可能忘了開,開啟教學 https://goo.gl/cK8XUu
作者: laladeer (laladeer)   2016-11-21 11:03:00
你在屬性那邊 語言 omp支援有沒有開
作者: ogstruggle (亂搞)   2016-11-21 14:13:00
C大:有Set過,但無效...I大 lala:支援選項確認都開啟了L大:tbb我沒用過,感謝提供新方向,我試試看!

Links booklink

Contact Us: admin [ a t ] ucptt.com