2014-01-08 47 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權限)

乾杯

相關問題