http://www.opencv.org.cn/index.php?title=%E5%8F%8C%E6%A0%B8%E6%9C%BA%E5%99%A8%E4%BD%BF%E7%94%A8openmp&diff=next
Wikipedia,自由的百科全书
16:47 2007年4月16日的修订版本 Shiqi Yu (Talk | 贡献) ← Previous diff | 13:16 2006年11月23日的修订版本 222.66.46.27 (Talk | 贡献) Next diff → | ||
第 2行: | 第 2行: | ||
从opencv说明上得到 | 从opencv说明上得到 | ||
- | 一些可以使用 OPENMP 做并行处理 的函数 : | + | " - 一些 函数 可以使用 OPENMP 做并行处理: |
cvHaarDetectObjects, cvCalcOpticalFlowPyrLK, cvDistTransform (the new algorithm only), | cvHaarDetectObjects, cvCalcOpticalFlowPyrLK, cvDistTransform (the new algorithm only), | ||
- | |||
因此它们的运行速度在双核CPU上要快 ~50-80% , 当代码用 Intel compiler 或者 MSVC2005 | 因此它们的运行速度在双核CPU上要快 ~50-80% , 当代码用 Intel compiler 或者 MSVC2005 | ||
- | 编译时。 | + | 编译时。" |
于是实验一下. | 于是实验一下. | ||
第 24行: | 第 23行: | ||
(可以搜索一下_OPENMP ,发现只有几个函数优化了 ) | (可以搜索一下_OPENMP ,发现只有几个函数优化了 ) | ||
- | https://p-blog.csdn.net/images/p_blog_csdn_net/hardVB/131404/o_openmp_opencv.JPG | + | [[Image:https://p-blog.csdn.net/images/p_blog_csdn_net/hardVB/131404/o_openmp_opencv.JPG]] |
+ | |||
2.编译问题 | 2.编译问题 | ||
- | 我编译的时候出现这个错误 | + | 我编译的时候出现这个错误 |
- | >./cvbgfg_gaussmix.cpp(343) : error C2039: “foreground_regions”: 不是“CvGaussBGModel”的成员 | + | 7>./cvbgfg_gaussmix.cpp(343) : error C2039: “foreground_regions”: 不是“CvGaussBGModel”的成员 |
- | > c:/Program Files/OpenCV/cvaux/include/cvaux.h(1300) : 参见“CvGaussBGModel”的声明 | + | 7> c:/Program Files/OpenCV/cvaux/include/cvaux.h(1300) : 参见“CvGaussBGModel”的声明 |
- | 最后修改cvaux.h里的 | + | 最后修改cvaux.h里的 |
- | CV_BG_STAT_MODEL_FIELDS 里面的 oreground_regions?/ 变成 oreground_regions*/ | + | CV_BG_STAT_MODEL_FIELDS 里面的 oreground_regions?/ 变成 oreground_regions*/ |
- | 我觉得我是英文版XP的问题导致文件乱码,需要修改一下的 | + | 我觉得我是英文版XP的问题导致文件乱码,需要修改一下的 |
3.编译完成用例子lkdemo测试一下,因为它用到了cvCalcOpticalFlowPyrLK , | 3.编译完成用例子lkdemo测试一下,因为它用到了cvCalcOpticalFlowPyrLK , | ||
第 41行: | 第 41行: | ||
去掉cvWaitKey(10); | 去掉cvWaitKey(10); | ||
- | 在需要优化的地方加入 | + | 在需要优化的地方加入 |
- | #pragma omp parallel | + | #pragma omp parallel |
- | 最后发现可以利用CPU 51%-53% ,说明只是很少使用到了第二个CPU,而不加时平时是最多50% | + | 最后发现可以利用CPU 51%-53% ,说明只是很少使用到了第二个CPU |
+ | |||
+ | ,而不加时平时是最多50% | ||
而使用最简单的测试openmp的例子可利用CPU 100% | 而使用最简单的测试openmp的例子可利用CPU 100% | ||
第 51行: | 第 53行: | ||
目前opencv提供的优化还太少,只有这么几个函数,实际上但感觉现在似乎不太需要openmp ,而瓶颈在硬盘IO,摄像头IO,内存IO等等 | 目前opencv提供的优化还太少,只有这么几个函数,实际上但感觉现在似乎不太需要openmp ,而瓶颈在硬盘IO,摄像头IO,内存IO等等 | ||
- | |||
5。附带最简单的测试openmp的例子 | 5。附带最简单的测试openmp的例子 | ||
- | <pre> | ||
- | #include "stdafx.h" | ||
- | #include "omp.h" | ||
- | int _tmain (int argc, _TCHAR * argv[]) | + | #include "stdafx.h" |
- | { | + | #include "omp.h" |
- | #pragma omp parallel | + | |
- | for (;;) | + | int _tmain(int argc, _TCHAR* argv[]) |
- | { | + | { |
- | int i = 0; | + | |
- | i++; | + | #pragma omp parallel |
- | int y = i; | + | for(; ; ) |
- | } | + | { |
- | return 0; | + | int i = 0 ; |
+ | i++; | ||
+ | int y = i; | ||
+ | } | ||
+ | return 0; | ||
} | } | ||
- | </pre> |
13:16 2006年11月23日的修订版本
因为机器是双核。想到怎么才能更好应用opencv , 从opencv说明上得到
" - 一些函数可以使用 OPENMP 做并行处理: cvHaarDetectObjects, cvCalcOpticalFlowPyrLK, cvDistTransform (the new algorithm only), 因此它们的运行速度在双核CPU上要快 ~50-80% , 当代码用 Intel compiler 或者 MSVC2005 编译时。"
于是实验一下.
环境 :
机器配置 : windows XP 32 , 2G RAM , dual core intel 1.8G *2
软件 : opencv版本1.0 rc1 ,vc2005 中文简体
1.VC2005下首先需要设置一下,但是opencv提供的release openmp配置好像是针对win64版本,需要修改一下,我就自己建立了一套配置, 如图,记得打开/openmp选项, 需要打开的项目是 CV CXCORE CVAUX (可以搜索一下_OPENMP ,发现只有几个函数优化了 )
Image:Http://p.blog.csdn.net/images/p blog csdn net/hardVB/131404/o openmp opencv.JPG
2.编译问题
我编译的时候出现这个错误 7>./cvbgfg_gaussmix.cpp(343) : error C2039: “foreground_regions”: 不是“CvGaussBGModel”的成员 7> c:/Program Files/OpenCV/cvaux/include/cvaux.h(1300) : 参见“CvGaussBGModel”的声明 最后修改cvaux.h里的 CV_BG_STAT_MODEL_FIELDS 里面的 oreground_regions?/ 变成 oreground_regions*/ 我觉得我是英文版XP的问题导致文件乱码,需要修改一下的
3.编译完成用例子lkdemo测试一下,因为它用到了cvCalcOpticalFlowPyrLK ,
修改lkdemo.c的代码,需要将一些IO操作、空闲cpu的代码去掉 把 cvQueryFrame( capture );变成 frame = cvLoadImage("c://test1.bmp",1); 放到for()外边 去掉cvWaitKey(10);
在需要优化的地方加入
- pragma omp parallel
最后发现可以利用CPU 51%-53% ,说明只是很少使用到了第二个CPU
,而不加时平时是最多50%
而使用最简单的测试openmp的例子可利用CPU 100%
4。结论
目前opencv提供的优化还太少,只有这么几个函数,实际上但感觉现在似乎不太需要openmp ,而瓶颈在硬盘IO,摄像头IO,内存IO等等
5。附带最简单的测试openmp的例子
- include "stdafx.h"
- include "omp.h"
int _tmain(int argc, _TCHAR* argv[]) {
- pragma omp parallel
for(; ; ) { int i = 0 ; i++; int y = i; } return 0; }