解读至强的小秘密之
AVX-512,加速密集型计算任务的 “专用车道”

计算需求的增速,正快的让人有些出乎意料。毕竟,年增长率高达 50% 的数据总量,渴求有更强的数据处理能力与之相匹配;不断发展和演变的应用场景,如科学模拟、金融分析、深度学习等,也形成了更多、更大的密集型计算负载,这些,都对处理器的算力提出了严峻的挑战。

要应对这种挑战,就需要在处理器内部,在硬件层面上做出特定的优化或革新,而其中最为关键的,就是特定加速指令集或运算单元的持续引入及改进。

早期通用处理器的工作模式,一般都是基于 SISD(单指令单数据流)指令,即每个核心中,一个指令单次操作一条数据。如图一所示,这就如同一条繁忙的道路上,每辆车(指令)都只装载一件货物(数据),并按照时钟周期前进。处理器主频越高,时钟周期越短,单个核心(道路)的工作效率(车速)就越快。

图一 SISD 指令工作模式

随着计算需求的不断提升,人们发现上述方式在某些场景中效率很低。例如图二所展示的,在图像处理、游戏、AI 计算中常见的数组运算,其数组乘操作在 SISD 指令下,需要分解为 3 个运算指令,但这些乘法操作实际都是相同的。

图二 数组运算分解

为此,处理器开始引入新的 SIMD(单指令多数据流)指令来提升效率,这种指令能让一个指令可以单次操作多条数据(如图二中,数组乘可通过一条指令完成),这就仿佛道路上的车(指令)可以同时装载多份相同的货物(数据)。

英特尔在 1996 年推出了 MMX 指令集,率先加入了对 SIMD 指令的支持,同时英特尔还为其配备了专门的 64 位寄存器。如图三所示,这意味着在主道路之外,还为繁忙的交通(计算需求)开辟了更宽畅的专用通道(寄存器)。不仅如此,英特尔还加入了 FMA (融合乘加)指令集,让处理器一次能同时完成加法和乘法两种基本操作,效率再次翻番。

图三 英特尔® 架构处理器中集成的 SIMD 指令工作模式

在之后,如图四所示,英特尔对 SIMD 指令集不断升级优化,从 MMX 到 SSE,再到 SSE2/3/4,到 2008 年,英特尔在其 Sandy Bridge 微架构中引入了新的高级矢量扩展(Advanced Vector Extensions,AVX)指令集,不仅使矢量计算能力扩展到 256 位,也加入了数据重排等新的数据处理加强功能。

今天,在英特尔® 至强® 可扩展处理器家族中集成的 AVX-512 指令集,寄存器已由最初的 64 位升级到了 512 位,且具备两个 512 位的 FMA 单元,这意味着应用程序可同时执行 32 次双精度、64 次单精度浮点运算,或操作八个 64 位和十六个 32 位整数。

图四 英特尔 SIMD 指令集发展历程

正是由于 AVX-512 指令集的加入,让英特尔® 至强® 可扩展处理器家族在音视频处理、游戏、科学计算、数据加密压缩以及深度学习等场景中拥有了出色的表现。

例如在视频编解码、转码等处理流程中,应用程序需要执行大规模的重复性浮点计算,而 AVX-512 指令集正可在其中发挥所长。在腾讯视频云服务场景中,集成 AVX-512 指令集的新一代英特尔® 至强® 铂金 8180 处理器无论是在单任务延迟、还是在全吞吐量指标上,都比旧有英特尔® 至强® E5-2699 v4 处理器有了巨大的提升。如图五所示,在单任务延迟上,新处理器带来了最大 2 倍的性能提升;而在全吞吐量上,转码性能最大可得到 1.4-1.5 倍的提升。

图五 腾讯视频云系统中的性能提升

而在云服务场景中,著名的云服务提供商 Synesis 正选择英特尔 AVX-512 指令集与 Aleph 压缩算法相结合,提升云平台中处理器、内存和存储资源的利用效率,从而以更低的 TCO 帮助客户在智慧城市、公共安全等领域更有效地部署其服务。据 Synesis 预测,在相同需求下,英特尔 AVX-512 指令集的引入可帮助他们将平台的处理器节点数在上一代 AVX2 指令集的基础上再减少 50% 。