我有一个时间要求严格的应用程序来处理来自相机的一系列图像。它是用C ++编写的,它使用Qt,OpenCV和boost库。它将在专用PC上运行。
目前,gui在主线程中起作用,我打开一个新的线程进行图像处理。我没有把过程部分划分为线程,因为我认为OpenCV已经在做了。但是,我无法保持最大容忍延迟。
我的问题是,如果我的应用程序使用最高级别的所有核心,我该如何学习? 当我看到性能监视器时,我看到的模式真的很奇怪。 CPU使用率很可能是%35-40,所有内核都在工作但没有全速运行。
我做错了吗?
答案 0 :(得分:1)
您没有做错任何事情,但是您可以通过以下方式更改代码以充分利用cpu内核:
1 - 设置核心亲和力,以便线程不会从一个核心更改为另一个核心,这可以提高缓存使用率(L1和L2)
2 - 将线程的调度设置为FIFO,以便在完成处理之前不进行上下文切换
3 - 在更高优先级的进程上运行该线程(这将需要进程的root权限)
干杯