gpt4 book ai didi

c++ - C++ 代码的探查器,非常困

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:17 24 4
gpt4 key购买 nike

我是分析方面的新手。我想优化我的代码以满足时间限制。我使用 Visual C++ 08 Express,因此不得不下载一个分析器,对我来说它非常困。我做了一些搜索,但没有找到关于 Sleepy 的体面教程,这里是我的问题:如何正确使用?我掌握了profiling的大概思路,所以我按照%exclusive排序,找出我的瓶颈。首先,在这个列表的顶部,我有 ZwWaitForSingleObjectRtlEnterCriticalSectionoperator newRtlLeaveCriticalSection printf,一些迭代器……在它们占用大约 60% 之后出现了我的第一个函数,子调用的第一个位置。有人可以解释为什么上面提到的出来,它们是什么意思,如果我无法访问这个关键的 60%,我该如何优化我的代码? (对于“源文件”:未知...)。另外,对于我的功能,我认为我为每一行都有时间,但事实并非如此,例如算术或某些函数没有时间(不嵌套在未使用的“if”子句中)。最后一件事:如何找出某行可以超快执行,但被调用数千次,成为真正的瓶颈?

最后,Sleepy 好不好?或者我的平台有一些免费的替代品?

帮助非常感谢!干杯!

        • 更新 - - - - -

我找到了另一个版本的分析器,称为 plain Sleepy。它显示了某个片段被调用的次数加上行数(我猜它指向关键的那一行)。所以在我的例子中.. KiFastSystemCallRet 占用 50%!这意味着它等待一些数据对吗?如何改进这个问题,是否有一种合适的方法来追踪导致这些多次调用的原因并最终删除/更改它?

最佳答案

I'd like to optimize my code to satisfy timing constraints

您遇到了这项业务中的一个长期存在的问题。您想要找到使代码花费更少时间的方法,并且您(和许多人)认为(并且已被教导)做到这一点的唯一方法是进行各种测量。

有小众观点,唯一值得推荐的是actual significant results (plus an ironclad theory behind it)。

如果您有一个“瓶颈”(您有,可能有几个),它会花费一些时间,例如 30%。
就把它当作一个待发现的 bug

使用暂停按钮随机停止程序,仔细查看程序正在做什么以及为什么这样做。询问它是否可以摆脱。这样做 10 次。平均而言,您会在 3 次暂停时看到问题。任何你不止一次看到的事件,如果不是真正必要的话,都是速度错误。这不会准确地告诉您问题的成本是多少,但它确实会准确地告诉您问题是什么,以及它是否值得修复。你会以这种方式看到任何分析器都无法找到的东西,因为分析器只是程序而已,不能宽泛的看待什么是机会。

有些人规避风险,认为它可能无法提供足够的加速,不值得。诚然,获得低返回的可能性很小,但这就像投资一样。该理论表明,平均来说这是值得的,而且获得高返回的可能性也很小。无论如何,如果您担心风险,多一些样本将消除您的恐惧。

解决问题后,其余瓶颈各占较大百分比,因为它们并没有变小,但整个程序变小了。因此,当您重复整个过程时,它们会更容易找到。

有很多关于性能分析的文献,但很少有人真正说明它在实践中实现了多少加速。 Here's a concrete example几乎有 3 个数量级的加速。

关于c++ - C++ 代码的探查器,非常困,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com