1
我試圖找到一個分支最常被誤預測的函數中的位置。我給PERF一試,如下所示:找到一個分支被錯誤預測的來源位置
perf record ./a.out
a.out
與選項-ggdb -fno-omit-frame-pointer
編制,所推薦的手冊。
我怎樣才能找到這些景點?
我試圖找到一個分支最常被誤預測的函數中的位置。我給PERF一試,如下所示:找到一個分支被錯誤預測的來源位置
perf record ./a.out
a.out
與選項-ggdb -fno-omit-frame-pointer
編制,所推薦的手冊。
我怎樣才能找到這些景點?
默認perf record
對cycles事件執行採樣。每次發生給定數量的週期事件時,都會記錄其內部具有不同事物(例如指令指針)的樣本。有了這個,你可以主要觀察你花在你的代碼中的哪一部分代碼。
要執行採樣的事件是使用-e選項指定的。也許你可以嘗試指定分支預測錯誤事件(根據你的硬件),並且樣本只會在此事件的每次X事件中生成。但我不確定所有事件都有可能進行抽樣。
我不知道它真正的意思,但我PERF版本3.11,以下選項存在:
-j,--branch過濾 啓用的分支堆棧採樣。每個樣本都捕獲一系列連續的分支。每個樣本捕獲的分支數量取決於底層的硬件,感興趣的分支類型以及執行的代碼。可以選擇啓用過濾器捕獲的分支類型。
「-j」是LBR - Intel最後一個分支記錄(由CPU執行的前N個分支的列表)。 @ user46317需要'perf record -e branch-misses',並且大多數CPU事件支持定期採樣(每個X事件都會產生一個硬件中斷中斷)。我認爲,只有uncore事件不能產生perf中斷,並且可能只針對當前值或總值進行輪詢。 – osgx