2012-04-06 58 views
0

我們的前3個功能都顯示爲線程同步對象;主要是WaitForSingleObject()一些幫助解釋我遊戲的GlowCode配置文件

即使調用0來只檢查一個線程的狀態,這個函數是非常重要的嗎?非常關心這些函數的值,它們顯示的自我時間比其他任何值更高2個數量級。或者也許Glowcode只是在這個函數上感到震驚,因爲當它看起來很整齊時,代碼指針恰好在那裏。

回答

0

首先,Don't Look At Self-Time

它在那裏的唯一原因是有人可能編寫的代碼在自己的代碼中花費太多時間在緊密的CPU循環中。 您的程序是否花費時間翻轉矩陣或進行FFT?

的全部原因gprof的被髮明,並隨後剖析整個雪崩,是真正的軟件包含大量的相互調用在一個大老鼠窩子程序,是迄今爲止最簡單的方式,採取太多時間是做可以避免的子程序調用。 自我時間不公開這些。

接下來,無論您是在查看Wall時間還是CPU時間,如果WaitForSingleObject()處於活動狀態的很大一部分時間,這意味着您的線程主要是在等待某些內容。 你需要找出什麼

有一個非常簡單的方法來找出。只需點擊暫停,Ctrl-C,Esc鍵或其他任何鍵使其暫停,然後查看堆棧。 調用堆棧上的每一行代碼表示一個未完成的請求,如果該請求未完成,程序將不會等待。這就是你如何知道它在等待什麼。

如果碰巧在WaitForSingleObject()中沒有捕獲它,請重新執行一次,也許是幾次。 這似乎比分析更努力,但您可以選擇找到問題或做一些簡單的事情。

+0

感謝您的回覆和鏈接。我很想辯論窮人分析的有用性,但不是今天。在我的例子中發現,我將探查器設置爲一種模式,其中包括線程時間與其整體使用情況睡着,導致我們所有睡眠工作線程顯示爲應用程序使用的時間。切換這個選項讓我看到了我正在尋找的代碼。我會說,你鏈接的線程肯定會對整個分析器產生負面影響。我發現它們是我自己的驚人工具(當正確使用和設置時)。 – 2012-04-09 14:25:26

+0

而且,自我時間確實吸引了一些非常愚蠢的函數調用登陸我們的前10個總體使用列表。很好的時候,修復這些幾乎免費的性能提供了巨大的提升。 – 2012-04-09 14:26:48

+0

@Michael:我被稱爲「反分析傳道員」:)分析人員發現有問題。有些問題是他們找不到的。這意味着您可以通過配置文件人爲降低整體加速比。速度受限於沒有找到的問題。在* [這個鏈接](http://sourceforge.net/projects/randompausedemo/files/)*有一個730倍的加速。當然,可以對此持懷疑態度,但所有版本的C++代碼都在那裏,我想看看是否可以通過該代碼和某些分析器來實現。 – 2012-04-09 14:38:00