Erik Engheim作者陈萍编辑

逆向工程发现苹果M1未公开的秘密:矩阵协处理器

国外开发者通过逆向工程,研究了苹果公司 M1 矩阵协处理器的运行机制。在 Arm 架构下,苹果已经引入了自定义指令集。

近期,国外开发者 Dougall Johnson 通过逆向工程,在苹果 M1 处理器内发现了一个被称为 AMX 的强大的未公开过的神秘协处理器:矩阵协处理器。

要弄清苹果矩阵协处理器具体是做什么的,我们需要了解什么是协处理器、什么是矩阵,以及为什么还要关心这些?

更重要的是,为什么苹果公司在发布新机的 keynote 里都没有提到这个协处理器?为什么它似乎是一个秘密?如果你已经了解了 M1 片上系统(SoC)中的神经网络处理引擎,可能会对苹果又设计一个矩阵协处理器(AMX)感到困惑。在这之前,我们先来了解一些基本概念。

首先,什么是矩阵?

矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵,是高等代数中常见的工具。如果你使用过 Microsoft Excel 等电子表格,则矩阵就是与电子表格非常相似的东西。

关键的区别在于,在数学中,这样的数字表有一个它们支持的操作列表和特定的行为。正如在下图中展示的,矩阵可以有不同的风格。有这样一行的矩阵,通常称为行向量。如果一个是列向量,我们称之为列向量。关于矩阵相关内容,相信每一个理工科专业的都应该非常了解,因此不做过多的赘述。

我们可以对矩阵进行加、减、缩放和乘积操作。加法很简单,只需分别添加每个元素,但乘法有点复杂。

这种形式在计算机任务处理中至关重要,矩阵的使用范围主要包括:

  • 图像处理

  • 机器学习

  • 语音和手写识别;

  • 人脸识别

  • 压缩;

  • 多媒体:音频和视频。


机器学习是这几年中最热门的方向。仅仅在 CPU 上增加更多的核心并不能让这个领域的任务速度足够快,因为它的要求很高,这需要专门的硬件。浏览互联网、写电子邮件、文字处理和电子表格等常规任务多年来一直运行得很快。而机器学习,这是我们真正需要提高处理能力的特殊任务。

由于用上了 5 纳米制程,在任何给定的芯片上,苹果公司都有最大数量的晶体管用于构建不同类型的硬件。他们可以增加更多的 CPU 内核,但这实际上只是加快了常规任务的速度,而这些任务已经运行得足够快了。因此,人们经常选择用部分晶体管制造专门的硬件来解决图像处理、视频解码和机器学习。这种专用硬件就是协处理器和加速器。

更多关于协处理器和加速器的讨论请参阅:https://erik-engheim.medium.com/apple-m1-foreshadows-risc-v-dd63a62b2562

苹果的矩阵协处理器和神经网络引擎有何不同?

如果你了解一些关于神经网络引擎的知识,你将会知道它会执行矩阵运算来帮助完成机器学习任务。那么我们为什么还需要矩阵协处理器呢?它们是同一种东西吗?下面我们来解释一下苹果的矩阵协处理器与神经引擎的区别,以及我们为什么需要两者。

CPU、协处理器和加速器通常可以在共享的数据总线上交换数据。CPU 通常控制内存访问,而专用加速器(例如 GPU)通常具有自己的专用内存(如显存)。

协处理器和加速器并不相同。英伟达显卡中的 GPU 和神经引擎都是加速器的一种。在这两种情况下,都有特殊的内存区域,在该区域 CPU 必须填充要处理的数据,而内存的另一部分则填充加速器应执行的指令列表。CPU 设置这种处理非常耗时。需要进行大量协调,填写数据,然后等待结果。

因此,这只会在更大的任务中得到回报。对于较小的任务,开销太高。

与加速器不同,协处理器监视从内存读取到主处理器的指令流。相比之下,加速器不会遵守 CPU 从内存中提取的指令。

这就是协处理器优于加速器的地方。协处理器会监视从内存 (更具体地说,是缓存) 输入 CPU 的机器代码指令流。协处理器是用来对特定指令作出反应的。与此同时,CPU 通常会忽略这些指令,或者帮助协处理器处理这些指令。

我们从中得到的思路是,协处理器执行的指令可以放在常规代码中。这与 GPU 不同。如果你做过 GPU 编程,则应该知道着色器程序被放置在单独的内存缓冲区中,并且你必须将这些着色器程序显式传输到 GPU。你不能在常规代码中放置特定于 GPU 的指令。因此,对于涉及矩阵处理的较小工作负载,AMX 将优于神经引擎。

这样你需要在微处理器的指令集架构(ISA)中实际定义新的特定的指令。因此,与使用加速器相比,使用协处理器时需要与 CPU 紧密集成。对 ARM 指令集体系架构(ISA)的创建者 ARM 公司来说,长期以来他们一直拒绝向 ISA 中添加自定义指令。

然而,由于客户的压力,ARM 公司放宽了要求,并在 2019 年 10 月做出了让步并宣布将允许扩展。参考:新指令与标准 Arm 指令交织在一起。为了避免软件碎片化并保持一致的软件开发环境,Arm 希望客户在调用的库函数中使用自定义指令。

这可能有助于解释为什么官方文档中没有描述 AMX 指令。ARM 期望苹果将此类指令保存在客户提供的库中。

矩阵协处理器与 SIMD 向量引擎有何不同?

很容易把矩阵协处理器和 SIMD 向量引擎混淆起来,目前大多数现代处理器(包括 ARM 处理器)内都有 SIMD 向量引擎。SIMD(Single Instruction, Multiple Data)即一条指令操作多个数据,是 CPU 基本指令集的扩展,主要用于小体量数据的并行化操作。

单指令单数据(SISD)VS 单指令多数据(SIMD)

当你需要对多个元素执行相同的操作时,SIMD 是一种获得更高性能的方法。这与矩阵运算密切相关。事实上,SIMD 指令,如 ARM 的 Neon 指令或 Intel x86 SSE 或 AVX 等通常用于加速矩阵乘法。

然而,SIMD 向量引擎是微处理器核心的一部分。就像 ALU(算术逻辑单元)和 FPU(浮点单元)是 CPU 的一部分。在微处理器内部有一个指令解码器,它将拆分一条指令并决定激活哪个功能单元(灰色框)。

在 CPU 内部,ALU、FPU 以及 SIMD 向量引擎(未显示)作为单独的部分由指令解码器激活。协处理器是外部的。

相反,协处理器在微处理器核心的外部。比如最早的协处理器芯片之一:英特尔 8087,该芯片是一种物理上独立的芯片,旨在加快浮点计算的速度。

英特尔 8087,用于执行浮点运算的早期协处理器之一

对于 8087,你可能会很奇怪,为什么有人会想通过拥有一个像这样的单独芯片来使 CPU 设计复杂化?该芯片必须嗅探从内存到 CPU 的数据流,以查看是否有任何浮点指令。

原因很简单,第一代 PC 中的原始 8086 CPU 包含 29,000 个晶体管。相比之下,8087 要复杂得多,有 45,000 个晶体管。将这两个芯片结合在一起会非常困难和昂贵。

但随着制造技术的进步,将浮点计算单元(FPU)放在 CPU 内部并不是问题。因此 FPU 取代了浮点协处理器。

我们还不清楚为什么 AMX 不是 M1 上 Firestorm 核心的一部分。不管怎样,它们都在同一个硅芯片上。作为协处理器,CPU 继续并行运行可能更容易。苹果可能也喜欢把非标准的 ARM 产品放在 ARM CPU 内核之外。

为什么 AMX 是一个秘密?

如果苹果官方文件中没有描述 AMX,你是怎么知道的?这就多亏了开发人员 Dougall Johnson,他对 M1 进行了逆向工程,发现了这个协处理器。这里描述了他的努力。对于矩阵相关的数学运算,苹果有一些特殊的库或框架,如 Accelerate,它由以下部分组成:

  • vImage:更高层次的图像处理,如格式转换、图像处理等。

  • BLAS:线性代数的一种工业标准(我们称之为处理矩阵和向量的数学)。

  • BNNS:用于运行神经网络和网络训练。

  • vDSP:数字信号处理。傅立叶变换,卷积。这些是在图像处理或真正包括音频的任何信号中很重要的数学运算。

  • LAPACK:更高层次的线性代数函数,例如用于求解线性方程。


Dougall Johnson 知道这些库将使用 AMX 协处理器来加快计算速度。因此,他编写了一些特殊程序来分析和观察这些程序做了什么,以发现未记录的特殊 AMX 机器代码指令。

但是为什么苹果公司不记录这些,让我们直接使用这些指令呢?如前所述,这是 ARM 公司希望避免的。如果自定义指令被广泛使用,它可能会破坏 ARM 生态系统。

然而更重要的是,这对苹果来说是一个优势。通过只允许他们的库使用这些特殊的指令,苹果保留了以后从根本上改变这个硬件工作方式的自由。他们可以删除或添加 AMX 指令。或者他们可以让神经引擎来完成这项工作。无论哪种方式,它们都使开发人员的工作更容易。开发人员只需要使用加速框架,就可以忽略苹果具体如何加快矩阵计算的速度。

这是苹果垂直整合的一大优势。通过控制硬件和软件,他们可以利用这些技术。

苹果的矩阵协处理器有什么优势?

Nod Labs 是一家致力于机器交互、智能和感知的公司,对快速矩阵运算非常感兴趣。其研究人员已经为 AMX 性能测试写了高质量的技术性博客。

博客地址:https://nod.ai/comparing-apple-m1-with-amx2-m1-with-neon/

他们所做的是比较使用 AMX 编写类似代码和使用 Neon 指令编写类似代码的性能,后者得到 ARM 的官方支持。Neon 是一种 SIMD 指令。

Nod Labs 发现,使用 AMX,矩阵的运算性能比 Neon 指令快 2 倍。这并不意味着 AMX 在所有方面都更好,但至少在机器学习和高性能计算(HPC)类型的工作中,我们可以预期 AMX 将在竞争中占据优势。

原文链接:https://medium.com/swlh/apples-m1-secret-coprocessor-6599492fc1e1



工程苹果M1ARM协处理器逆向工程硬件芯片
相关数据
英特尔机构

英特尔(NASDAQ: INTC)是全球半导体行业的引领者,以计算和通信技术奠定全球创新基石,塑造以数据为中心的未来。我们通过精尖制造的专长,帮助保护、驱动和连接数十亿设备以及智能互联世界的基础设施 —— 从云、网络到边缘设备以及它们之间的一切,并帮助解决世界上最艰巨的问题和挑战。

http://www.intel.cn/
相关技术
Microsoft机构

微软是美国一家跨国计算机科技公司,以研发、制造、授权和提供广泛的计算机软件服务为主。总部位于美国华盛顿州的雷德蒙德,最为著名和畅销的产品为Microsoft Windows操作系统和Microsoft Office办公室软件,以及Xbox的游戏业务。微软是美国《财富》杂志2015年评选的世界500强企业排行榜中的第95名。

https://www.microsoft.com/en-us/about
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

数字信号处理技术

数字信号处理(digital signal processing),简称DSP,是指用数学和数字计算来解决问题。 大学里,数字信号处理常指用数字表示和解决问题的理论和技巧;而DSP也是数字信号处理器(digital signal processor)的简称,是一种可编程计算机芯片,常指用数字表示和解决问题的技术和芯片。

人脸识别技术

广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。

逆向工程技术

逆向工程,又称反向工程,是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

线性代数技术

线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象代数和泛函分析中;通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。

算术技术

算术(英语:arithmetic)是数学最古老且最简单的一个分支,几乎被每个人使用着,从日常生活上简单的算数到高深的科学及工商业计算都会用到。一般而言,算术这一词指的是记录数字某些运算基本性质的数学分支。

推荐文章
暂无评论
暂无评论~