【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. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

prompt面试三道题

关于“prompt”(在AI、自然语言处理或用户交互等领域中,通常指的是引导用户输入或系统响应的文本或指令)的面试题,可以从不同角度和难度级别来设计。以下是由简单到困难的三道面试题: 1. 简单题 题目:请解…

【面试题】:MySQL `EXPLAIN`执行计划字段解析

MySQL EXPLAIN执行计划字段解析 引言 在MySQL中,EXPLAIN是一个强大的工具,用于分析查询语句的执行计划。通过EXPLAIN,你可以了解MySQL如何执行你的查询,包括它如何连接表、使用索引以及表的访问顺序等。了解这些信息对于优化查询…

四、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…

使用框架构建React Native应用程序的最佳实践

在React Conf上&#xff0c;我们更新了关于开始构建React Native应用程序的最佳工具的指导&#xff1a;一个React Native框架——一个包含所有必要API的工具箱&#xff0c;让您能够构建生产就绪的应用程序。 现在推荐使用React Native框架&#xff08;如Expo&#xff09;来创建…

Spring 依赖注入02

文章目录 1. 核心概念2. 依赖注入的方式3. 构造函数注入3.1 构造函数注入的优点包括&#xff1a; 4. 设值注入4.1 设值注入的特点和优点4.2 使用设值注入的注意事项 5. 接口注入5.1 接口注入的基本概念&#xff1a;5.2 使用接口注入的注意事项&#xff1a; 依赖注入&#xff08…

代码随想录day23 ||39组合总和1 40组合总和2 131分割回文串

39组合总和1 力扣题目链接 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 cand…

【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. 结束…

高级及架构师高频应用型面试题

一、微服务多节点批量应该怎么设计&#xff1f; 1、异步任务分类&#xff1a; 周期性定时任务调度任务批量任务 2、需要考虑并解决的问题&#xff1a; 2.1、避免同一任务同时被多个节点捞取。 1&#xff09;数据库的行级锁 2&#xff09;redis分布式锁 3&#xff09;quartz…

后端面试题日常练-day06 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 在Java中&#xff0c;以下哪个关键字用于表示类之间的关联性&#xff0c;表明一个类包含另一个类的对象&#xff1f; a) include b) contain c) reference d) composition Java中的方法重写&#xff…

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

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