溢出问题和并行速度提高不明显

wangqingchn 2010-04-03 08:43:56
加精
大家帮帮忙,帮我分析解释一下,先谢谢了。
//问题函数体
int Observe(int N,IplImage *s_hue, int W, int H, CvHistogram * s_model_hist)//IplImage为图像结构体
{
CvHistogram * n_hist = NULL; //CvHistogram 为OPENCV中直方图结构体
double n_bha = 0.0;
CvRect n_selection = {0,0,0,0}; //CvRect为矩形结构体

//#pragma omp parallel for
#pragma omp parallel for private(n_hist)
for(int i = 0; i < N;i++)
{
...
n_hist = cvCreateHist(1,&hdims,CV_HIST_ARRAY,&hranges,1); //创建直方图
cvSetImageROI(s_hue,n_selection); //选择图像s_hue中的n_selection区域
cvCalcHist(&s_hue,n_hist,0,0); //计算s_hue区域的直方图,赋给n_hist
cvResetImageROI(s_hue); //释放s_hue
n_bha = cvCompareHist( n_hist, s_model_hist, CV_COMP_BHATTACHARYYA); //计算n_bha
cvReleaseHist ( &n_hist ); //释放n_hist
}
return 0;
}

//大程序
计时开始
for(;;)
{
...
Observe();
...
}
计时结束
(串并行时间是在同等条件下测试的,双核,线程数为2)
问题:
1.选择使用#pragma omp parallel for 时,程序能够执行,但是n_bha的值会溢出,得不到正确结果,并行时间比

串行时间提高近60%。
2.选择使用#pragma omp parallel for private(n_hist)时,程序正常,能得出正确结果,但是并行时间与串行时间基

本相等。现在的困惑是,情况1为什么n_bha会溢出?情况2为什么并行效果不明显,如何提高并行执行速度?
小弟最终的想法是提高情况2的并行速度。大家帮忙分析一下,谢谢。

...全文
625 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
weenyaimac 2010-05-14
  • 打赏
  • 举报
回复
1、cvCreateHist, cvCalcHist, cvCompareHist, 这些函数不一定是线程安全的
2、cvCompareHist函数计算n_bha,各个线程可能会产生竞争,所以导致并行线程串行等待,因此并行加速比并不理想
平常心也 2010-04-17
  • 打赏
  • 举报
回复
学习学习有待学习啊
lianshuaike 2010-04-17
  • 打赏
  • 举报
回复
来看看
qj737 2010-04-17
  • 打赏
  • 举报
回复
每天回帖就可以由10分啊啊啊啊
csqok90 2010-04-16
  • 打赏
  • 举报
回复
不错.学习了.
koukong 2010-04-16
  • 打赏
  • 举报
回复
打酱油
  • 打赏
  • 举报
回复
在学C++,打算迟点也学Java
wangtu105 2010-04-15
  • 打赏
  • 举报
回复
学习学习!
szuzhouhui 2010-04-15
  • 打赏
  • 举报
回复
估计 cvCreateHist, cvCalcHist, cvCompareHist, 这些函数不一定是线程安全的吧, 不可重入. n_hist 私有后自然问题解决了.

主要问题不是在计算上, 又是一个内存访问的问题
yoyoma214 2010-04-15
  • 打赏
  • 举报
回复
并行什么情况才能发挥作用,也许是足够复杂的情况会,而且是非数值运算吧。
jokerdx 2010-04-15
  • 打赏
  • 举报
回复
学习了~~~~~~~~~~~~~~~~~~~~~~~
lmc158 2010-04-15
  • 打赏
  • 举报
回复
估计 cvCreateHist, cvCalcHist, cvCompareHist, 这些函数不一定是线程安全的吧, 不可重入. n_hist 私有后自然问题解决了.

主要问题不是在计算上, 又是一个内存访问的问题
woshinigeno1 2010-04-15
  • 打赏
  • 举报
回复
恩 好
zou19890421 2010-04-15
  • 打赏
  • 举报
回复
可惜我看不懂
felixlufei 2010-04-15
  • 打赏
  • 举报
回复
学习,期待高人
hdh_1196 2010-04-15
  • 打赏
  • 举报
回复
me too
bmwdoc 2010-04-15
  • 打赏
  • 举报
回复
上来拿分,以示存在.
sabyt1 2010-04-14
  • 打赏
  • 举报
回复
学习一下
cx2008 2010-04-14
  • 打赏
  • 举报
回复
大家帮帮忙,帮我分析解释一下,先谢谢了
wangqingchn 2010-04-14
  • 打赏
  • 举报
回复
再次感谢版主intel_iclifort耐心地回复解答,小弟正在学习并改进中,问题解决后会及时与大家分享。
谢谢Aniao和其他朋友的支持。
加载更多回复(36)

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧