簡體   English   中英

Callgrind內聯函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM