【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】


请阅读嵌入式及芯片开发学必备专栏


文章目录

    • NPU 算力
    • MAC 阵列简介
      • MAC 阵列特点
    • MAC 阵列的结构
      • MAC 阵列架构示例
    • MAC 阵列计算举例
      • 示例计算
    • TOPS 计算方法

NPU 算力

OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS,那么视觉处理能力为什么用TOPS评估呢?通常计算机视觉算法是基于卷积神经网络的,而卷积神经网络的本质是累积累加算法(Multiply Accumulate)。

下图是一个非常生动的卷积过程
在这里插入图片描述

MAC 阵列简介

MAC(Multiply-Accumulate)阵列是电子计算领域中的一个基本单元,广泛应用于数字信号处理(DSP)、神经网络加速以及其他需要高效数学计算的领域。MAC 单元能够执行乘积累加运算,即在一个操作周期内同时进行乘法和加法运算

一个 MAC 单元基本上执行以下操作:

A = A * B + C

MAC 阵列特点

  1. 高效计算:MAC 能够在单个操作周期内完成乘法和加法运算,大大提高了计算效率。
  2. 广泛应用:在数字信号处理、图像处理、机器学习等领域,MAC 是关键的计算单元。
  3. 并行处理多个 MAC 单元可以并行工作加速复杂计算任务

MAC 阵列的结构

一个典型的 MAC 阵列由多个 MAC 单元组成,每个 MAC 单元独立进行乘积累加运算。通过并行计算和流水线技术,MAC 阵列可以显著提高计算性能。

MAC 阵列架构示例

假设我们有一个 4x4 的 MAC 阵列,表示有 4 行 4 列,共 16 个 MAC 单元。每个单元独立执行如下操作:

Sum_{ij} = Sum_{ij} + (A_i * B_j) 

其中,( i ) 和 ( j ) 分别表示 MAC 单元的行和列索引。

MAC 阵列计算举例

假设我们有两个向量 ({A} ) 和 ( {B} ),并且我们希望计算它们的点积。向量 ( {A} ) 和 ( {B} ) 分别为:

{A} = [a_1, a_2, a_3, a_4] 
{B} = [b_1, b_2, b_3, b_4]

我们将使用一个 1x4 的 MAC 阵列来计算它们的点积:

步骤

  1. 初始化:设定初始值 {Sum} = 0。
  2. 逐步计算
    • 第一步:{Sum} ={Sum} + (a_1 * b_1)
    • 第二步:{Sum} ={Sum} + (a_2 * b_2)
    • 第三步:{Sum} ={Sum} + (a_3 * b_3)
    • 第四步:{Sum} ={Sum} + (a_4 * b_4)

示例计算

假设:
{A} = [2, 3, 4, 5]
{B} = [1, 0, -1, 2]
根据上述步骤,我们计算点积:

  1. 初始化:{Sum} = 0)
  2. 第一步:{Sum} = 0 + (2 * 1) = 2)
  3. 第二步:{Sum} = 2 + (3 * 0) = 2)
  4. 第三步:{Sum} = 2 + (4 * -1) = 2 - 4 = -2)
  5. 第四步:{Sum} = -2 + (5 * 2) = -2 + 10 = 8)

最终结果:
{A} cdot {B} = 8

TOPS 计算方法

在这里插入图片描述

图:斯拉自动驾驶 FSD 芯片

在NPU中,芯片都用 MAC 阵列(乘积累加运算,MAC/ Multiply Accumulate) 作为NPU给神经网络加速,许多运算(如卷积运算、点积运算、矩阵运算、数字滤波器运算、乃至多项式的求值运算)都可以分解为数个MAC指令,因此可以提高上述运算的效率。

MAC矩阵是AI芯片的核心。TOPS是MAC在1秒内操作的数,计算公式为:

TOPS = MAC矩阵行 * MAC矩阵列 * 2 * 主频;

公式中的 2 可理解为一个MACC(乘加运算)为一次乘法和一次加法,为2次运算操作。

下面以特斯拉自动驾驶FSD芯片为例。

特斯拉资料中,该芯片的目标是自主4级和5级。FSD芯片采用三星(德克萨斯州奥斯汀的工厂)的14纳米工艺技术制造,集成了3个四核Cortex-A72集群,共有12个CPU,工作频率为2.2GHz,1个(ARM的)Mali G71 MP12 GPU,2个NPU工作频率为2GHz,每个周期,从 SRAM 读取 256byte 字节的激活数据和另外128byte的权重数据到MAC阵列中。

每个NPU拥有 96x96 MAC,另外在精度方面,乘法为8x8bit,加法为32bit,两种数据类型的选择很大程度上取决于他们降功耗的努力(例如32bitFP加法器的功耗大约是32bit整数加法器的9倍

2GHz的工作频率下,NPU单核算力为 36.86TOPS:

TOPS = MAC矩阵行 * MAC矩阵列 * 2 * 主频 = 96 * 96 * 2 * 2G = 36.864 TOPS(单核)

在点积运算之后,数据转移到激活硬件,最后写入缓存,以汇总结果。

FSD支持许多激活功能,包括ReLU、SiLU 和 TanH。每个周期,将128byte的数据写回SRAM。所有操作同时且连续地进行,重复直到完成整个计算。

推荐阅读
https://gitcode.csdn.net/65ed7c771a836825ed79b0bf.html
https://zhuanlan.zhihu.com/p/393418195

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络(二)-AlexNet

前言: AlexNet是2012年ImageNet竞赛冠军(以领先第二名10%的准确率夺得冠军)获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%(优于第二名的16.4%),明显优…

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言,其特性包括:模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法,以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…

LeetCode 637, 67, 399

文章目录 637. 二叉树的层平均值题目链接标签思路代码 67. 二进制求和题目链接标签思路代码 399. 除法求值题目链接标签思路导入value 属性find() 方法union() 方法query() 方法 代码 637. 二叉树的层平均值 题目链接 637. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

四、GD32 MCU 常见外设介绍(9)9.FWDG 模块介绍

9.1.FWDG 简介 本章我们主要分析独立看门狗(FWDG)的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即FWDGTRSTF。如果…

基于深度学习算法,支持再学习功能,不断提升系统精准度的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…

Java基础巩固——JDK 8、9新增接口的特性(接口中定义非抽象方法、静态方法和私有方法)

#Java学了这么久,项目也做了?基础知识还不巩固?快来关注我的这篇系列博客——Java基础复习巩固吧# 目录 引言 一、JDK8新特性:允许在接口中定义非抽象方法和静态方法。 注意事项 二、JDK9新特性:允许在接口中定义p…

ScriptableObject使用

资料 Scripting/Create modular game architecture in Unity with ScriptableObjects 脚本文档 基础 SO是一个Unity对象,继承UnityEngine.Objec, SO最大的特点是实例文件可共享,有点类似静态数据,同一个实例文件可被多个对象引…

matlab实验:实验六MATLAB 数值计算与符号运算

题目1:(线性方程组数值求解) 1. 用不同的方法求解下面方程:(方程原式参考 P369 实验 10,第 1 题) 第 1 种,左除和求逆函数(inv) 第 2 种 , 用 符 号 运 算 的…

JAVA基础知识4(static、继承)

JAVA基础知识4 static静态成员变量静态成员方法解释注意点 继承父类(基类或超类)子类(派生类)使用继承的示例解释运行结果 成员变量的访问特点成员方法的访问特点构造方法的访问特点 Java项目,包和类之间的联系包的概念…

vue elementui 在table里使用el-switch

<el-table-columnprop"operationStatus"label"状态"header-align"center"align"center"><template slot-scope"scope"><el-switch active-value"ENABLE" inactive-value"DISABLE" v-mod…

【C语言】两个数组比较详解

目录 C语言中两个数组比较详解1. 逐元素比较1.1 示例代码1.2 输出结果1.3 分析 2. 内置函数的使用2.1 示例代码2.2 输出结果2.3 分析 3. 在嵌入式系统中的应用3.1 示例代码3.2 输出结果3.3 分析 4. 拓展技巧4.1 使用指针优化比较4.2 输出结果4.3 分析 5. 表格总结6. 结论7. 结束…

Python写UI自动化--playwright(通过UI文本匹配实现定位)

本篇简单拓展一下元素定位技巧&#xff0c;通过UI界面的文本去实现定位 目录 匹配XPath 匹配文本元素 .count()统计匹配数量 处理匹配文本返回多个元素 1、使用.nth(index)选择特定元素: 2、获取所有匹配的元素并遍历: 3、错误处理: 匹配XPath 比如我们要定位到下图的…

C++笔试强训8

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 根据下面的定义故选A。 函数重载:在相同作用域中&#xff0c;函数名字相同&#xff0c;参数列表不同的一系列函数称为函数重载参数列表不同具体的体现:参数个数不同参数类型不同类型的次序不同注意:…

单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试 1. 常用注解 常用注解&#xff1a; TestBeforeAll&#xff0c;AfterAllBeforeEach&#xff0c;AfterEach 使用这些注解需要先引入依赖&#xff1a; <dependency><groupId>org.junit.jupiter<…

6 C 语言指针的奥秘:理论与实践详解

目录 1 变量访问机制 1.1 内存地址 1.2 变量的直接访问 1.3 变量的间接访问 2 指针变量及其内存大小 2.1 指针与指针变量 2.2 指针变量的定义格式 2.3 指针变量的内存大小 3 取地址操作符与取值操作符 3.1 取地址操作符 & 3.2 取值操作符 * 3.3 解引用与数据类…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

&#x1f387;&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳&#xff0c;欢迎大佬指点&#xff01; 欢迎志同道合的朋友一起加油喔 &#x1f4aa;&#x1f4aa;&#x1f4aa; 谢谢你这么帅…

学习React(描述 UI)

React 是一个用于构建用户界面&#xff08;UI&#xff09;的 JavaScript 库&#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用&#xff0c;屏幕上的所有内容都可以被分解成组件。在本章…

优化医疗数据管理:Kettle ETL 数据采集方案详解

在现代医疗保健领域&#xff0c;数据的准确性、完整性和及时性对于提高医疗服务质量和患者护理至关重要。为了有效管理和利用医疗数据&#xff0c;Kettle ETL&#xff08;Extract, Transform, Load&#xff09;数据采集方案成为了许多医疗机构的首选工具之一。本文将深入探讨Ke…

【基础算法总结】队列 + 宽搜(BFS)

队列 宽搜BFS 1.N 叉树的层序遍历2.二叉树的锯齿形层序遍历3.二叉树最大宽度4.在每个树行中找最大值 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#…