jos*_*130 4 c++ profiling verysleepy
我是剖析新手.我想优化我的代码以满足时序约束.我使用Visual C++ 08 Express,因此必须下载一个分析器,对我来说它非常困.我做了一些搜索,但没有找到关于Sleepy的正确教程,我的问题是:如何正确使用它?我掌握了分析的一般概念,所以我按照%排序来排序以找到我的瓶颈.首先,在这个列表的顶部,我有ZwWaitForSingleObject,RtlEnterCriticalSection,operator new,RtlLeaveCriticalSection,printf,一些迭代器......并且在它们占用60%之后出现了我的第一个函数,第一个位置是Child Calls.有人可以解释一下为什么上面提到的,它们是什么意思,如果我无法访问这个关键的60%,我怎样才能优化我的代码?(对于"源文件":未知......).另外,对于我的函数,我认为每行都有时间,但事实并非如此,例如算术或某些函数没有时间(不嵌套在未使用的"if"子句中).最后一件事:如何发现某条线可以执行超高速,但被称为数千次,是实际的瓶颈?
最后,睡眠好吗?或者我平台的一些免费替代品?
非常感谢!干杯!
我找到了另一个版本的探测器,名为plain Sleepy.它显示了一些片段被调用的次数加上行的数量(我猜它指向关键的片段).所以在我的情况下.. KiFastSystemCallRet需要50%!这意味着它等待一些数据吗?如何改善这个问题,是否有一个可行的方法来跟踪导致这些多次调用的原因并最终删除/更改它?
我想优化我的代码以满足时序约束
你在这个行业中遇到了一个持久的问题.您希望找到使代码花费更少时间的方法,并且您(和许多人)假设(并且已经教过)唯一的方法是通过进行各种测量.
有一个少数人的观点,它唯一需要推荐的是实际的重要结果(加上背后的铁定理论).
如果你有一个"瓶颈"(你做了,可能是几个),它需要一些时间,比如30%.
只是将其视为一个可以找到的bug.
使用暂停按钮随机停止程序,仔细查看程序正在执行的操作以及执行操作的原因.询问是否可以摆脱它.这样做10次.平均而言,您会看到3个暂停的问题.如果不是真的有必要,你不止一次看到的任何活动都是速度错误.这并不能准确地告诉您问题的成本,但它确实能够准确地告诉您问题是什么,并且值得修复.你会看到没有探查者可以找到的东西,因为探查者只是程序,不能对构成机会的东西持宽容态度.
有些人厌恶风险,认为它可能无法提供足够的加速比值.当然,收益率很低的可能性很小,但这就像投资一样.该理论平均说它是值得的,并且也有很小的机会获得高回报.在任何情况下,如果您担心风险,更多的样本将解决您的恐惧.
解决问题之后,剩下的每个瓶颈都会占用更大的百分比,因为它们并没有变得更小,但总体程序确实如此.因此,当您重复整个过程时,它们将更容易找到.
有很多关于剖析的文献,但实际上说它在实践中实现了多少加速. 这是一个具有近3个数量级加速的具体示例.