在我之前的文章中,我描述了如何编写 C++ 程序来估计读取内存带宽。这并不是很困难:您分配一个大的内存区域并尽可能快地读取它。要查看使用多线程应用程序时可能有多少带宽,可以使用多个线程,其中每个线程读取大内存区域的一部分。
我在博客文章中使用的服务器是双 CPU Intel Ice Lake 服务器,最大带宽约为 130 GB/s。您可以使用NUMA感知代码将带宽量加倍,但这需要进一步的工程设计。
但您无权访问我的服务器。大型亚马逊服务器怎么样?所以我从 Amazon 分离出了一个r6i.metal实例。这些服务器可以支持 128 个物理线程,拥有 1 TB RAM (1024 GB) 和 6.25 GB/s 的网络带宽。
在这台 Amazon 服务器上运行我的基准测试程序显示,它们的读取内存带宽约为 115 GB/s。这还不包括 NUMA 和其他复杂的技巧。绘制带宽与所用线程数的关系图再次表明,您需要大约 20 个线程才能最大化内存带宽,尽管您只需 15 个线程即可获得大部分内存带宽。
原文: https://lemire.me/blog/2024/01/18/how-much-memory-bandwidth-do-large-amazon-instances-offer/