撰寫程式常常會用輔助工具進行除錯與效能分析,例如 VC 、 gdb 、 vtune 、 valgrind ...等。但開發圖形應用程式時要診斷程式中的錯誤與瓶頸,卻是一個十分令人頭痛的問題。一張影像是由成千上萬個像素與物件所構成,因此有時要發現其中的問題,真的有如大海撈針(這麼說是有點誇張,哈哈...)。而陪伴著我們度過每天都想要砸電腦的好朋友,其中最重要的非 PerfHUD 莫屬。 |
寄件者 Melbourne - 2010.07.17~2010.07.25 |
http://developer.nvidia.com/object/nvperfhud_home.html
若要讓程式可以經由 PerfHUD 分析, 我們只能選用 DirectX API ,接著在建立 Device 前加入如下的程式碼:
UINT AdapterToUse=D3DADAPTER_DEFAULT;
D3DDEVTYPE DeviceType=D3DDEVTYPE_HAL;
#if SHIPPING_VERSION
// When building a shipping version, disable PerfHUD (opt-out)
#else
// Look for 'NVIDIA PerfHUD' adapter
// If it is present, override default settings
for (UINT Adapter=0;Adapter<d3d->GetAdapterCount();Adapter )
{
D3DADAPTER_IDENTIFIER9 Identifier;
HRESULT Res;
Res = d3d->GetAdapterIdentifier(Adapter,0,&Identifier);
if (strstr(Identifier.Description,"PerfHUD") != 0)
{
AdapterToUse=Adapter;
DeviceType=D3DDEVTYPE_REF;
break;
}
}
#endif
if (FAILED(d3d->CreateDevice( AdapterToUse, DeviceType, hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp, &d3ddev) ) )
{
return false;
}
這段程式碼有幾個功能。首先會判定目前編譯版本是否為販售版本,若是則不讓程式使用 PerfHUD 分析,可保障應用程式的實作細節被解析或資源被擷取的可能性;另外,若是一般的開發版本,程式會先檢查所有驅動的 adapter ,確認是否真的有啟動 PerfHUD ,否則使用一般的方式建立 device。
啟動 PerfHUD
要讓程式要在 PerfHUD 的監控下執行有許多的方法。其中一個簡單的方法,當安裝完 PerfHUD 後,請直接在欲分析的程式執行檔案按右鍵,選擇「傳送到」->「NVIDIA PerfHUD」即可,很容易吧~。
啟動程式後,可看見程式上覆蓋了許多的圖表,如果沒問題,恭喜,這就表示你成功拉。
使用這些輔助工具之後,即便過往是如何的支持 OpenGL ,讚美它的開放與自由,在萬惡的 M$ 下是如何守護著高尚的情操。相信我,此刻起在你內心的深處絕對會開始動搖。即便產品最終將以 OpenGL 的版本販售,你仍會想盡辦法從 PerfHUD 上獲取任何可能的協助與希望。
我不想在這章節討論過多的效能調整方法,相信這些內容是需要許多章節篇幅才能說明詳細。而本文的重點只是想跟大家分享有這樣的一個好東西,若遇到類似困難時,起碼這是一個好的開始,安裝它吧!
PerfHud真的很棒,場景大到PerfHud load不進來的那天,人生真的會從彩色變黑白啊...。64 bit的PerfHud不知道會不會比較好一點,只是我們工作的地方作業系統都是32 bit也沒辦法測試...
回覆刪除資源使用吃緊時真的是一個大問題,但另一個可行的替代方案「PerfSDK」或許可看到一點光芒(大概是 Full HD 螢幕中一個亮點著麼大)。竟然聊到這,好吧,下一篇文章就來講講 PerfSDK 。
回覆刪除