我有一个时间关键型应用程序,它处理来自相机的一系列图像。它是用 C++ 编写的,并使用 Qt、OpenCV 和 boost 库。它将在专用 PC 上运行。
目前,gui 在主线程中运行,我打开一个新线程进行图像处理。我没有费心将进程部分划分为线程,因为我认为 OpenCV 已经在这样做了。但是,我无法维持最大可容忍延迟。
我的问题是,我如何知道我的应用程序是否使用了最大级别的所有内核? 当我查看性能监视器时,我看到的模式真的很奇怪。 CPU 使用率可能是 %35-40,所有内核都在工作但不是全速运转。
我做错了什么吗?
最佳答案
您没有做错任何事,但是您可以通过以下方式更改代码以充分利用 cpu 内核:
1 - 设置内核亲和性,使线程不会从一个内核更改为另一个内核,这可以提高缓存使用率(L1 和可能的 L2)
2 - 将线程调度设置为 FIFO,这样它就不会在完成处理之前进行上下文切换
3 - 在更高优先级的进程上运行该线程(这需要该进程的 root 权限)
干杯
关于c++ - 我如何才能知道是否在最大水平上使用我的所有核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007950/