嵌入式平台算法优化

嵌入式平台算法优化

目录

前言 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平台资料的共享。同时也特别感谢我的同事陈欣在数学函数优化中提供了理论支持。
最后非常感谢蒙敏荣、陈欣、张玉祺等人对本书的审核检查工作,为本书的完善提出了不少重要的建议。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值