处理器和内存系统中最昂贵的操作之一是随机内存访问。如果您尝试读取内存中的值,则平均可能需要数十纳秒或更长时间。如果您正在等待内存内容以进行进一步操作,则您的处理器实际上已停止。虽然我们的处理器通常更快,但内存延迟并没有迅速改善,在一些最昂贵的处理器上延迟甚至可能更高。因此,现代处理器内核可以在给定时间发出多个内存请求。也就是说,处理器尝试加载一个内存元素,继续运行,并可以发出另一个加载(即使之前的加载没有完成),等等。不久前,英特尔处理器内核一次可以支持大约 10 个独立的内存请求。我对一些几乎不能发出 4 个内存请求的小型 ARM 内核进行了基准测试。
今天,这个故事好多了。强大的处理器内核都可以支持许多内存请求。它们支持更好的内存级并行性。
为了测量处理器的性能,我们使用指针追踪方案,您要求 C 程序加载包含下一个内存地址的内存地址,依此类推。如果处理器只能支持单个内存请求,则此类测试将使用所有可用资源。然后我们修改这个测试,使我们有两个交错的指针跟踪方案,然后是三个,然后是四个,依此类推。我们将每个新的交错指针追踪组件称为“通道”。
随着您添加更多通道,您应该会看到更好的性能,最高可达最大值。添加通道时性能提升得越快,处理器内核的内存级别并行度就越高。最好的亚马逊 (AWS) 服务器配备英特尔 Ice Lake 或亚马逊自己的 Graviton 3。我对它们进行了基准测试,使用每种类型的核心。英特尔处理器绝对占据上风。我们实现了 12 GB/s 的最大带宽,而 Graviton 3 为 9 GB/s。Graviton 3 服务器的单通道延迟为 120 ns,而英特尔处理器为 90 ns。 Graviton 3 似乎每个核心支持大约 19 个同时负载,而英特尔处理器则为大约 25 个。
因此英特尔赢了,但 Graviton 3 具有良好的内存级并行性……比旧的英特尔芯片(例如 Skylake)好得多,也比早期基于 ARM 的服务器尝试好得多。
源代码可用。我使用的是 Ubuntu 22.04 和 GCC 11。所有机器的页面尺寸都很小(4kB)。我选择不为这些实验调整页面大小。
Graviton 3 的价格为 2.32 美元/小时(64 个 vCPU),而 Ice Lake 的价格为 2.448 美元/小时。所以 Graviton 3 似乎比英特尔芯片便宜一些。
当我写这些帖子时,将一种产品与另一种产品进行比较,之后总会有仇恨邮件。所以让我直言不讳。我同样喜欢所有的筹码。
如果您想知道哪个系统最适合您的应用程序:运行基准测试。综合基准测试发现,亚马逊的 ARM 硬件可能有利于存储密集型任务。
进一步阅读:我喜欢Graviton 3:第一印象。
原文: https://lemire.me/blog/2022/06/07/memory-level-parallelism-intel-ice-lake-versus-amazon-graviton-3/