相关疑难解决方法(0)

现代CPU到底有多"快"?

当我以前编写嵌入式系统和早期的8/16位PC(6502,68K,8086)时,我非常好地处理了每条指令执行的时间(以纳秒或微秒为单位).根据系列,一个(或四个)周期等同于一个"内存提取",并且无需担心缓存,您可以根据所涉及的内存访问次数猜测时序.

但是对于现代CPU,我很困惑.我知道它们的速度要快得多,但我也知道,如果不知道每条指令需要多少个时钟周期,标题千兆赫速度就无济于事.

那么,任何人都可以为两个示例指令提供一些时序,比如说(2)Core 2 Duo.最好和最坏的情况(假设缓存中没有任何内容/缓存中的所有内容)将是有用的.

指令#1:将一个32位寄存器添加到第二个.

指令#2:将32位值从寄存器移到存储器.

编辑:我之所以要这样做是为了尝试开发一个"经验法则",这样我就可以查看简单的代码并粗略估计所需的时间到最接近的数量级.

编辑#2:有趣点的答案很多,但没有人(还)已经记下了及时测量的数字.我很欣赏这个问题有"复杂性",但是来吧:如果我们可以估算出纽约市钢琴调音师数量,我们应该能够估计代码运行时间......

采取以下(哑)代码:

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
Run Code Online (Sandbox Code Playgroud)

我们如何估计运行多长时间... 1飞秒?1千兆?

performance x86 assembly cpu-architecture cpu-speed

18
推荐指数
8
解决办法
4694
查看次数

标签 统计

assembly ×1

cpu-architecture ×1

cpu-speed ×1

performance ×1

x86 ×1