OpenCV3.0:将每个进程分布在不同的内核上,以加快处理速度
OpenCV3.0: distributing each process on different core for faster processing.
我的项目的目的是优化我的OpenCV程序,以利用处理器上所有可用的内核。我正在使用 Core-i3 和 2 四核 ARM 板来对各种 OpenCV 应用程序的性能进行基准测试。我对多线程等一些策略很陌生。
下面是一个用于行检测的小示例代码:
void line_detect::detect(UMat & src)
{
Mat threshold, HSV;
cvtColor(src, HSV, CV_BGR2HSV);
inRange(HSV, Scalar(H_MIN, S_MIN, V_MIN), Scalar(H_MAX, S_MAX, V_MAX), threshold);
erode(threshold, threshold, getStructuringElement(MORPH_ELLIPSE, Size(6, 6)));
dilate(threshold, threshold, getStructuringElement(MORPH_ELLIPSE, Size(3, 3)));
vector<Vec4i> lines;
HoughLinesP(threshold, lines, 1, CV_PI / 180, 50, 50, 10);
for (size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(src, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, CV_AA);
}
imshow("Threshold", threshold);
imshow("Lines detected", src);
cvWaitKey(30);
}
如何在 2 个不同的内核上运行 cvtColor 和 inRange 等函数来并行化此代码?如何实时检查不同的核心性能?
操作系统 - 赢 10IDE - Visual Studio 2015
不需要
做cvtColor
和erode
/dilate
等并行算法。它已经在内部并行,并在支持的平台上提供最大性能。
你只需要用一些并行后端来构建OpenCV。在Windows上,它可能是Concurrency,TBB,OpenMP等。只需确保在 cmake 日志中启用了此选项之一即可。
例如:
...
Parallel framework: Concurrency
...
如何构建OpenCV的说明,你可以在这里找到。
在大多数情况下,如果在函数"外部"并行化此类算法,则无法获得性能优势。
相关文章:
- 加快在C++中读取/处理日志文件的速度
- C++二进制文件 I/O 操作速度变慢.数据库如何处理二进制文件?
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- CUDA 速度比预期慢 - 图像处理
- 媒体基金会:WavSink以比实时消耗率更快的速度处理音频-是否可以实时限制后台处理
- cudaMemcpyToSymbol只是挂起,永远不会返回.GPU 处理速度为 100%.代码在 K40 上工作正常,但
- C++、OpenCV和Kinect:处理速度下降
- 将统一的内存指针传递给内核会减慢程序的速度
- 处理csv的最快方法,bash与php与c/c++的处理速度
- 头文件是否会影响程序的内存或处理速度
- 矢量类库的处理速度
- 线程似乎正在减慢图像处理C++11的速度
- 处理数据的方法,速度是我处理速度的两倍
- OpenCV中的网络摄像头图像处理C++速度很慢
- 为什么 Ruby 字符串处理速度很慢
- C++ 多线程处理速度慢
- OpenCV3.0:将每个进程分布在不同的内核上,以加快处理速度
- 提高图像处理速度
- 寻找一种可以替代python的处理速度:2D量子粒子
- 在 c++ 中使用多个内核处理大型顺序文件