前阵子在测试Strix Point与Lunar Lake等平台的CPU时,我偶然发现本代处理器在核间延迟这一指标上的一些变化。众所周知同步与互斥是现代复杂多线程软件高度依赖的原语之一,对其进行性能优化也是多线程编程的一大难点。多核处理器在硬件层面高效率地设计并实现同步,在工程上也是一个不小的挑战。
事实上,同步延迟这一概念不仅是对于CPU,其对于GPU也是一个重要的指标。在理想世界里,GPU可以以极高的吞吐并行处理大量毫不相关的数据。但现实是随着GPU规模的不断扩大,在一部分例如Gaming的领域的GPU应用已经出现了非常严重的并行度瓶颈,小规模数据的计算之间互相依赖导致不同层级的交互延迟成为瓶颈。
与CPU核心相对应,在GPU上处于类似层级的结构是SM (NVIDIA) / CU (OpenCL | AMD GCN)等等,一些厂商如Intel和Apple也将其直接称为GPU核心。而家用GPU的SM/CU核心数量远远超过普通家用CPU (144/96 vs 24),数据中心GPU更是如此(160/304 vs 32-128),这意味着为这些处理器核心的缓存一致性互联设计也会更加具有挑战性。
本文以我手边可用的一些硬件,搭配ROCm/HIP编程环境讲解如何使用类似测试CPU的手段来测量GPU的跨核心同步延迟,并提供一些大致的数据参考。
继续阅读