我正在使用 OpenCV 的级联分类器进行检测,但我的 CPU 使用率从未超过 50%,但应用程序仅以约 8 FPS 的速度运行,因此应该还有很大的改进空间。我已经用 TBB 安装了 OpenCV。我自己的程序不使用任何多线程,它只在 OpenCV 的部分(detectMultiscale 函数)。所有 CPU 内核都在 40% 左右。我试过将程序的优先级设置为实时,但这没有帮助。是否存在某种我不知道的瓶颈?
构建细节:
我使用的是 Visual Studio 2010 IDE。当前使用这些优化:优化:最大化速度 (/O2)、内联函数扩展:默认、启用内部函数:是 (/Oi)、支持快速代码 (/Ot)、省略帧指针:是 (/Oy)、启用光纤-安全优化:否,整个程序优化:是 (/GL)。我在 Windows 7 64 位上,在 Release模式下将程序构建为 64 位。
也许您拥有采用超线程技术的英特尔处理器。 (每个核心 2 个线程),而 TBB 足够聪明,每个核心只使用一个线程(通常比两个更好)。并且操作系统报告可用电量的一半。
编辑
如果想自己修改分类器,可以调用setNumThreads(4);然后映射亲和性,每个核心将拥有 100%,而不是平均 80%,如评论中所述
你看到的是营销 Material (8 核!!)和真相(~3 核)之间的区别
我是一名优秀的程序员,十分优秀!