当我曾经对嵌入式系统和早期的 8/16 位 PC(6502、68K、8086)进行编程时,我对每条指令执行所需的时间(以纳秒或微秒为单位)有很好的把握。根据系列,一个(或四个)周期相当于一个“内存获取”,并且无需担心缓存,您可以根据所涉及的内存访问次数猜测时间。
但是对于现代CPU,我很困惑。我知道它们要快得多,但我也知道如果不知道每条指令需要多少个时钟周期,标题千兆赫的速度是没有帮助的。
因此,任何人都可以为(假设)2GHz Core 2 Duo 上的两个示例指令提供一些时间。最好和最坏的情况(假设缓存中没有任何内容/缓存中的所有内容)将很有用。
指令#1:将一个 32 位寄存器加到一秒。
指令 #2:将 32 位值从寄存器移动到内存。
编辑:我问这个的原因是尝试开发一个“经验法则”,它可以让我查看简单的代码并粗略地衡量最接近的数量级所花费的时间。
编辑#2:有很多有趣的答案,但没有人(还)写下一个及时测量的数字。我很欣赏这个问题有“复杂性”,但是来吧:如果我们可以估计NYC 的钢琴调音师的数量,我们应该能够估计代码运行时间......
采取以下(愚蠢的)代码:
int32 sum = frigged_value();
// start timing
for (int i = 0 ; i < 10000; i++)
{
for (int j = 0 ; j < 10000; j++)
{
sum += (i * j)
}
sum = sum / 1000;
}
// end timing
我们如何估算运行... 1 飞秒需要多长时间?1 千兆年?