为什么 Google Compute Engine 的计算优化 CPU 在 Python 中进行数字运算时比笔记本电脑慢

Alw*_*ing 2 python performance google-cloud-platform python-multiprocessing

我在 Precision 5520 笔记本电脑和 Google Compute Engine 的 c2-standard-4 上运行以下代码:

import multiprocessing as mp
import time

def foo():
    before = time.time()
    sum = 0
    for i in range(1, 100000000):
        sum += i
    print(time.time() - before, sum)

for i in range(mp.cpu_count()):
    mp.Process(target=foo).start()
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,mp.cpu_count()都是 4。然而,出乎我意料的是,笔记本电脑上的每次计算需要 5.2 秒,而 GCE 上则需要 8.6 秒。

该笔记本电脑运行 Xeon E3-1505M v6 @ 3GHz。它是一个强大的 CPU,但我认为笔记本电脑的 CPU 无法与 Google HPC 服务器上的 CPU 相比(例如,由于热量限制)。

笔记本电脑上的Python版本是3.8.5。GCE 的 Python 版本为 3.9.2。

为什么会这样呢?

更新根据 @John Hanley 的回复,我更改了 Google Cloud Platform 的配置,因此每个核心仅使用一个 vCPU,时间现在为 4 秒而不是 8.6 秒。这是令人惊讶的,因为它似乎破坏了使用超线程的整个想法......

Joh*_*ley 5

在笔记本电脑上,每个 CPU 核心都是两个超线程。

在云中,一个虚拟化 CPU (vCPU) 就是一个超线程。

在相同的主板、时钟速度、内存等条件下,您的笔记本电脑的每个 CPU 的等效 CPU 功率是其两倍。当您在云中配置 VCPU 时,您正在配置物理 CPU 核心的一半。

在 Compute Engine 上,每个虚拟 CPU (vCPU) 都在可用 CPU 处理器之一上实现为单个硬件多线程。在英特尔至强处理器上,英特尔超线程技术支持在每个物理处理器内核上运行多个应用程序线程。您可以使用一个或多个多线程作为 vCPU 配置您的 Compute Engine 虚拟机实例。VM 实例的具体大小和形状决定了其 vCPU 的数量。

谷歌云CPU平台

  • 我想知道为什么你认为这可以解释他的结果。拥有两个超线程并不会使给定 CPU 的速度加倍。它允许他运行更多进程,但不会以任何方式改变单个进程的速度。 (2认同)