2010-12-17 70 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