0

我有一个时间紧迫的应用程序,它处理来自相机的一系列图像。它是用 C++ 编写的,它使用 Qt、OpenCV 和 boost 库。它将在专用 PC 上运行。

目前,gui函数在主线程中,我打开一个新线程进行图像处理。我没有费心将进程部分划分为线程,因为我认为 OpenCV 已经在这样做了。但是,我无法维持最大可容忍延迟。

我的问题是,我如何才能知道我的应用程序是否使用了最高级别的所有内核?当我查看性能监视器时,我看到的模式真的很奇怪。CPU 使用率可能是 %35-40,所有内核都在工作,但不是全速运转。

难道我做错了什么 ?

4

1 回答 1

1

您没有做错任何事情,但是您可以通过以下方式更改代码以充分利用 cpu 内核:

1 - 设置核心亲和性以便线程不会从一个核心更改为另一个核心,这可以提高缓存使用率(L1 可能还有 L2)

2 - 将线程调度设置为 FIFO,以便在完成处理之前不会进行上下文切换

3 - 在更高优先级的进程上运行该线程(这将需要该进程的 root 权限)

干杯

于 2014-01-08T22:47:59.820 回答