我目前正在分析 C++ 可执行文件,以确定代码更改是否会影响性能。对于分析,我使用“valgrind/callgrind”。
我找不到任何文档,为什么测试下的相同的可执行文件运行之间的“Ir”(读取指令)会产生不同的结果数字:
第一次运行:
==2800==
==2800== Events : Ir
==2800== Collected : 68723519295
==2800==
==2800== I refs: 68,723,519,295
第二次运行:
==2821==
==2821== Events : Ir
==2821== Collected : 68723289248
==2821==
==2821== I refs: 68,723,289,248
我认为这是由于 CPU 优化造成的,并且是预期的,但我想参考并确认这一点。如果有人知道以下问题的答案并提供参考详细信息,我将不胜感激:
谢谢,
花了一些时间进行更深入的调查后,我意识到该进程是多线程的!多线程执行在“Ir”执行中不是确定性的,这是有道理的。 修改可执行文件后,作为单线程进程运行,我看到了预期的周期匹配:
第一次运行:
==3098==我参考:68,659,014,339
第二次运行:
==3136==我参考:68,659,014,339
只是发布这个答案,以防其他人将来可能遇到类似的问题。