2014-01-08 27 views
0

我有一个时间关键的应用程序,用于处理来自相机的一系列图像。它是用C++编写的,它使用Qt,OpenCV和boost库。它将在专用PC上运行。我如何才能知道我是否正在使用最高级别的所有内核

目前,主线程中的gui函数和我打开一个新的线程进行图像处理。因为我认为OpenCV已经在做这件事,所以我没有把进程部分分成线程。但是,我无法维持最大可忍受的延迟。

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

我做错了什么?

+1

要得到任何正确的答案,你将需要剖析你的代码。 – 111111

+1

你有没有考虑过他们不需要**全速运行的可能性?也许你的应用不像你想象的那样占用CPU资源? –

回答

1

你没有做错什么,但你可以改变你的代码,通过充分利用CPU内核:

1 - 设置核心相关性,使得线程不会从一个核心切换到另一个,这可以提高缓存的使用(L1,也许L2)

2 - 线程的调度设置为FIFO所以它不会结束其处理

3之前的上下文切换 - 在更高的优先级运行的线程进程(这将需要进程的root权限)

干杯

相关问题