c++ - 配置文件优化的 C++/C 代码

标签 c++ templates stl profiling native

我正在使用一些高度模板化的 C++ 代码。我可以使用 AMD 工具进行编译和分析,并在 Debug模式下昏昏欲睡。然而,在没有优化的情况下,大部分时间都集中在模板化代码和 STL 上。通过优化编译,我所知道的所有配置文件工具都会产生垃圾信息。有谁知道分析优化 native 代码的好方法

PS1: 我正在编写的代码也大量模板化。花费在未优化代码上的大部分时间将被优化掉。我说的是 96-97% 的运行时间都花在了没有优化的模板代码上。这将破坏分析的准确性。是的,我可以更改许多模板化代码,或者至少更改模板化代码中最麻烦的部分,我可以在这些地方做得更好。

最佳答案

您应该专注于您编写的代码,因为那是您可以更改的,花在 STL 上的时间无关紧要,只需忽略它并专注于该代码的调用者。如果在 STL 上花费了太多时间,您可能可以调用其他一些 STL 原语而不是当前的原语。

分析未优化的代码没那么有趣,但您仍然可以获得一些信息。如果代码某些部分使用的算法完全有缺陷,它甚至会在那里出现。但是您应该能够以优化的代码从任何好的分析工具中获得有用的信息。您具体使用什么工具,为什么称其输出为垃圾?

另外,手动检测您的代码并准确找出哪些部分有效,哪些部分无效通常也很容易。这只是在精心选择的点调用定时器函数(或者如果可能的话读取处理器的周期计数)的问题。我通常在单元测试中这样做以获得可重现的结果,但这一切都取决于您的程序的具体情况。

工具或检测代码是最简单的优化部分。困难的部分是找到在需要的地方获得更快代码的方法。

关于c++ - 配置文件优化的 C++/C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4160375/

相关文章:

C++ - QSettings 问题

c++ - 将 std::transform 与 std::normal_distribution 和 std::bind 结合使用

c++ - 控件到达非空函数警告 C++ 的末尾

c++ - Corba IDL : default value for struct members

c++ - 在 boost::mpl::for_each() 中调用通用 lambda

c++ - 抽象类和模板

c++ - 如何创建与给定函数具有相同类型的变量?

c++ - 标准 :map Destructor call Key Destructors as well as Value Destructors?

c++ - STL header 是完全手工编写的吗?

c++ - 为什么变量不是 C++ 中的左值?