CPU操作windows探查器工具

CPU操作windows探查器工具,c,optimization,profiler,C,Optimization,Profiler,你知道有哪种分析器工具可以告诉你一个C/C++程序的CPU操作总数吗?我需要linux上的valgrind callgrind之类的东西…例如。它们还提供了一个工具,您可以使用该工具通过读取代码前后的硬件性能计数器寄存器来手动插入代码 但我不知道这是否涉及到“失效说明”的详细程度 你应该问问自己,你真正想要的是什么信息:你是想计算一个功能上花费的周期数,还是想知道你的应用程序在每个功能上通常花费了多少挂钟时间?后者在大多数情况下更有用,而且您可以更轻松地使用它。(另请参见适用于大热点的选项。)

你知道有哪种分析器工具可以告诉你一个C/C++程序的CPU操作总数吗?我需要linux上的valgrind callgrind之类的东西…

例如。它们还提供了一个工具,您可以使用该工具通过读取代码前后的硬件性能计数器寄存器来手动插入代码

但我不知道这是否涉及到“失效说明”的详细程度

你应该问问自己,你真正想要的是什么信息:你是想计算一个功能上花费的周期数,还是想知道你的应用程序在每个功能上通常花费了多少挂钟时间?后者在大多数情况下更有用,而且您可以更轻松地使用它。(另请参见适用于大热点的选项。)


只有真正了解CPU管道的细节以及如何围绕它进行优化,计算失效的实际指令和分支预测失误等才有用。每个函数的微秒数通常是您真正想要优化的。

您可以查看编译器生成的程序集(例如,GCC中的
-S
);不过,从汇编指令推断CPU指令的数量是一件棘手的事情。@KerrekSB是的,很多人似乎认为一条指令等于一个周期,这一点都不正确。@Crashworks:确实如此-但通过阅读CPU手册,我不知道任何可靠的周期计数方法…@KerrekSB现代CPU内置硬件寄存器,用于分析周期、失效指令、缓存未命中等。所以你可以在体内测量它们。但这与提前查看和计算其性能不同。对于无序处理器,几乎不可能通过读取指令流来确定某些代码将占用多少周期。这就是为什么我更喜欢在有序芯片上工作的一个原因——在数据危害上可能存在管道气泡,但至少我知道确切的位置和确切的时间!