如果我在最高级别使用所有核心,我该如何学习

时间:2014-01-08 22:29:15

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

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

目前,gui在主线程中起作用,我打开一个新的线程进行图像处理。我没有把过程部分划分为线程,因为我认为OpenCV已经在做了。但是,我无法保持最大容忍延迟。

我的问题是,如果我的应用程序使用最高级别的所有核心,我该如何学习? 当我看到性能监视器时,我看到的模式真的很奇怪。 CPU使用率很可能是%35-40,所有内核都在工作但没有全速运行。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

干杯