[英]Callgrind inlined functions
我正在分析我的代碼,我已經找到了最昂貴的部分。 但它發生在內聯函數中。 為了衡量影響,我強迫函數不被內聯。
現在我想報告准確的分析數據。 沒有內聯,我們有一個巨大的開銷(該函數基本上是一個單獨的循環,但它經常被調用)。
我想知道是否有可能指示valgrind處理代碼的特定部分,因為它本身就是一個函數(如makros CALLGRIND_START_INSTRUMENTATION,CALLGRIND_STOP_INSTRUMENTATION),而不強制函數不被內聯。
valgrind --tool=callgrind
能夠顯示有關cpu(以及其他成本,如緩存)花費的詳細信息。 kcachegrind(可視化工具)可以輕松顯示各種成本(包括內聯函數)。
嘗試運行例如:
valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes
注意:要在指令級別查看成本,必須使用kcachegrind
也許你可以在調用你的函數之前和函數的開頭調用CALLGRIND_TOGGLE_COLLECT宏,同樣在你的函數調用之后調用它。 例如
int main()
{
CALLGRIND_TOGGLE_COLLECT;
myFunction();
CALLGRIND_TOGGLE_COLLECT;
}
__attribute__((noinline))
void myFunction()
{
CALLGRIND_TOGGLE_COLLECT;
//Do stuff
CALLGRIND_TOGGLE_COLLECT;
}
應該做的伎倆。
我不確定這是不是你想要但我不確定它不是:):
http://valgrind.org/docs/manual/cg-manual.html#cg-manual.overview
此外,由於每個執行的指令執行一次指令高速緩存讀取,因此您可以找出每行執行的指令數,這對於傳統的分析非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.