2016-10-14 119 views
0

我有一個多線程程序。我們使用自己的線程池實現。首先,該項目的負載是足夠的。編譯成單線程,兩個線程的程序更快。多線程性能問題

當我們增加的線程數大於2時,性能開始糟糕。顯然,我們遇到了多線程性能問題。

然後,我們開始使用英特爾®VTune™Amplifier XE 2017性能分析,我們將此工具集成到VS2013中。然後,當我點擊英特爾®VTune™Amplifier XE的星形按鈕時,發生了一件令人驚訝的事情,該項目開始運行,插上收集數據。我們發現,當我們通過插件啓動這個項目時,隨着線程數量的增加,性能變高,運行時間縮短。我們可以打開多達20個線程。並且時間縮短了20倍

那麼,我們想知道,英特爾®VTune™Amplifier XE 2017可以改變多線程程序的運行模式嗎?爲什麼發生這種情況。 我一直很困擾這個問題。

+0

在哪種分析類型下,您會看到應用程序性能提升?要分析線程問題,請使用併發或鎖定和等待。 – Vital

+0

您是不是在移動平臺(例如筆記本電腦)上運行您的應用程序? – Vital

+0

我的項目只能在windows上運行,它是一個win控制檯應用程序。是的,所有分析類型都表明性能提高。幾乎都是完美的。無鎖和等待,上下文切換少,核心交叉點少,CPU充分利用。我們也使用微軟的併發可視化器。同樣的事情發生了。即使我使用clock()函數來記錄時間,時間也縮短了! – ballontt

回答

1

最後,我解決了這個問題。答案很簡單。問題的原因是我用調試程序運行。如果我重新運行* .exe,性能很好。與VTune沒有任何關係,只是因爲VTune直接調用* .exe開始。