身为电脑的基础语言,一套在市场活跃的指令集架构,也会随着应用需求而持续扩充,支配服务器和个人电脑的 80×86,其 SIMD(单一指令,多重资料)指令集延伸也从 MMX 一路叠床架屋到 AVX-512。
最近英特尔向 GNU 编译器套件 GCC 提交关于新一代 Xeon 处理器 Sapphire Rapids 和桌上型处理器 Alder Lake 的最佳化代码,其中由大核 Golden Cove 与小核 Gracemont 组成的 Alder Lake,取消支援 AVX-512 指令集。无独有偶,英特尔近期正式发表的 3D 封装混合架构处理器 Lakefield,Sunny Cove 大核也封印 AVX-512。原因也很简单,因为小核并未支援 AVX-512,为了避免应用程序执行错误,所以就“维持一致性”。
然后 Linux 之父 Linus Torvalds 开炮了:他希望 AVX-512 痛苦的死去(AVX-512 Dies A Painful Death),AVX2 已经够用,英特尔不该为了高效能运算(HPC)这种特殊的应用和让效能测试数据看起来更厉害“创造魔法指令集”而浪费大量晶体管,应更重视常规代码,像 AMD 这样给他更多核心与良好的单执行绪性能(程式使用 AVX-512 会激增耗电,强迫处理器降频)。就算追求更强的浮点运算,GPU 的理论运算效能,还是比拥有 AVX-512 的 x86 处理器强大。
▲ Linus Torvalds。(Source:Krd / CC BY-SA)
接着网络对此议论纷纷。有挺身支持,也有嗤之以鼻者,更多是路过看热闹的。在这之前,笔者必须先替各位复习一下 AVX-512 的现况,再瞧瞧 Linus 大神的情绪性批判是否公允。
AVX(Advanced Vector Extensions)是什么?
x86 指令集史上最重要的扩张,没有之一。除了定义 256 位元宽的 YMM 资料暂存器,更借由新增的 VEX(Vector Extension)指令编码字段,“集缩”所有可能影响指令编码长度的资讯,处理器不需读取大半个指令,就可知道“这个指令大概想干什么”,不仅可简化指令撷取单元和指令解码器的设计,并达成三算子指令与保留四算子的扩充弹性。
讲白话点,AVX 是“经由改良指令集架构,更好实做高效能处理器微架构”的案例,近年来另一个知名例子,则是迈向 64 位元的 ARMv8 取消引述执行(Predication)以便实做更强大的非循序指令预测执行。
也因此,英特尔也使用 VEX 编码“再创造”旧指令,包含用来取代老旧 SSE 的 AVX-128,也鼓励软件开发者尽快转移。如此一来,英特尔就更能放手一搏,研发处理器时专心对 AVX 最佳化,将晶体管预算集中在最常用指令的刀口上,旧指令跑得慢没关系,维持相容性即可。
AVX-512 是什么?
AVX-512 在 2013 年 7 月由英特尔发布,是继 2011 年 Sandy Bridge 的 AVX 与 2013 年 Haswell 的 AVX2 后的再延伸,首度出现在 2016 年 6 月上市的 Xeon Phi 7200 系列(代号 Knights Landing),在 2017 年才登陆“正常”的高阶 x86 处理器(Skylake-SP,Skylake-S)。
不难理解,AVX-512 打从一开始就不是给一般人使用的东西。
AVX-512 改善了什么?
- SIMD暂存器(ZMM)的长度和数量都倍增。
- 追加四算子指令(A=B×C+D)。
- 向量指令集必备的遮罩(Mask)暂存器。
- 向量指令集所需的算子聚集(Gather)与分散(Scatter)指令。
那 AMD 的处理器目前有支援 AVX-512 吗?
没有,等 Zen 3 再看看。有趣的是,VIA 的 Centaur CHA,抢先在 AMD 之前相容 AVX-512。
为何连英特尔自家 x86 处理器都没有全面性支援 AVX-512?
因为 AVX-512 的相关硬件很吃晶体管空间和耗电量,英特尔也是从 10 奈米制程的 Cannon Lake 开始,才逐渐“下放”AVX-512 到一般个人电脑产品线,在这之前也仅限于服务器(Xeon)与高效能运算(Xeon Phi)。
Linus Torvalds 说到“单执行绪”效能是怎么回事?
不必讲到 AVX-512,执行 AVX 指令会降低处理器时脉这件事,更早就发生了,这会让性能不升反降,像知名 CDN 业者 Cloudflare,维护人员早在两年前就做过详细分析。
那么“市场零碎化”?
即使“支援 AVX-512”,每个处理器系列对应的版本细节也不一样,原因跟英特尔几年来汲汲营营于“人工智能”息息相关,这让 x86 处理器的相容性更零碎化,也提高了程式最佳化的困难度。过去一讲到“x86 指令集缺乏业界标准”只会想到英特尔的竞争对手自行定义专用指令,如 Cyrix 的 EMMI / MMX-FP、AMD 的 3DNow! 和未成真的 SSE5,结果现在反而是英特尔自己家里先乱起来。
像英特尔在 Xeon Phi 7205 系列(代号 Knights Mill)为了强化深度学习的 QVNNI(QFMA+VNNI)、Cascade Lake 为了强化推论效能而增加的 VNNI(16 位元短整数)、Cooper Lake 因应 Facebook 等大客户的深度学习需求补上 BF16 浮点数格式,都让 AVX-512 版本混乱不堪,还发生新型处理器的支援度不见得比旧产品完整的糟糕状况。
Linus Torvalds 的情绪性批评公道吗?
笔者在此不下结论,但各位可想想几个问题:
- 假如英特尔制程技术维持领先地位,今天会有这样的“杂音”吗?
- 如果 AMD 日后也支援 AVX-512,也没碰到英特尔的降低时脉麻烦,Linus Torvalds 的反应会不会不一样?
- 英特尔在主流桌上型处理器开了取消 AVX-512 第一枪,是否意味 AVX-512 将淡出个人电脑舞台?
最后,唯一可以确定的是,人有才气,必有脾气,看来 Linus Torvalds 这个人的脾气真的很暴躁(Grumpy)。
延伸阅读:
- 一窝疯“人工智能芯片”前,你需要知道的几件关于 GPGPU 的事
- 在人工智能芯片战场追逐 GPU 背影的英特尔
- 英特尔调整新一代 Xeon 服务器平台到底是为了什么事?
- 台湾处理器拾遗》成为威盛电子 x86 处理器技术基础的 Centaur(下)