c++ - 我如何才能知道是否在最大水平上使用我的所有核心

标签 c++ image-processing cpu-usage workload

我有一个时间关键型应用程序,它处理来自相机的一系列图像。它是用 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/

相关文章:

c++ - 要引用的默认值,c++

matlab - 使用 MATLAB 检测二值图像中的线间隙

python - 使用Python分离模糊图像

c - 网络传输对 cpu 的影响

c++ - 使用 mongodb 构建一个 c++ 项目

c++ - 整数<->指针转换何时真正正确?

cpu-usage - 如果非阻塞代码将 CPU 推到 100%

PHP getrusage() 返回不正确的信息?

c++ - 抑制警告 : possible loss of data - caused by truncation through casting 的单个实例

python - 任何人都可以逐行解释这个 python 代码是如何工作的吗?