[问题] 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