近期主要参与项目中的算法优化工作,把相关学习内容整理总计一下,加深自己理解的同时也能惠及他人。首先对基础知识准备做一个汇总。
算法优化后运行的平台主要是ARM平台,因此算法优化主要从以下几个方面实现。
1)代码级别,主要是指使用效率更高、计算量更小的算法
2)线程级,利用CPU多通道多核等特性,使用多线程加速运算
3)指令级,实际上没有接触汇编指令,而是使用平台基于汇编指令层面“封装”了一层的内置函数,这里主要用到NEON指令集
4)GPU,利用OPENGL做通用计算,或者使用OPENCL/CUDA利用GPU加速
当前只接触到2)和3),下面对自己搜索到的学习资料做个汇总。
Pthread:即POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准,该标准定义了创建和操纵线程的一整套API,在类操作系统(Unix、Linux、Mac OS X等)中都使用Pthreads作为操作系统的线程操作规范。因此使用它实现多线程,就不用担心在移植中遇到系统不支持或者需要第三方库的问题了。
1)Pthreads使用学习:参考《Linux环境C程序设计》第17章部分
2)Windows中使用Pthreads:https://blog.csdn.net/Rongbo_J/article/details/45055029
Neon:ARM公司为ARM Cortex-A系列处理器和Cortex-R52处理器设计的SIMD(单指令多数据)指令集,主要目的是提升多媒体用户体验,可以加速音视频的编解码、用户界面、2D/3D图像渲染,我们主要使用NEON加速算法计算。学习资料汇总:
1)Neon官网:https://developer.arm.com/technologies/neon
2)Neon指令查询:https://developer.arm.com/technologies/neon/intrinsics
3)Neon小结:https://blog.csdn.net/a568478312/article/details/80937797
4)ARM Neon编程学习:https://www.cnblogs.com/xylc/p/5398706.html
5)DEN0018A_neon_programmers_guide
后面以二维高斯滤波为例进行算法优化的实施与验证。