- 这篇文章的主要内容:ARM设备端实现深度学习的一些tips
编译优化与ARM NEON
在使用arm-linux-gcc交叉编译工具链生成最终的可执行程序时,开启—O3编译优化,可以用来平衡时间和执行效率。Gcc的-o3编译选项为最高等级的优化,会自动进行指令以及寄存器级别的优化。
NEON介绍
ARMV7-A和ARMV7-R以及AMRV8系列支持neon指令集
Neon是ARM处理器中集成的一套SIMD(single instruction multiple data)单指令多数据指令集,可使得CPU在一个指令周期内并行处理多个数据,节省算法处理时间,常用作图像算法处理的一种加速手段。可以在交叉编译opencv的时候开启NEON优化的选项,可以加速图像处理算法的运行。
多核并行
多核ARM嵌入式平台的优势在于方便分配资源。可以将不同的任务分配给不同的核心,或者通过并行化手段将一个任务分配给多个核心。从单核到多核的转变为算法增加了难度,此时需要引入OpenMP。 OpenMP是一个跨平台的编程结构,通过在算法的C++代码中需要并行化的部分加入pragma指令,编译器将自动进行并行化处理
通过使用taskset指令,可以让程序绑定指定的CPU核心。