OpenCV的级联分类器没有充分利用CPU的全部功能
OpenCV's cascade classifier not utilizing full power of the CPU
我使用OpenCV的级联分类器进行检测,但是我的CPU利用率从未超过50%,而应用程序仅以约8 FPS的速度运行,因此应该有更多的改进空间。我已经安装了OpenCV与TBB。我自己的程序不使用任何多线程,它只是在OpenCV的部分(detectMultiscale函数)。所有的CPU内核都在40%左右。我试过把程序的优先级设为实时,但没用。会不会有某种我不知道的瓶颈?
构建细节:
我正在使用Visual Studio 2010 IDE。目前使用这些优化:优化:最大速度(/O2),内联函数扩展:默认,启用内在函数:是(/Oi),支持快速代码(/Ot),省略帧指针:是(/Oy),启用光纤安全优化:否,整个程序优化:是(/GL)。我用的是64位的Windows 7,在发布模式下用64位构建程序。
也许您有一个带有超线程技术的英特尔处理器。(每个核心2个线程),TBB足够聪明,每个核心只使用一个线程(通常比两个线程更好)。操作系统报告一半的可用电量。
编辑
如果你想自己修改分类器,你可以调用setNumThreads(4);然后绘制亲缘关系图,每个核心将获得100%,而不是平均80%,正如评论
所解释的那样你看到的是营销材料(8核!!)和真相(~3核)之间的区别
您需要配置允许OpenCV在CMake中使用TBB支持构建的选项。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 分别测量每个线程上花费的 CPU 时间(C++)
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 您选择的 CPU 不支持 x86-64 指令集
- 如何降低应用程序的 CPU 使用率?
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- 如何区分CPU和内存瓶颈?
- 全部转换为大写
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- 捕获全部处理程序检测C++中的子类异常
- CPU 如何提供memory_order_acquire保证?
- 句柄OK全部崩溃
- does while循环总是占用全部CPU
- OpenCV的级联分类器没有充分利用CPU的全部功能