【发布时间】:2010-04-17 14:37:03
【问题描述】:
有没有办法使用 C 或汇编程序甚至 C# 来准确测量执行 ADD 指令所需的时间?
【问题讨论】:
-
我相信有一篇关于这个漂浮在ACM土地上的文章,我会检查一下
-
您的 CPU 的编程手册将指定执行特定指令所需的周期数。
-
这是一个高度误导的指标,尼尔。现代 CPU 比单纯的循环计数要复杂得多。考虑
ADD r32, r/m32- 例如,如果您遇到内存(m32),则需要考虑缓存问题。 L1 与 L2 与实际主内存相比,执行速度存在巨大差异(更不用说虚拟内存!)。这甚至没有引入超标量架构或流水线或大量其他深入 CPU 深处的问题。 -
@Neil:对于大多数高性能 CPU 而言,它不会...
-
现代 CPU 性能手册(如英特尔的优化手册)将分别列出吞吐量和延迟,所以是的,他们确实考虑了乱序执行,因为是的,没有“周期”数可以加起来(What considerations go into predicting latency for operations on modern superscalar processors and how can I calculate them by hand?)。 uops.info 每条指令的 reg,reg 与 memory-source 与 memory-destination 形式的偶数倍,带有 perf 计数器来测量 uop 计数以及它们可以在哪些执行端口上运行。 (假设 L1d 命中
标签: c assembly time instructions