嵌入式平台算法优化

2023-05-16

嵌入式平台算法优化

  • 目录

目录

前言 4
1 嵌入式系统优化流程 6
1, 选用更优的算法 6
2, 选择嵌入式平台型号 6
3, 算法优化一般流程 9
2 高效的编程 15
1,数据类型 15
2, 编写高效代码 20
(1) 变量递增和递减 20
(2) 使用代码块最小化变量周期 20
(3) 循环中计数器的引用 21
(4) 数组索引的变量类型 22
(5) 减少循环体内容 23
(6) 循环内跳转指令的应用 25
(7) 指针别名的限制 26
(8) 循环类型对比 29
(9) 结构体指针的用法 30
(10) 循环体的展开 31
(11) 循环内部函数 32
(12) 循环内代码条件判断处理 34
(13) 动态内存分配 36
3,编译器优化 37
(1)优化选项的使用 37
(2)多模块交叉优化 40
4,汇编优化分析 41
(1)点乘优化 41
(2)循环内依赖性优化 49
5,利用OpenMP多线程优化 53
(1)OpenMP的常用指令 55
(2)多线程之间的同步 56
3 内存优化 59
1, 内存分类 59
2, SRAM存储器 60
(1) Cache 结构 62
(2) Cache读取miss与命中 63
(3)LRU 替换算法 63
(3) 硬件预取 65
3, Cache优化 67
(1)通过选择适当的数据类型减少内存带宽要求 69
(2)从算法流程分析cache 70
(3)cache开销评估 71
(4)避免L1Pmiss 72
(5)避免L1Dmiss 75
(6)避免cache 抖动 78
(7)避免使用过大数组导致miss 80
(8)避免writebuffer过大引起的stall 81
(9)cache一致性 85
4, SRAM读写流程 85
(1)Xm4片上数据内存的结构 88
(2)非对齐地址访问 89
(3)写缓冲 90
(4)写后读操作 93
(5)片上内存仲裁器 93
(6)Data DMA 94
(7)地址对齐 101
4 常用算法优化技巧 103
1,一维卷积滤波 103
(1)一维卷积概念 103
(2)FIR滤波器优化 104
2, 二维卷积滤波 107
3, 中值滤波 113
(1) 传统中值算法 114
(2) 双调排序算法 116
(3) 分块排序算法 121
4, 均值滤波 125
5, 矩阵相乘 127
(1) strassen算法 129
(2) coppersmith-winograd算法 130
(3) 基于内存的优化 131
6,数学函数优化 143
(1)泰勒公式展开 143
(2)牛顿迭代法 144
(3)除法运算 144
(4)开平方运算 145
(5)正弦与余弦运算 147
(6)反正切计算 150
(7)多项式计算 155
5 算法定点化 157
1, 普通运算定点化 157
2, 高精度的浮点数定点化 163
6 基于CEVA-xm4平台的优化 165
1,CEVA-xm4内核介绍 165
2,仿真环境搭建 170
3,SIMD指令的使用 173
1,intrinsic 函数 175
2,xm4内核流水线机制 175
3,向量滑动窗口指令 176
4,向量滑动模板指令 182
5, 向量插值指令 184
6, 向量(SAD)滑动窗口指令 186
7,Load and Store 单元 189
8,滑动load指令 190
9,间隔地址读取指令 191
10,并行地址读取指令 192
11,基于vs2013 的intrinsic 函数仿真 194
7 基于ARM-NEON指令的优化 195
1,寄存器 195
2,系统配置 195
3,Intrinsic函数 198
4,优化代码 201
5,使用NEON指令实现光流匹配算法 202
8,参考文献 214

前言
伴随着AI、三维视觉技术的发展,算法复杂度也随之增加,同时产品小型化使各种复杂算法在嵌入式平台上实现成为必要步骤。算法的开发者通常会首先利用matlab、C++、python等语言在PC机平台调试完成功能后移植在嵌入式平台,比如arm处理器,DSP处理器等。这些嵌入式平台受到其主频、架构、内存、指令集的限制,导致算法往往性能低下,尤其在一些音视频算法中,视频和图像相关的算法往往需要消耗大量内存和计算量,而音频算法则要求计算非常精简高效,对功耗要求也很低。而对于现在使用较为广泛的AI算法,往往需要非常大的计算量,研究更优更高效的各种算子实现方法显得尤其重要,AI算法通常需要大量的卷积操作和大量点乘操作,而这种操作往往具有极大的优化空间,因此就可以从多个角度来进行更深度的优化,以达到所在平台的最佳性能。因此本书从嵌入式平台硬件特性以及软件特性方面多角度的表述了对于这些算法性能提升的一些技巧和方法。同时,书中也大量借鉴了多种嵌入式处理器的一些官方的优化建议的文档,由此总结出算法在嵌入式平台的优化常用方法,包括代码的高效实现,平台指令的灵活使用,内存方面的优化,如何更好利用DMA操作,算法自身流程、实现方式上的改进等。
当然,目前的嵌入式系统和PC机系统已经并没有严格的界限,比如某些手持电脑也采用了多核的arm处理器,这种性能较好的arm处理器也用在大型的服务器中,也可以采用一些工业使用的工控机也会使用x86架构处理器,因此本书的一些技术同样适用于x86架构处理器。
本书对于算法优化的各种方法不限于某一个平台的DSP或者ARM,对于底层硬件原理以及编译器来说,各种不同的处理器内核从本质上讲大同小异,例如TI的C64系列DSP、CEVA-xm4、ADI的blackfin、ARM处理器等关于cache、DMA、SRAM的访问流程和原理并无较大差别。本书一些关于硬件方面优化介绍的内容也会结合多种处理器内核来讲述。本书将以下几个章节描述算法在嵌入式平台的优化及实现。
第一章主要讲述嵌入式系统较为关键的几个方面,包括算法的选择,处理器选型,算法优化的一般流程等。
第二部分为高效的C语言,主要介绍一些常用的代码编写技巧,如何用更高效的方式实现,避免编译器编译更多的指令。
第三部分为内存方面的优化,cache的原理以及优化,DMA的使用等内容,尽管对于内存的方面的介绍,讨论了其访问读取的流程对我们直接优化代码似乎没有直接帮助,但是他能帮助我们理解算法性能瓶颈,避免过多的读写内存引起的内核stall。
第四部分介绍了一些常用的基础算法的优化方法,其中包括卷积滤波、中值滤波、矩阵的运算、数学函数优化等。
第五部分介绍了算法的定点化,针对一些不具有硬件浮点运算单元处理器的一些浮点数算法的定点化方法。
第六部分讲述基于CEVA-xm4内核的软件优化以及指令向量化优化的内容,本部分主要介绍了一些比较特殊的广泛实用的一些向量指令,这些指令可以在卷积操作,窗口滤波方面达到事半功倍的效果。
在本书的编著过程中,身边的同事对我做了很大帮助,特别感谢我的同事蒙敏荣对本书的一些数学函数优化以及定点化提供了大量资料和数据以及对CEVA平台资料的共享。同时也特别感谢我的同事陈欣在数学函数优化中提供了理论支持。
最后非常感谢蒙敏荣、陈欣、张玉祺等人对本书的审核检查工作,为本书的完善提出了不少重要的建议。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式平台算法优化 的相关文章

  • JACK报错(Ensure Jack server is installed and started)&多用户编译

    目录 报错内容 报错原因 解决方法 备注 报错内容 20 4823 23656 Ensure Jack server is installed and started FAILED bin bash c 34 prebuilts sdk t
  • linux常用命令

    linux常用命令 pwd 查看当前工作目录的绝对路径 cat input txt 查看input txt文件的内容 cat v input txt 查看input txt文件的编码格式 sed
  • UML中类的关系:关联关系、聚合关系、依赖关系、泛化关系、实现关系

    一 关联关系 关联关系是一种结构化的关系 xff0c 指一种对象和另一种对象有联系 给定关联的两个类 xff0c 可以从其中的一个类的对象访问到另一个类的相关对象 在UML图中 xff0c 关联关系用一条实线表示 另外 xff0c 关联可以
  • 互补滤波

    互补滤波 加速度计对小车的加速度比较敏感 xff0c 取瞬时值计算倾角误差比较大 xff1b 而陀螺仪积分得到的角度不受小车加速度的影响 xff0c 但是随着时间的增加积分漂移和温度漂移带来的误差比较大 所以这两个传感器正好可以弥补相互的缺
  • Linux 网络通讯 : smbclient 命令详解

    smbclient命令属于samba套件 xff0c 它提供一种命令行使用交互式方式访问samba服务器的共享资源 语法 smbclient 选项 参数 选项 B lt ip地址 gt xff1a 传送广播数据包时所用的IP地址 xff1b
  • 云计算的三种部署模式:公有云、私有云、混合云

    随着云时代的到来 xff0c 慢慢的演化出了更有针对性的产品服务 xff0c 公有云 xff0c 私有云 xff0c 混合云 那么这三者之间有什么区别呢 xff1f 我们用打比方的方式来说明 例如我们来到一个城市需要睡觉 xff0c 就要去
  • 机器学习之随机森林(sklearn)

    文章目录 1 概述1 1 集成算法的概述1 2 sklearn中的集成算法 2 RandomForestClassfier2 1 重要参数2 1 1 控制基评估器的参数2 1 2 n estimators2 1 3 random state
  • AM5728 高性能计算(并行计算)OpenCL/OpenMP简介及测试

    一 OpenCL OpenMP简介 OpenCL Open Computing Language 是一个为异构平台编写程序的框架 xff0c 属于API xff0c 和OpenGL架构类似 xff0c 此异构平台可由CPU xff0c GP
  • Linux线程调度

    对于一个嵌入式多任务 多线程操作系统 xff0c 所启动的应用进程至少拥有一个线程或多个线程 xff0c 线程在进程中执行代码 一个进程能够 同时 运行多个线程 xff0c 同时 加上引号 xff0c 因为实际上 xff0c 在单处理CPU
  • /usr/bin/xauth: file /.../.Xauthority does not exist

    继我这篇博客解决了x11forwarding问题 xff0c 安装了xorg x11 xauth后 xff0c 又出现了新问题 xff0c Xauthority does not exist xff0c 真是够了 https blog cs
  • ORB-SLAM2在window下的配置 (4)

    配置DBoW2 接下来谈一谈DBoW2的配置 xff0c 难度稍微大一点点 xff0c 它存在于ORB SLAM2的源码中 xff0c 其作者也说了 xff0c 它跟g2o一样都被修改过了 xff0c 所以我们还是直接用ORB SLAM2自
  • ORB-SLAM2在window下的配置 (7)[END]

    部署ORB SLAM2 此系列博客终于接近尾声 xff0c 走过前方配置依赖库的漫漫长路 xff0c 我们终于要来部署ORB SLAM2了 xff01 ORB SLAM2源码下载 xff1a https github com raulmur
  • ubuntu18.04 apt源的添加、修改

    1 软件源 在Ubuntu下 安装软件常时 xff0c 常用apt命令如下 sudo apt get install name 如果源里面没有找到name xff0c 则无法安装该软件 2 源安装的原理 Ubuntu 自带了 apt的软件包
  • H3C链路聚合

    实验拓扑 图 1 1 注 xff1a 如无特别说明 xff0c 描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备 xff0c R2 或 SW2 对应拓扑中设备名称末尾数字为 2 的设备 xff0c 以此类推 xff1b
  • MapReduce实现二次排序

    默认情况下 xff0c Map输出的结果会按照key进行排序 xff0c 但在实际的应用中 xff0c 有时间我们不仅要对key进行排序 xff0c 同时还要对value进行排序 xff0c 这时候就要用到mapreduce中的二次排序 一
  • rosbag 从旧topic,迁移到新topic

    rosbag 从旧topic xff0c 迁移到新topic source 目标devel setup bash文件生成rules bmr迁移规则 rosbag check in bag g rules bmr修改迁移规则文件rules b
  • 研究生阅读文献技巧

    研究生如何做文献阅读和阅读笔记 以后大部分内容综合自PPT 研究生如何做文献阅读和阅读笔记 和 How to Read Paper 若侵权删 首先是一位研究生老师的建议 xff1a 今后大家提交的论文阅读笔记和工作报告尽量用英文写 可以直接
  • asp.net中执行exe应用程序

    在asp net中执行应用程序有两种方法 xff1a 1 调用win32函数ShellExecute 2 用 NET Framework中的Process类 下面我分别用这两种方法执行Windows中的记事本程序notepad exe 新建
  • Win10 安装Tensorflow-GPU版教程(附CUDA安装 could not fine compatible graphic hardware问题解答)

    入了深度学习的坑 xff0c 需要搭建Tensorflow环境 xff0c 虽然渣渣显卡 xff0c 但是总比CPU来得快 xff0c 果断选择GPU版 在网上找了很多资料 xff0c 受益颇多 但是由于tensorflow最近更新了 xf
  • 带你了解无人机的大脑-飞控

    无人机大脑 xff1a 飞控 无人机之所以能够在空中自主飞行就是因为无人机也和人一样 xff0c 也拥有一个大脑 xff0c 究竟是什么样的一个大脑才能够控制一架飞机在空中自动驾驶呢 xff1f 一起来看看 通俗点说 xff0c 能够自主起

随机推荐

  • STM32F103串口(ISP)下载

    1 ISP简介 ISP Iin System Programming 在系统可编程 xff0c 指电路板上的空白器件可以编程写入最终用户代码 xff0c 而不需要从电路板上取下器件 xff0c 已经编程的器件也可以用SP方式擦除或再编程 I
  • 用Docker搭建更酷的本地开发环境

    以前要在本地跑一些有意思的工程和实验 xff0c 都需要通过在本地装上一大堆软件来实现 最近发现有一种更酷的方式 xff1a Docker 用Docker在本地搭建开发环境有一系列显而易见的优势 xff1a 不用依赖公司的资源 xff0c
  • 只需修改一个像素,让神经网络连猫都认不出 | 论文+代码

    夏乙 编译整理 量子位 出品 公众号 QbitAI 想骗过神经网络 xff0c 让它认错图像 xff0c 需要对图像做多少修改 xff1f 一个像素就够了 一项来自日本的研究表明 xff0c 改动图片上的一个像素 xff0c 就能让神经网络
  • 小米迎来NLP首席科学家王斌:中科院研究员,雷军崔宝秋亲学弟

    雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 曾经武大郎 xff0c 今日小米科学家 小米又有AI科学家加盟 xff0c 这次是中国科学院信息工程研究所研究员王斌 xff0c 他将出任小米AI实验室NLP首席科学家 xff0c 负
  • IGMPv1,v2,v3详解

    简介 IGMP IGMP Internet Group Management Protocol xff09 作为因特网组管理协议 xff0c 是TCP IP协议族中负责IP组播成员管理的协议 xff0c 它用来在IP主机和与其直接相邻的组播
  • 华为最强AI芯片麒麟980发布:全球首款7nm手机芯片,双核NPU,6项世界第一

    安妮 雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 遥遥领先 xff01 这是华为消费者业务CEO余承东放下的狠话 xff0c 他说自家即将推出的手机芯片麒麟980 xff0c 将在全球范围内遥遥领先 而且领先的不是别家 xff0
  • Haar小波提升算法

    传统的小波变换是在傅里叶变换的基础上演变而来 xff0c 计算过程中存在着大量的卷积运算或是乘累加的计算 xff0c 如若在硬件上实现 xff0c 势必会消耗大量的寄存器资源 xff0c 而且速度也上不去 提升小波又称为第二代小波 xff0
  • 【Docker学习】Docker Hub + GitHub实现镜像自动构建

    近期学习Docker的相关知识 xff0c 尝试了一下Docker Hub 43 GitHub自动构建镜像 xff0c 在此记录一下过程 将GitHub账号关联到Docker Hub账号 设置位置 下滑到Linked Accounts xf
  • spring整合mybatis报错Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容

    在spring的配置文件中配置mybatis时使用的是 xff1a span class hljs comment lt 控制和MyBatis整合 gt span span class hljs tag lt span class hljs
  • linux中UDP编程

    在前面的文件中 xff0c 我们介绍了linux网络编程中与IP相关的知识和常用的函数总结 xff0c 本文针对具体的UDP通信 xff0c 来详细的介绍UDP通信的使用 xff0c 包括UDP通信中的点对点通信 xff0c 多播 xff0
  • 语音增强--卡尔曼滤波介绍及MATLAB实现

    语音增强 卡尔曼滤波 状态方程 x k 43 1 61
  • 树莓派官方系统(raspbian)安装及使用教程

    以下内容为本人原创 xff0c 欢迎大家观看学习 xff0c 禁止用于商业用途 xff0c 作者 xff1a 64 Yhen 原文网站 xff1a CSDN 原文链接 xff1a https blog csdn net Yhen1 arti
  • 主键和外键的区别

    一 什么是主键 外键 主键 xff1a 关系型数据库中的一条记录中有若干个属性 xff0c 若其中某一个属性组 注意是组 能唯一标识一条记录 xff0c 该属性组就可以成为一个主键 比如 1 学生表 学号 xff0c 姓名 xff0c 性别
  • C++中,使用libCurl实现http的post请求

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • nodejs版本管理NVM

    nodejs版本管理NVM NVM全称 xff08 Node Version Manager xff09 是一个用来管理node版本的工具 因为在开发electron版本应用时遇到了 xff0c nodejs使用版本冲突 xff0c 所以我
  • OSPF中DR、BDR竞选机制【转载】

    OSPF DR BDR 竞选机制详解 OSPF 上篇技术文章中提到了建立邻居和邻接关系 xff0c 而邻居关系建立成功之后 xff0c 在broadcast NBMA网络上会进行DR BDR竞选 DR产生背景 在MA网络中 xff0c 任意
  • Citrix Receiver在linux系统(Ubuntu)下的安装使用

    本文为解决在linux系统下Citrix Receiver安装完成后无法登录服务器的情况 xff0c windows下没有这个问题 其中报错为无法识别安全证书 提示 xff1a no such file or directory verif
  • ORA-28000:the account is locked错误解决

    Oracle数据库日志中出现ORA 28000 the account is locked的错误 xff0c 可以按下面的步骤处理 xff1a 1 查询FAILED LOGIN ATTEMPTS参数默认值 xff0c 这个参数限制了从第一次
  • 在Ubuntu上安装boost库

    boost中 xff0c 用到了别的函数库 xff0c 所以为了使用boost中相应的功能 xff0c 需要先安装系统中可能缺失的库 apt get install mpi default dev 安装mpi库 apt get instal
  • 嵌入式平台算法优化

    嵌入式平台算法优化 目录 目录 前言 4 1 嵌入式系统优化流程 6 1 xff0c 选用更优的算法 6 2 xff0c 选择嵌入式平台型号 6 3 xff0c 算法优化一般流程 9 2 高效的编程 15 1 xff0c 数据类型 15 2