Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV';s级联分类器未利用CPU的全部功率_C++_Multithreading_Opencv - Fatal编程技术网

C++ OpenCV';s级联分类器未利用CPU的全部功率

C++ OpenCV';s级联分类器未利用CPU的全部功率,c++,multithreading,opencv,C++,Multithreading,Opencv,我使用OpenCV的级联分类器进行检测,但是我的CPU利用率从未超过50%,但应用程序的运行速度仅为~8 FPS,因此应该有更多的改进空间。我已经用TBB安装了OpenCV。我自己的程序不使用任何多线程,它只在OpenCV部分(detectMultiscale函数)上使用。所有的CPU核心都在40%左右。我尝试过将程序的优先级设置为实时,但没有帮助。会不会有我不知道的某种瓶颈 构建详细信息: 我正在使用VisualStudio2010 IDE。目前正在使用这些优化:优化:最大化速度(/O2),内

我使用OpenCV的级联分类器进行检测,但是我的CPU利用率从未超过50%,但应用程序的运行速度仅为~8 FPS,因此应该有更多的改进空间。我已经用TBB安装了OpenCV。我自己的程序不使用任何多线程,它只在OpenCV部分(detectMultiscale函数)上使用。所有的CPU核心都在40%左右。我尝试过将程序的优先级设置为实时,但没有帮助。会不会有我不知道的某种瓶颈

构建详细信息:


我正在使用VisualStudio2010 IDE。目前正在使用这些优化:优化:最大化速度(/O2),内联函数扩展:默认,启用内部函数:是(/Oi),支持快速代码(/Ot),省略帧指针:是(/Oy),启用光纤安全优化:否,整个程序优化:是(/GL)。我使用的是64位Windows 7,在发布模式下将程序构建为64位。

您需要配置一个选项,该选项允许在CMake中使用TBB支持构建OpenCV。

也许您有一个采用超线程技术的英特尔处理器。(每个核心2个线程),TBB足够聪明,每个核心只使用一个线程(通常比使用两个线程要好)。而操作系统报告的可用功率只有一半

编辑

如果您想自己修改分类器,可以调用setNumThreads(4);然后映射相似性,每个核心将有100%,而不是评论中解释的平均80%


你所看到的是营销材料(8核!!)和真相(3核)之间的区别。

它是通过TBB支持构建的。所有的核心都在40%左右。您是否在发布模式下构建(即,所有优化都处于打开状态)?您在哪个平台上?我正在使用Visual Studio 2010 IDE。目前正在使用这些优化:优化:最大化速度(/O2),内联函数扩展:默认,启用内部函数:是(/Oi),支持快速代码(/Ot),省略帧指针:是(/Oy),启用光纤安全优化:否,整个程序优化:是(/GL)。我使用的是64位Windows 7,在发布模式下以64位构建程序。事实上,我有一个带超线程的英特尔处理器。使用Process Explorer检查CPU使用情况,图表如下所示:TBB似乎每个内核使用2个线程,但正如您的图表所证明的,使用它比不使用它更糟糕。查看这篇关于超阅读的令人印象深刻的文章,谢谢你的文章。我无法在BIOS中关闭超线程,所以我尝试在任务管理器中设置关联,但这没有帮助。我在没有TBB的情况下构建了OpenCV,但这降低了程序的性能。RAM会成为瓶颈吗?有点离题了,但是当我用VisualStudio11构建相同的程序时,我得到了大约20%的性能提升,不需要对它进行调优。这就是你的处理器所能做的——相当于在4核上工作。你不能让它比每个线程40%的速度快,这相当于每个核心80%的速度——就是这样。哦,如果你想自己修改分类器,你可以调用setNumThreads(4);然后映射亲和力,每个核心都有100%的亲和力