当我进行性能调优时,我将首先在高级别工作并尝试回答是这个cpu绑定还是IO绑定?
当我确定这是cpu-bound时,我会尝试通过添加一些定时器代码来找到热点。这很好,但我没有弄清楚这些问题:
有没有人知道如何测量这些物品?
答案 0 :(得分:2)
您是否愿意采用不同的方式来考虑性能调整? 它不会考虑I / O与CPU绑定,热点和计时器。
首先,考虑一个线程。线程的执行很像树。有一个主要功能(主干)。调用子程序(分支)时有一些点。有终端指令(叶子)和阻塞调用,如I / O(水果)。该计划所花费的总时间是所有叶子和所有果实的总和。
你想要做的是修剪树木,使其尽可能轻,而不会杀死它。
许多人做的是衡量(时间)整个事物,然后称重部分,等等,并希望找到可能修剪的热点(枝叶)。
另一种方法是1)随机选择一些叶子或果实。 2)从每片叶子或果实上,沿着它所在的树枝画一条线,一直回到树干。 3)记下在其上涂有> 1条线的树枝。 4)问“我需要这个分支吗?”。如果你可以修剪它,那么这样做。你将消除分支的整个重量,你没有称重它。然后重新开始。
这就是random-pausing背后的想法。 它找不到某些类型的问题,但很快就会找到它们,包括线程可以找到的任何时间。
答案 1 :(得分:0)
1)使用cachegrind / callgrind / kcachegrind http://valgrind.org/info/tools.html#cachegrind
在分析特定假设集下的内存局部性方面非常有用。
2)正确分析线程真的很痛苦。在现代NUMA系统上玩一些cpusets和处理亲和力,它很快变得至关重要。