2010-12-17 34 views
1

當我進行性能調優時,我將首先在高層工作,並試圖回答這是cpu-bound還是IO-bound?如何衡量?

當我要確保這是CPU綁定的,那麼我會嘗試加入一些計時代碼。此是好找熱點,但我沒能弄清楚這些問題:

  1. 緩存未命中
  2. 線程上下文效應。

有沒有人知道如何衡量這些項目?

+1

它因語言而異。許多語言都有性能分析工具 – 2010-12-17 05:45:00

回答

0

1)使用cachegrind/callgrind/kcachegrind http://valgrind.org/info/tools.html#cachegrind

下假設的特定集合分析內存位置方面非常有用。

2)線程是真正痛苦的正確配置文件。玩一些cpusets並處理親和力,在現代NUMA系統中,它變得非常關鍵。

+0

Howerver valgrind只能在nix平臺上工作 – Chang 2010-12-17 07:12:32

2

您是否打算以不同的方式考慮性能調整?
它沒有看I/O與CPU綁定,熱點和計時器。

首先,想想只有一個線程。線程的執行很像樹。有一個主要功能(幹線)。子程序被調用時(分支)有點。有終端指令(葉子)和阻止像I/O(水果)的調用。該計劃的總時間是所有葉子和所有水果的總和。

你想要做的是修剪樹,儘可能輕,而不殺死它。很多人做的事情是衡量整個事物的時間,然後稱量它的一部分等等,並希望找到可能可以修剪的熱點(枝葉繁茂的樹枝)。

另一種方法是1)隨機選擇一些葉子或水果。 2)從每片葉子或果實上,沿着它所在的分支畫一條線,一直回到樹幹。 3)記下其上塗有> 1條線的分支。 4)問「我需要這個分支嗎?」。如果你能修剪它,那就這樣做。你會消除分支的整個重量,而你沒有稱過它。然後重新開始。

這就是random-pausing背後的想法。 存在某些不會發現的問題,但其中大多數會很快找到,包括任何時機線程都可以找到的問題。

+0

這絕不是一種「關於性能調整的不同思維方式」 - 它與做基於樣本的性能分析有一點不同(可能更好)。 – 2010-12-28 14:49:58

+0

@邁克爾:只要完成了,我不介意它被詆譭。傾聽人們對調整的看法:他們想要衡量事情的持續時間,並且他們都精確地包裝起來。他們希望看到調用計數,函數計時,調用圖,[其中沒有一個可靠地發現問題](http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343)。這是[一個較短的承擔](http://stackoverflow.com/questions/4387895/if-profiler-is-not-the-answer-what-other-choices-do-we-have/4390868#4390868)。 – 2010-12-28 20:34:27