繁体   English   中英

分析说明

[英]Profiling instructions

我想在我的代码中计算几个cpu指令。 例如,我想知道有多少次添加,多少次乘法,多少次浮点运算,我的代码执行了多少个分支。 我目前在Linux下使用gprof来分析我的c ++代码,但它只给出了对我的函数的调用次数,并且我手动估计了指令的数量。 是否有任何工具可以帮助我? 也许是一些虚拟机?

如果你真的需要计算指令,那么你可能最好生成汇编程序然后将输出传递给智能grep等价物。 对于gcc ,请尝试-S开关。

这是一般性建议,而非特定于Linux:您应该对CPU周期感兴趣。 忘记指令的数量作为衡量性能的指标。 一条指令可能与其他10条指令的成本相同,因此它不会告诉您任何信息。

在线程进入休眠状态(“切换/切换”)时,您应该关注CPU周期,以及多线程环境(大多数情况下,如今不是全部),这将让您了解等待I /的时间O,DB等完成并影响CPU特权时间。

您可以使用ValgrindCallgrind--dump-instr=yes标志来实现这一点

对于Linux用户来说,Intels vtune是免费的,AFAIK(假设我们正在讨论基于intel的x86 linux机器)。 它将为您提供所需的所有信息和SOOO。

出于好奇,指令计数是分析代码性能的有用方法吗?

我知道,在“简单”CPU设计的时代,你可以合理地假设每个操作码都需要花费那么多纳秒的CPU时间来执行,但是现在所有复杂的内存缓存方案都在fly操作码重新排序,流水线操作,超标量体系结构以及其他所有被抛入现代CPU的内容,操作码执行的简单计算是否仍能很好地指示代码运行需要多长时间? 或者执行时间是否会根据(例如)内存访问模式以及执行操作码的顺序和操作码执行的原始频率的变化而变化多少?

我怀疑现在可靠地预测代码性能的唯一方法是实际运行目标体系结构上的代码并对其进行计时....即,通常当编译器发现低效的代码时,它实际上做了一些聪明的事情。利用现代CPU架构的一个微妙特征。

您可以使用pin-instat作为PIN工具。 要使用它,您需要安装PIN。 但是,单独的指令数量并没有说明性能。 缓存未命中,分支预测也发挥了重要作用。

免责声明:我是pin-instat的作者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM