首页 > 其他分享 >CPU AMX 详解

CPU AMX 详解

时间:2023-02-23 22:11:47浏览次数:34  
标签:BF16 AVX 矩阵 AMX 详解 CPU 向量

CPU AMX 详解

概述

2016 年开始,随着 NV GPU AI 能力的不断加强,隐隐感觉到威胁的 Intel 也不断在面向数据中心的至强系列 CPU 上堆砌计算能力,增加 core count提高 frequency增强向量协处理器计算能力三管其下。几乎每一代 CPU 都在 AI 计算能力上有所增强或拓展,从这个方面来讲,如果我们说它没认识到,没有采取行动,也是不公平的。

Alt text
从上图不难看到,2015年的 Sky Lake 首次引入了 AVX-512 (Advanced Vector eXtensions)向量协处理器,与上一代 BroadwellAVX2 相比, 每个向量处理器单元的单精度浮点乘加吞吐翻倍。接着的Cascade LakeCooper Lake又拓展了 AVX-512 ,增加了对 INT8BF16 精度的支持,奋力想守住 inference 的基本盘。一直到 Sapphire Rapids,被市场和客户用脚投票,前有狼(NVIDIA)后有虎(AMD),都把自己的食盆都快拱翻了,终于意识到在AI的计算能力上不能在按摩尔定律线性发育了,最终也步GoogleNVIDIA的后尘,把AVX升一维成了AMX(Advanced Matrix eXtension),即矩阵协处理器了。充分说明一句老话,你永远叫不醒一个装睡的人,要用火烧他。不管怎么样,这下总算是赛道对齐了,终于不是拿长茅对火枪了。

Alt text

算力如何

AI 工作负载 Top-2 的算子:

  • Convolution

  • MatMul/Fully Connected

这俩本质上都是矩阵乘。怎么计算矩阵乘,有两种化归方法:

  • 化归成向量点积的组合,这在CPU中就对应AVX

  • 化过程分块矩阵乘的组合,这在CPU就对应AMX

我们展开讲讲。

问题定义

假设有如下矩阵乘问题:

 

Alt text

AVX如何解决矩阵乘问题

Alt text
AVX把向量作为一等公民,每次计算一个输出元素,而该元素等于的第行与的第列的点积,即有:

不就化归成向量点积了嘛。那向量的长度是可以任意指定的,但硬件是有固定长度的,怎么办?很简单,就把每个向量切成每个长度为的块,多做几次就好了。这个就是区分AVX各代的主要因素。下面以AVX2为例浅释一下。

 

AVX2 FP32 (k=8)
AVX2使用的寄存器长度为256 bit,也就是8个FP32数,此时。AVX的乘加> 指令操作示意如下:
Alt text
一个时钟周期可以完成两个8维向量的点积操作,也叫FMA(Fused Multiply > Add)操作。因此每个AVX单元的FLOPS为:16 FLOPS/cycle。

以FP32/BF16为例,AVX算力的代际演进如下,可以看出相邻代际增长是平平无奇的2倍。

Alt text

AMX如何解决矩阵乘问题

以BF16为例,AMX把矩阵乘操作化归为若干个的分块矩阵乘的组合,如下所示。

Alt text
需要注意的是整个操作需要16个cycle完成,因此不难计算每个AMX单元的FLOPS为:1024 OPS/cycle。这下单AMX单元与单AVX单元的每时钟周期的算力提高了16倍,有点像样了。目前Sapphire Rapids每个核有一个AMX单元,而有两个AVX单元,因此每核的每时钟周期算力提高倍数为8倍。

如何计算含有AMX CPU的peak TFLOPS
公式:

假设你有一个56核,每核有1个AMX单元,且AMX频率为1.9 GHz的CPU。其BF16 peak TFLOPS应为:

如何实现的

AMX围绕矩阵这一一等公民的支持分为计算和数据两个部分。

Alt text

  • 计算部分:目前仅有矩阵乘支持,由称为TMUL(Tile Matrix mULtiply Unit)的模块来实现。但也为后面支持其他的矩阵运算留了想像。

  • 数据部分:由一组称为TILES的二维寄存器来承担。

其系统框图如下:

Alt text

计算部分

TMUL 硬件层面的实现也比较直观,是一个典型的systolic array设计。比较好的是array的每一行都复用了原来的AVX-512 BF16的设计,堆叠了16个AVX-512 BF16单元,在一个cycle内完成了一个的运算,因此完成整个的计算需要16个cycle。

Alt text
Systolic形式的逻辑图,如下。可以看出每个cycle输出 的一行结果。

Alt text

数据部分

每个AMX单元共有8组TILES寄存器,TILE寄存器可以存放一个二维矩阵的子矩阵,有专门的load/store指令。

Alt text
每个TILE寄存器容量为:16行 64 bytes,因此可用于存放:

  • 的 FP32 矩阵

  • 的 BF16 矩阵

  • 的 INT8 矩阵

路才开始

迈出脚只是路的开始,而不是结束。后面有的是路(问题):

  • HW

    • TILE 和 memory 之间的 load 和 save 带宽与TMUL计算能力的匹配度

    • AI workload 一般都是矩阵操作(matmul, conv等)与向量操作混杂,而向量操作有分为 element-wise 操作和 reduce 类操作

      • 这3类操作算力的匹配度

      • 矩阵寄存器与向量寄存器之间的 data path 通畅度如何

    • ……

  • SW

    • 如何提高SW efficiency

    • 如何摆平AI框架要求的plain data layout与AMX硬件要求的data layout之间的re-layout开销

    • ……

让我们边走边看!

标签:BF16,AVX,矩阵,AMX,详解,CPU,向量
From: https://www.cnblogs.com/Matrix_Yao/p/17149640.html

相关文章

  • Java集合Set接口详解——含源码分析
    前言前几天我们看了​​Java集合List接口详解——含源码分析​​,今天我们看一个数据一个数据存储的另一个接口——Set。Set前面我们说List最大的特点是:​​有序,不唯一​​,而......
  • 结构体详解
    这是一篇介绍C语言结构体基本知识的博客,包含结构体声明,笔者在使用时曾犯过的一些错误等。一、背景在编程中,我们常会遇到一些复杂对象,其中包含各种类型的数据,而我们又需......
  • Django 模型 Meta 选项详解
    1.了解Meta内部类每个模型类(Model)下都有一个子类Meta,这个子类就是定义元数据的地方。Meta类封装了一些数据库的信息,称之为Model的元数据。Django会将Meta中的......
  • Linux top 命令详解
    如图:前五行分别为:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)进程总数、运行中的进程数、睡......
  • 2021全国职业院校技能大赛真题-网络系统管理项目-模块C路由交换部分答案详解
    有线网络配置为优化骨干链路上的流量,需要在全网Trunk链路上做VLAN修剪。所有设备switchportmodetrunkswitchporttrunkallowedvlanonly10,20,30,40,100//在所有需......
  • 2021全国职业院校技能大赛真题-网络系统管理项目-模块C路由交换部分答案详解
    在S3和S4上配置VRRP,实现主机的网关冗余,所配置的参数要求如表1所示。其中,S3、S4上配置各VRRP组中的高优先级设置为150,低优先级设置为120S3interfaceVLAN10ip......
  • Nginx之location详解
    Nginx之location详解https://huaweicloud.csdn.net/63a570c2b878a54545947421.html?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Ed......
  • Unity UGUI系列九 Text TextMeshPro 详解
    参考[专栏精选]TextMeshPro插件TextMeshPro使用说明TextMeshPro中文字体生成和字体材质更换新一代Unity文本组件TextMeshPro系列教程【Unity学习笔记】TextMeshP......
  • Java ”框架 = 注解 + 反射 + 设计模式“ 之 反射详解
    Java”框架=注解+反射+设计模式“之反射详解每博一文案无论幸福还是苦难,无论光荣还是屈辱,你都要自己遭遇与承受。——————《......
  • RTMP推送扩展支持HEVC(H265)之Metadata结构填写详解
    鉴于广大码友对上一篇文章​​RTMP推送扩展支持HEVC(H265)​​的Metadata数据结构还存在不清楚的地方,这里对RTMP推送Metadata的结构进行详解。首先,我们先讲解下H.264/AVC......