![如何计算多核处理器的时钟速度?](https://linux22.com/image/1245174/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E5%A4%9A%E6%A0%B8%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E6%97%B6%E9%92%9F%E9%80%9F%E5%BA%A6%EF%BC%9F.png)
例如,如果说一个具有四个核心、每个核心运行速度为 3GHz 的处理器实际上是一个运行速度为 12GHz 的处理器,这种说法对吗?
我曾经与一位熟人发生过“Mac 与 PC”的争论(顺便说一句,这不是本主题的重点......那是在中学时期),他坚持认为 Mac 之所以被宣传为 1Ghz 机器,只是因为它们是双处理器 G4,每个处理器的运行速度为 500MHz。
当时我知道这是胡说八道,原因我想大多数人都清楚,但我刚刚在这个网站上看到一条评论“6 核 x 0.2GHz = 1.2Ghz”,这让我再次思考这个问题是否有真正的答案。
因此,这是一个关于时钟速度计算语义的或多或少哲学/深奥的技术问题。我看到两种可能性:
- 每个核心实际上每秒进行 x 次计算,因此总计算次数为 x(cores)。
- 时钟速度实际上是处理器在一秒钟内运行的周期数,因此只要所有核心都以相同的速度运行,无论有多少个核心,每个时钟周期的速度都保持不变。换句话说,Hz = (核心 1Hz+核心 2Hz+...)/核心。
答案1
四核 3GHz 处理器永远不如 12GHz 单核处理器快的主要原因在于该处理器上运行的任务的工作方式,即单线程还是多线程。 阿姆达尔定律在考虑您正在运行的任务类型时很重要。
如果你有一个本质上是线性的任务,并且必须一步一步地精确完成,比如(一个非常简单的程序)
10: a = a + 1
20: goto 10
然后,任务高度依赖于上一次传递的结果,并且无法运行自身的多个副本,否则会破坏 的值,'a'
因为每个副本将'a'
在不同时间获取 的值并以不同的方式将其写回。这将任务限制为单个线程,因此任务在任何给定时间只能在单个核心上运行,如果它要在多个核心上运行,那么就会发生同步损坏。这将其限制为双核系统的 CPU 功率的 1/2,或四核系统的 1/4。
现在执行如下任务:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
所有这些线路都是独立的,可以像第一个一样分成 4 个独立的程序,同时运行,每个程序都可以有效地利用其中一个核心的全部功率,而不会出现任何同步问题,这就是阿姆达尔定律进入它。
因此,如果您有一个单线程应用程序执行强力计算,那么单个 12GHz 处理器将轻松获胜,如果您可以以某种方式将任务分成单独的部分并进行多线程处理,那么根据阿姆达尔定律,4 个内核可以接近(但无法完全达到)相同的性能。
多 CPU 系统的主要优点是响应能力。在单核机器上,如果工作繁忙,系统可能会显得迟缓,因为大部分时间可能被一项任务占用,而其他任务仅在较大任务之间短暂运行,导致系统显得迟缓或不稳定。在多核系统中,繁重的任务占用一个核心,而所有其他任务则在其他核心上运行,快速高效地完成工作。
“6 核 x 0.2GHz = 1.2Ghz”的说法在任何情况下都是无稽之谈,除非任务完全并行且独立。有很多任务是高度并行的,但它们仍然需要某种形式的同步。 手刹是一种非常擅长使用所有可用 CPU 的视频转码器,但它确实需要一个核心进程来让其他线程填充数据并收集它们处理完的数据。
- 每个核心实际上每秒进行 x 次计算,因此总计算次数为 x(cores)。
每个核心每秒能够进行 x 次计算,假设工作负载适合并行,在线性程序中您只有 1 个核心。
- 时钟速度实际上是处理器在一秒钟内运行的周期数,因此只要所有核心都以相同的速度运行,无论有多少个核心,每个时钟周期的速度都保持不变。换句话说,Hz = (核心 1Hz+核心 2Hz+...)/核心。
我认为认为 4 x 3GHz = 12GHz 是错误的,虽然数学上是可行的,但您是在比较苹果和橘子,而且总和不对,GHz 不能简单地在每种情况下都加在一起。我会将其改为 4 x 3GHz = 4 x 3GHz。
答案2
其他人从技术角度提出了很好的论点。我只想做几个简单的类比,希望它们能解释为什么 4*3GHz 不等于 1*12GHz。
例如,一名妇女可以在九个月内生出一个婴儿。九名妇女能在一个月内生出一个婴儿吗?不能,因为妊娠不能并行化(至少在这个技术水平上不能)。
还有一个例子:我最近参观了一家水力发电站,其中一台发电机正在升级。他们必须用船运输发电机的定子。六分之一的定子可以用卡车运输,但他们需要运输整个定子;所以他们必须用一艘船,而不是六辆卡车。
另一种情况可能是事件的精确计时。有时计算机处理器被用作精确的计时器(尽管这种做法不再推荐,因为大多数处理器上的时钟都是可变的。应该改用高精度事件计时器)。如果我们假设我们有一个具有相对稳定的 12GHz 时钟的处理器,我们可以使用它来测量时间,其分辨率比 3GHz 时钟的处理器高得多。无论我们有多少个 3GHz 内核,我们都无法达到 12GHz 内核的分辨率。这就像有 4 个带有 7 段显示的时钟,每个时钟只显示以小时为单位的正确时间。无论它们显示小时数有多准确,您都无法使用它们来测量一秒范围内的时间间隔。
答案3
我不是这方面的专家,但我确实有计算机工程学位。理论(这是一个高度概念化的答案),四核 3GHz 处理器能例如,如果一个最终结果需要四组计算,则相当于一个 12GHz 处理器。这就是所谓的并行处理。
为了简化逻辑,我们假设我们讨论的是双核处理器。如果一组计算如下:
a=b+1;
c=d+1;
那么,这两个计算可以在不同的核心上执行,xGHz 处理器相当于单核 2*xGHz 处理器。这是因为这两个计算虽然以 x 速度完成,但会同时处理。而单核处理器可以以 2*x 速度执行它们,但一个接一个。如果两个 CPU 同时执行此代码,它们将同时完成。但是,如果代码是:
a=b+1;
c=a+1;
那么双核处理器所需的时间将是单核处理器的两倍,因为在第二条指令中,a 的值是受抚养人在第一条指令上,因此无法并行执行。这就是某些软件可以利用多线程处理器的方式。
因此,从理论上讲,12GHz 单核处理器的运行速度总是可以和 3GHz 四核处理器一样快(或更快),但反之则不然。
答案4
看来我们不能说 4 核 @ 3 GHz 可以说是 12 GHz。
各种约束(例如共享内存、缓存争用和其他资源)对于所有核心来说都是共同的,因此在这些核心上并行运行一段代码的效率不会像在 12 Ghz 处理器上运行它那么高(尽管构建这样的处理器很困难)。
另外,我在某处读到,如果我们将芯片上嵌入的晶体管数量增加一倍(CMP),我们得到的速度只能提高 40%。这也为这个话题提供了重要的提示。