gpt4 book ai didi

performance - "fast"到底是怎样的现代CPU?

转载 作者:行者123 更新时间:2023-12-02 03:33:04 28 4
gpt4 key购买 nike

当我曾经对嵌入式系统和早期 8/16 位 PC(6502、68K、8086)进行编程时,我对每条指令执行所需的确切时间(以纳秒或微秒为单位)有很好的把握。根据系列的不同,一个(或四个)周期相当于一次“内存获取”,并且无需担心缓存,您可以根据所涉及的内存访问次数来猜测时序。

但是对于现代 CPU,我很困惑。我知道它们的速度要快得多,但我也知道,如果不知道每条指令需要多少个时钟周期,那么标题千兆赫的速度就没有任何帮助。

那么,任何人都可以提供在(比方说)2GHz Core 2 Duo 上两个示例指令的一些时序吗?最好和最坏的情况(假设缓存中没有任何内容/缓存中的所有内容)都会很有用。

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

指令#2:将 32 位值从寄存器移至内存。

编辑:我问这个问题的原因是尝试开发一个“经验法则”,它允许我查看简单的代码并粗略地估计最接近的顺序所花费的时间震级。

编辑#2:很多答案都有有趣的观点,但还没有人给出一个及时衡量的数字。我知道这个问题有“复杂性”,但是来吧:如果我们可以估计 number of piano-tuners in 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千兆年?

最佳答案

您提到的 Core 2 Duo 等现代处理器都是超标量流水线。它们的每个核心有多个执行单元,并且实际上每个核心一次处理多个指令;这是超标量部分。流水线部分意味着从读入并“发出”指令到完成执行之间存在延迟,并且该时间根据该指令与同时通过其他执行单元的其他指令之间的依赖关系而变化。因此,实际上,任何给定指令的时间都会根据其周围的事物以及它所依赖的事物而变化。这意味着给定指令具有基于多种因素的最佳情况和最坏情况执行时间。由于存在多个执行单元,实际上每个核心时钟可以有多个指令完成执行,但有时如果管道必须停止等待管道中的内存或依赖项,则完成之间会存在多个时钟。

以上只是从CPU核心本身的角度来看。然后,您与缓存进行交互,并与其他核心争夺带宽。 CPU 的总线接口(interface)单元负责将指令和数据输入内核,并通过缓存将结果从内核传回内存。

粗略的数量级经验规则需要持保留态度:

  • 寄存器到寄存器操作需要 1 个核心时钟来执行。这通常应该是保守的,尤其是当更多的这些按顺序出现时。
  • 与内存相关的加载和存储操作需要 1 个内存总线时钟来执行。这应该是非常保守的。如果缓存命中率较高,则更像是 2 个 CPU 总线 时钟,这是 CPU 内核和缓存之间总线的时钟速率,但不一定是内核的时钟。

关于performance - "fast"到底是怎样的现代CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com