2011-11-28 82 views
0

我試圖剖析我的多線程應用程序的性能。添加grpof -pg選項使我的多線程應用程序非多線程

所以我編譯時加了「-pg」選項。

我在線程池中使用了固定數量的線程:如果有4個CPU內核,將會有12 + 1 = 13個線程在運行。

我感到非常意外的是,在添加「-pg」選項後,只有一個線程正在運行,其他線程根本沒有運行(狀態「S」在top命令中)。

top - 12:16:03 up 2 days, 21:46, 4 users, load average: 1.02, 1.07, 1.32 
Tasks: 13 total, 1 running, 12 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.6%us, 25.6%sy, 0.0%ni, 73.7%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st 
Mem: 9224140k total, 5070060k used, 4154080k free, 214480k buffers 
Swap: 9431164k total,  0k used, 9431164k free, 1722216k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
3252 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.32 MyMultithreaded 
3251 plee  20 0 3111m 2.3g 3292 R 99 26.0 12:02.83 MyMultithreaded 
3250 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.01 MyMultithreaded 
3249 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:02.88 MyMultithreaded 
3248 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.12 MyMultithreaded 
3247 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.14 MyMultithreaded 
3246 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.46 MyMultithreaded 
3245 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.32 MyMultithreaded 
3244 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.16 MyMultithreaded 
3243 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.27 MyMultithreaded 
3242 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.12 MyMultithreaded 
3241 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:02.87 MyMultithreaded 
3240 plee  20 0 3111m 2.3g 3292 S 0 26.0 0:03.23 MyMultithreaded 

那麼有沒有解決方案呢?

這是否有什麼關係: http://sam.zoy.org/writings/programming/gprof.html

感謝。

彼得

+0

順便說一句,我嘗試使用gprof-helper(http://sam.zoy.org/writings/programming/gprof.html),仍然同樣的行爲,沒有運氣。 –

+0

可能會嘗試oprofile – phs

回答

0

我安裝並試用了OProfile的,它的作品沒關係,它也可以給你gprof的風格效果。

opgprof ./bin/MyProgramBinary # Generate the gmon.out file 
gprof -p ./bin/MyProgramBinary > gmon.txt