我目前正在使用Ubuntu上的SDL在C++中編寫遊戲。我最近多線程化了我的引擎,所以我從用valgrind/callgrind進行分析轉換爲gperftools。我已經得到它的工作,但它不會打印我自己的函數名稱。奇怪的是,它識別SDL函數名稱(我在一些線程上看到了相反的情況;共享庫函數沒有找到它們的名字)。 kcachegrind Output 我跑我的程序,而且爲了得到執行以下兩條命令是: p
當我衡量我的圍棋程序中使用Linux的time實用程序運行時,我得到下面的輸出: real 1m9.177s
user 7m1.788s
sys 0m39.016s
當我看到完全相同的程序執行的輸出在圍棋的pprof CPU分析器,我得到下面的輸出: Entering interactive mode (type "help" for commands)
(pprof) top
14
我試圖用gperftools分析多線程工作負載,但是難以解釋產生的輸出。我寫了一個簡單的程序,啓動兩個工作負載相同的線程,並使用gperftools cpu profiler進行配置。在輸出中,我可以看到每個線程的兩個函數,但是每個線程的開銷在一次運行和下一次運行之間會有很大的不同。我希望這兩個函數都顯示相同的結果,因爲它們是相同的工作負載,但實際上,其中一個可能是90%,另一個是10%,有時是8