ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇)

2023-05-16

在这里插入图片描述

开篇

图1 ARMv9发布 [1]
  自从2011年10月ARM发布ARMv8以来,一晃已经过去了近10年。在此期间,ARM的芯片出货量从11年的79亿片 [2]涨到18年的229亿片 [3],收入从11年的约7.85亿美元 [4]涨到19年的18.98亿美元 [5],非常的成功,其中两个技术起到了重要的作用:
  1. ARMv8引入了64bit,从而让ARM从低端处理器一跃进入PC和服务器领域,其影响力从最近苹果在MacBook和Mac mini上使用ARM替换x86可见一斑。
  2. TrustZone被ARMv8-M引入嵌入式领域,为目前万物互联大趋势提供了坚实的硬件保护能力。
图2 ARM芯片出货量一览 [3]
  但ARM近两年的表现似乎不再亮眼,ARM曾经在IP市场占用率上达到过50%,2019年却已降到40.8% (2018年是44.7%) [6],2019年收入只上涨3.4% [5]。ARM今年3月发布ARMv9,自然是想借着新技术继续之前的发展势头。但ARM能得偿所愿吗?   本文试图介绍ARMv9的相关技术,但目前ARM并未开放太多技术资料,因此很多内容不够详实,敬请谅解。 # 人工智能上的野心   ARM在ARMv8推出后,近十年间陆续推出了各种扩展,应对不同的市场需求,其中很多都是针对快速发展的人工智能(AI)的,比如在ARMv8.1-M中引入MVE(M-Profile Vector Extension),就是为M系列增加AI的处理能力。而在A系列ARMv8.2中引入的SVE(Scalable Vector Extension),更是增强了向量处理,机器学习,数字信号处理等AI各方向的能力。ARMv9更是将其升级到SVE2。据说Nvidia斥资400亿美元收购ARM就是看中了这点。下面我们就看看ARM为了AI布局推出的SVE/SVE2是个什么技术。   在传统计算机体系结构中,并行计算是提高处理器性能的基本方法,最核心的思想就是通过增加硬件冗余,提高单位时间执行的工作量。而并行计算技术可以分成3类:指令级并行技术(Instruction-Level Parallelism),数据级并行技术(Data-Level Parallelism)和线程级并行技术(Thread-Level Parallelism)。SVE和NEON就是ARM提供的数据级并行的技术方案。 ## 邯郸学步(NEON)   在ARM推出SVE前,NEON已经为多媒体等相关应用场景服务了快20年了。NEON是和Intel的MMX, SSE2, AVX, AVX-512技术类似的SIMD(Single Instruction Multiple Data)技术,通过增加数据寄存器的位宽,从而提供单条指令处理一组数据(向量)的能力。NEON在ARMv8中提供的是128bit寄存器位宽,相对于AArch64的标准指令处理的是64bit寄存器位宽增加了一倍。NEON可以使用一条指令分别处理如下数量的数据:
  • 16个8-bit数据
  • 8个16-bit数据
  • 4个32-bit数据
  • 2个64-bit数据

比如说,如下指令就是使用一条指令完成了4对32-bit数据的加法运算,其中的V8/V9/V10是3个128bit寄存器。

ADD V10.4S, V8.4S, V9.4S

图3 NEON加法指令示例 [7]

  但不管是NEON,还是Intel的相关技术,随着被操作数寄存器位宽的增加,会遇到指令数量激增的问题。比如在NEON中,如下的指令虽然用的是相同的寄存器,也都是加法,但翻译后却是不同的指令。

ADD V10.4S, V8.4S, V9.4S
ADD V10.2D, V8.2D, V9.2D

可以设想,当扩展到SVE要求的2048bit寄存器位宽时,所需要增加的指令数对于ARM这种等长精简指令集(RISC)的指令编码空间来说,是不可接受的。
  另外,ARM处理器的设计目标涵盖从嵌入式轻量设备到高性能处理机群,类似NEON和SVE这样的SIMD指令,典型是针对高性能计算的,所以把针对高性能处理的设计使用在嵌入式领域,不管是成本还是功耗都是不能接受的。

青出于蓝(SVE)

  为了解决这些问题,ARM就推出了SVE技术。首先是32个Z寄存器(数据寄存器)的位宽从128bit到2048bit是实现相关的。因此针对不同的设备就可以使用不同的位宽,嵌入式处理器可以使用128bit来节省功耗和成本,高性能处理器可以使用最长的2048bit提供最好的并行性。
  另外SVE技术中的VLA(Vector Length Agnostic)算法可以在运行时断定硬件的真正位宽,从而实现相同的image(不需修改代码,不需重新编译)直接跑在支持SVE的不同位宽的处理器上,比如嵌入式设备和高性能机群上。
比如上面的NEON指令的例子,对应的SVE指令为:

ADD V10.S, V8.S, V9.S
ADD V10.D, V8.D, V9.D

可以看出,SVE指令中去掉了描述并行度的向量长度,从而减少了指令数,节省了指令编码空间,也提高了执行的效率(更好的指令cache命中率,更快的指令解码等)。但SVE是如何断定向量长度呢?
  使用如下的C代码举例说明:

void example01(int *restrict a, const int *b, const int *c, long N)
{
  long i;
  for (i = 0; i < N; ++i)
    a[i] = b[i] + c[i];
}

这段代码对应的汇编为:

    # x0 is 'a', x1 is 'b', x2 is 'c', x3 is 'i', x4 is 'N'
    mov     x3, 0 # set 'i=0'
    b       cond  # branch to 'cond'
loop_body:
    ld1w    z0.s, p0/z, [x1, x3, lsl 2] # load vector z0 from address 'b + i'
    ld1w    z1.s, p0/z, [x2, x3, lsl 2] # same, but from 'c + i' into vector z1
    add     z0.s, p0/m, z0.s, z1.s      # add the vectors
    st1w    z0.s, p0, [x0, x3, lsl 2]   # store vector z0 at 'a + i'
    incw    x3                          # increment 'i' by number of words in a vector
cond:
    whilelt p0.s, x3, x4  # build the loop predicate p0, as p0.s[idx] = (x3+idx) < x4
                          # it also sets the condition flags
    b.first    loop_body  # branch to 'loop_body' if the first bit in the predicate
                          # register 'p0' is set
    ret

可以看到,真正的SVE的加法指令是这样的:

ADD Z0.S, P0/M, Z0.S, Z1.S

SVE技术引入了16个P寄存器,作为一次操作的Z寄存器的bitmask,每个bit代表Z寄存器中的1个byte,因此其位宽是Z寄存器的1/8。其中只有Z寄存器中对应P寄存器bit为1的byte才会被执行加法运算。同样对于load和store指令也存在类似的指令。
  关键的是WHILELT指令,这条指令根据待处理数据的向量长度N,寄存器的位宽,自动产生循环代码完成向量加法运算。比如N是75,也就是300个byte,而我们Z寄存器位宽比如是256个byte(2048bit),因此要执行两次加法指令。WHILELT指令在第一次循环时把P寄存器置为全1,第2次把低44bit置为1,其余bit置为0。
  另外,SVE还增加了不连续内存的读写指令(Gather-load/scatter-store),可以一次性从不连续内存中为向量赋值,或写回。
  SVE还有一些其他的技术可以用来支持并行计算,本文不再赘述。
  通过SVE技术,ARM和日本富士通联合发布了A64FX的CPU处理器,用于Fugaku高性能计算机,最终于2020年6月在TOP500超级计算机排名中位列榜首。

更进一步(SVE2)

  SVE技术在ARMv8里是后期增加的扩展,但在ARMv9中SVE2则成为ARM在AI领域的重要技术基石。SVE是为ARMv8增加了高性能计算的能力,但SVE2可以看作是SVE和NEON的超集,在SVE的基础上,把NEON擅长的能力进一步增强,比如DSP能力等。因此可以用于未来各种领域:

  • 5G系统的数据处理
  • 虚拟和增强现实
  • 图像处理
  • 智能家居应用

一盘大棋

  前面讲了这么多,其实讲的都是ARM在A系列CPU上的技术投入。但ARM在AI上的布局并不仅仅于此。
  CPU是通用处理器,在AI领域的优势是低成本。但除了ARMv9,ARMv8-M也在不断的发展,ARMv8.1-M中已经增加了向量计算能力和各种AI相关的扩展。类似于ARMv9会包括当前所有ARMv8的能力扩展,相信未来发布的ARMv9-M也会包括ARMv8-M中扩展的AI能力,为更低端的嵌入式设备提供AI的解决方案。
  ARM在Mali系列GPU上已经耕耘多年,已经有了比较完备的技术能力,具备完整的产品线。而近年来推出的Ethos系列NPU,更是展示了ARM在AI上的决心。其中Ethos-N是针对边缘和云端的AI计算的,Ethos-U则是针对端上AI计算提供的microNPU解决方案。
  ARMv9 + ARMv9-M + Mali + Ethos-N + Enthos+U的各种组合,形成了ARM在AI领域的完整解决方案图谱。再加上包括ARM-NN,CMSIS-NN等各种相关软件生态的建设,ARM在AI领域下的一盘大棋,已经万事具备,蓄势待发。

未完待续

  本文主要介绍了ARM在ARMv9中发布的SVE2技术,以及ARM在AI上的其他布局,以期窥探其在AI领域的野心。如果仅从SVE2技术点来看,这个升级并未像ARMv8中的64bit一样,能大大拓展ARM芯片的应用场景,因此我并不觉得足以支撑ARM的新一轮腾飞。
  但ARMv9中并不仅仅是AI能力的加强,同时还在安全上做了重要技术更新。下一篇会详细介绍CCA和MTE两个技术。届时我们可以再来看看这个问题,是否能有新的答案。敬请期待。

引用

  1. https://www.anandtech.com/show/16584/arm-announces-armv9-architecture
  2. https://en.wikipedia.org/wiki/Arm_Ltd.
  3. https://www.arm.com/-/media/global/company/investors/PDFs/Arm_SBG_Q1_2019_Roadshow_Slides_FINAL.pdf
  4. https://www.arm.com/company/news/2012/01/arm-holdings-plc-reports-results-for-the-fourth-quarter-and-full-year-2011
  5. https://group.softbank/system/files/pdf/ir/financials/annual_reports/annual-report_fy2020_01_en.pdf
  6. https://www.electronicsweekly.com/news/business/arm-revenues-decline-growing-market-2020-03/#:~:text=ARM%20once%20controlled%2050%25%20of,claim%2018.2%25%20of%20the%20market.
  7. https://developer.arm.com/documentation/102474/0100/Data-processing-methodologies
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇) 的相关文章

  • FreeRTOS白话入门

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 何为RTOS真的很牛叉吗 xff1f 二 RTOS主要干了些啥 xff1f 啥都能干吗 xff1f 实时是个什么概念 x
  • STM32关闭PWM输出时,让IO输出固定高或低电平的方法。

    看到有很多人在网上询问停止PWM时如何获取固定输出 xff0c 记录在此供参考 方法1 xff1a 设置占空比为0xffff 或0 后即可得到想要的0或1输出 方法2 xff1a 配置回通用IO口 xff0c 再设置为0或1 以上两种方法是
  • STM32 USB 之从0开始移植笔记

    STM32 USB 之从 0 开始移植笔记 动机 写在前面的话 xff1a 最近逛淘宝无意间发现 RC522 居然只要 10 元左右就可以包邮买到 xff0c 真是太便宜了 xff0c 就忍不住买了个回来玩玩 到货移植到我的板子上 OK 后
  • PADS Logic Decal、Layout Decal绘制

    PADS Logic Decal Layout Decal绘制 绘制Logic Decal图形 xff1a 1 Gate Decal与Part Type的区别 Gate Decal 即元器件在原理图中所展现出来的形状 Part Type 将
  • __packed 关键字 的作用

    在移植机智云的代码时 xff0c 因为结构体里用了太多的变量 xff0c 为了节省ram空间 所以加了个 packed关键字修饰 举个例子 xff1a struct char a 1byte int b 4byte char c 2 2by
  • 如何将Python算法模型注册成Spark UDF函数实现全景模型部署

    本文作者来自Byzer社区 amp Kyligence 机器学习平台工程师 Andie Huang 背景 Background 对于算法业务团队来说 xff0c 将训练好的模型部署成服务的业务场景是非常常见的 通常会应用于三个场景 xff1
  • PADS软件基础与应用实例pdf 带书签 完整版免费下载

    内容提要 全书共11个项目 xff0c 主要内容包括 xff1a PADS软件的概述和安装 xff1b PADSLogic认知一 xff1a 绘制单级共射放大电路原理图 xff1b PADSLogic认知二 xff1a 元件库管理 xff1
  • Ubuntu 20.04 安装docker(傻瓜试一键教程)

    更新 apt 包索引 sudo apt update 安装依赖包 sudo apt install apt transport https ca certificates curl gnupg2 software properties co
  • Arduino通过串口发送结构体

    Arduino的串口有两类发送的函数Serial print 类和Serial write 类 xff0c 前者以Ascii码的形式将要发送的内容编码发送 xff0c 所以我们最后接收并看到的是一个一个的ASCII码组合而成的数据 xff0
  • Java并发编程78讲--52 第52讲:信号量能被 FixedThreadPool 替代吗?

    这一课时我们将介绍控制并发流程的工具类 xff0c 作用就是更容易地让线程之间相互配合 xff0c 比如让线程 A 等待线程 B 执行完毕后再继续执行 xff0c 来满足业务逻辑 本课时我们从 Semaphore xff08 信号量 xff
  • 2021-10-10 解决cmake报错:cmake The source directory “xxxx“ does not appear to contain CMakeLists.txt

    解决cmake报错 xff1a cmake The source directory xxxx does not appear to contain CMakeLists txt 执行 cmake命令时报错 xff1a The source
  • 解决MyEclipse保存时出现“Save could not be completed”问题

    在MyEclipse下编程时 xff0c 保存的时候 xff0c 如果出现 Save could not be completed 错误 xff1a MyEclipse的默认编译语言是 34 ISO 8859 1 34 xff0c 这个语言
  • freertos是跑的多线程,而不是多进程

    1 简单来讲进程和线程本质都是CPU时分复用 xff0c 当然了多核有同时跑的成分 2 线程之间是共用地址空间的 xff0c 进程之间的地址空间是独立的 3 基于第2点 xff0c 像freertos这样的小型嵌入式os xff0c 其多任
  • Django密码存储和加密方式

    算法 43 迭代 43 盐 43 加密 lt algorithm gt lt iterations gt lt salt gt lt hash gt settings里的默认配置 PASSWORD HASHERS 61 39 django
  • Git---利用Git实现项目在github和gitee同步更新

    一 将本地仓库关联Github的运程仓库 git remote add github的远程仓库名 xff08 自己命名 xff09 github项目地址 案例 xff1a git remote add github git 64 githu
  • DE1-SoC——关于QuartusII rbf文件的生成

    文章目录 1 什么是rbf文件 xff1f 2 关于rbf文件的两种配置方式3 两种配置方式所用到的rbf文件存在差异 xff1a 4 开启quartus生成rbf选项5 命令的方式来得到两种不同的rbf文件 xff08 通过写一个脚本文件
  • 创新者的孤独

    我在刚入行的时候 xff0c 经常看 JavaEye 现在的 Iteye 论坛 xff0c 那个时候有个猛人开发了一个web框架 Douyu 在论坛里一炮走红 他通过改写 Java 编译器来实现很多原先实现不了的动态能力并且抛弃了 Java
  • eclipse提示错误:save could not be completed

    这是经常出现的一种错误 错误提示 xff1a Save could not be completed try file save as if the problem persists Reason could not write file
  • Qt官方MQTT库的使用

    参考文档 https www cnblogs com yexiaopeng p 8542894 html https blog csdn net weixin 42810844 article details 84935467 前言 mqt
  • 立创EDA(专业版)使用体验(持续更新中)

    文章目录 前言一 立创EDA标准版与专业版对比二 专业版原理图主题颜色设置建议 前言 立创EDA作为国产EDA软件 xff0c 上手非常容易 xff0c 对于有AD等其它EDA软件制版经验的用户来说 xff0c 用不到半天的时间就可以轻易上

随机推荐

  • 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏(0.96寸 1.3寸通用)

    系列文章目录 一 基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 二 基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发 三 实战小例程 基于STM32F103C8T6最
  • XCOM V2.6 串口打印出来中文乱码,字体格式错乱的一种原因(设置没问题,突然乱码)

    一 问题重现 XCOM V2 6里 xff0c 完全一样的设置 xff0c 之前显示的好好的 xff0c 后来突然中文出现乱码 xff0c 字体格式也大变 xff0c 如下图 xff1a 二 解决方案 一般这种乱码 xff0c 往往都是因为
  • Springboot整合Kafka-控制或关闭消费、动态开启或关闭监听

    写在前面 xff1a 各位看到此博客的小伙伴 xff0c 如有不对的地方请及时通过私信我或者评论此博客的方式指出 xff0c 以免误人子弟 多谢 xff01 默认情况下 xff0c 当项目启动时 xff0c 监听器就开始工作 xff08 监
  • AliOS Things物联网操作系统

    AliOS Things 发布于2017年杭州云栖大会 xff0c 是HaaS家族中 面向 IoT 领域的 高可伸缩的物联网操作系统 xff0c 目前已经开源到3 1版本 系统集成大量物联网云服务连接能力 xff0c 云端钉一体开发模式 x
  • 轻应用介绍 - 用JavaScript进行嵌入式开发

    简介 轻应用 xff1a 可运行在轻量级嵌入式设备上的JavaScript应用 xff08 左图 xff09 轻应用框架 xff1a 封装了JavaScript引擎和API接口 xff0c 用于支持轻应用开发的软件框架 xff08 右图 x
  • 13年嵌入式老兵感悟 - 在对的时间遇到对的人和物

    点击查看活动详情 xff1a https t csdnimg cn L4B8 HaaS技术社区 在物联网方案多样化与场景碎片化等大背景下 xff0c 基于阿里云物联网数亿设备落地经验 xff0c 阿里云物联网团队推出了HaaS这个加速AIo
  • 崮德好文连载 - 活该你是工程师(自序)

    崮德好文连载 8个影响我职业生涯的重要技能 崮德好文连载 活该你是工程师 xff08 工作要围绕自己而展开 xff09 崮德好文连载 活该你是工程师 xff08 时间 amp 事项管理工具 xff09 崮德好文连载 活该你是工程师 xff0
  • 增长黑客 - 开源项目增长利器

    2012 年我开源了自己的第一个项目 https github com allwefantasy ServiceFramework 这个项目并不成功 xff0c 但对我个人的价值还是比较大的 xff0c 一直作为我工具箱用到现在 从 16
  • AliOS Things 3.3.0:HaaS EDU K1快速开始

    具体操作分为三步 xff1a 搭建开发环境创建工程开发及调试 1 搭建开发环境 Visual Studio Code Visual Studio Code 下称VS Code 是一款广泛使用的IDE工具 AliOS Things 3 3的开
  • 物联网发展新趋势

    一 背景和现状 物联网已经经历超过十年的发展时期 xff0c 尤其是最近几年 xff0c 物联网各个领域需求旺盛 xff0c 各式应用场景愈加丰富 xff0c 技术和应用创新层出不穷 xff0c 发展速度越来越快 根据GSMA发布的 The
  • 从“嵌入式”到“物联网”的四大转变

    经过几十年发展 xff0c 嵌入式技术已经用在了我们生活中的方方面面 xff0c 但是嵌入式始终都带有小众 xff0c 专业性强的属性 xff0c 让很多非嵌入式领域的同学望而却步 近十几年的发展 xff0c 物联网快速崛起覆盖了越来越多领
  • 脚本语言适合物联网开发吗

    序言 物联网在今天已经不是一个新词汇 xff0c 尤其是 物 这么接地气的东西 xff0c 在互联网深入到各行各业时 xff0c 自然而然会结合在一起 xff0c 形成物联网 这个 物 xff0c 就是千奇百怪 多种多样的嵌入式硬件 边缘硬
  • 物联网平台大量出现能否将行业带入爆发式发展

    最近今年物联网产业发展迅速 xff0c 作为物联网产业链关键环节 xff0c 物联网平台具有重要作用 中国物联网平台提供商大致有运营商 云计算厂商 互联网巨头 初创公司等 xff0c 比如阿里云 xff0c 华为 xff0c 腾讯 xff0
  • 谁才是物联网连接技术中的王者?

    1 简介 本文介绍了物联网连接技术的现状 xff0c 分析各个细分领域的佼佼者或者王者 2 背景 近些年物联网市场保持持续增长 xff0c 根据IOT ANALYTICS的数据 xff0c 2020年物联网的连接设备超过了120亿个 xff
  • 物联网到底为什么这么火?

    物联网概念自上世纪90年代提出至今已有近30年的历史 xff0c 与互联网 移动互联网的对比来看 xff0c 物联网的发展并不快 xff0c 整个物联网行业一直未能像互联网 移动互联网一样快速的规模化 xff0c 这背后的原因或者制约物联网
  • 国产物联网操作系统的出路在哪里?

    不看这几篇好文 xff0c 就别说自己了解物联网 一 背景和现状 物联网操作系统作为操作系统的一个分支领域已经有了数十年的历史 xff0c 作为应用领域最为宽广 设备数量最为巨大的应用领域 xff0c 物联网操作系统并没有发展出如个人桌面应
  • RISC-V架构能否引领物联网时代?

    不看这几篇好文 xff0c 就别说自己了解物联网 1 RISC V架构异军突起 CPU 是计算机系统 xff08 包含PC 手机与各种智能设备等 xff09 的核心 xff0c 而处理器架构是 CPU 的基石 纵观CPU架构发展历史 xff
  • 不看这几篇好文,就别说自己了解物联网

    物联网技术分享月 精品好文 2021 05 25 Python轻应用有哪些过人之处 xff1f 2021 05 25 物联网场景下为什么可以选择JS语言 2021 05 24 如何从零设计一种物联网组网协议 2021 05 24 带你了解热
  • 创新不是靠痛点,而是靠对效率的持续追求

    什么都等到痛了才去做 xff0c 要你何用 在互联网行业做产品 xff0c 亦或是创业给投资人讲故事 xff0c 一个很核心的点就是要问自己或者告诉对方 xff0c 我的产品击中了什么痛点 xff1f 似乎一切都是靠痛点驱动的 但我认为这是
  • ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇)

    开篇 图1 ARMv9发布 1 自从2011年10月ARM发布ARMv8以来 xff0c 一晃已经过去了近10年 在此期间 xff0c ARM的芯片出货量从11年的79亿片 2 涨到18年的229亿片 3 xff0c 收入从11年的约7 8