TFLite: neon基础知识

2024-06-03 15:08
文章标签 基础知识 neon tflite

本文主要是介绍TFLite: neon基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

neon介绍

       Neon是适用于ARM Cortex-A系列处理器的一种SIMD(Single Instruction, Multiple Data)扩展结构。NEON有自己的执行管道和寄存器组,neon寄存器组包含32个64位的寄存器和16个128位的寄存器,它们分别被标识为(D0-D31),(Q0-Q15)。 实际上D寄存器和Q寄存器是重叠的,如下图所示。NEON 技术本质上是一种并行处理技术,通过并行处理可加速多媒体和信号处理算法(如视频编码/解码、2D/3D 图形等)。通过使用neon可极大的提高软件的性能。
                                                                            

Neon关键概念

1、数据类型
       Neon寄存器可以存放大部分的基本数据类型,如int8、int16等。寄存器可以存放的数据个数跟寄存器大小和数据类型有关。比如64bit的寄存器可以存放8个int8类型数据。而128bit的寄存器则可以存放16个int8类型数据。

2、寄存器---向量(vector)

       在neon中一个寄存器可以看作是一个向量。比如一个64bit的寄存器D0,当这个寄存器存放4个int16类型数据时,可以把它看作是一个向量,它包含了4个类型为int16的元素。
3、管道(lane)---元素

       在上例中,当D0存放4个int16数据时,则此时D0有4个管道,管道0到管道3。管道0位于寄存器的低bit位。这个管道实际就对应了向量的元素概念。

4、Neon的数据装载顺序

       假设一个uint16类型的数组为{0x0201,0x0403,0x0605,0x0807},则它在内存中低地址到高地址存放的顺序为0x01,0x02,0x03````0x08(小端模式)。内存中的数据装入neon寄存器时,是低地址内存数据放入neon寄存器的低地址上,高地址内存数据放入neon寄存器的高地址上。当neon寄存器数据装入内存中时,同样是neon寄存器的低地址数据放入的内存低地址上,neon寄存器的高地址数据放入的内存高地址上。所以内存中的数据经过neon处理后,数据的顺序是不会发生变化的。

如何使用Neon

1、intrinsics(内部函数)
       使用intrinsics不如使用汇编优化效率高。但是使用intrinsics较为简单,且容易维护。这些函数在编译的时候会直接转化成Neon的汇编指令。为了支持这些内部函数必须要包含头文件arm_neon.h ,还要通过在编译的时候加入-mfloat-abi=softfp -mfpu=neon,同时需要打开-O2优化选项。使用intrinsics没法控制寄存器分配和内存对齐等。
如:


#include <arm_neon.h>
 uint32x4_t double_elements(uint32x4_t input)
 {
     return(vaddq_u32(input, input));
 }
2、开源库:
       基于neon的开源库如Project Ne10、OpenMAX DL
3、汇编:
       使用neon汇编优化的效果最好但是汇编移植性差,且难度较高。
4、自动向量化(Vectorizing Compilers):
       通过添加一些编译选项来使能向量化编译,让编译器自动生成优化代码,但对于复杂算法就不行了。

Arm-neon网站:http://www.arm.com/zh/products/processors/technologies/neon.php
--------------------- 
作者:EmSoftEn 
来源:CSDN 
原文:https://blog.csdn.net/EmSoftEn/article/details/51834171?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于TFLite: neon基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027331

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控

Gitflow基础知识

0.理想状态 现状 听完后的理想状态 没使用过 git 知道 git 是什么,会用 git 基础流程命令 用过 git,但只通过图形化界面操作 脱离图形化界面操作,通过 git 命令操作 会 git 命令 掌握 gitflow 规范,合理使用 rebase 和解决代码冲突问题 1.Git 的基础流程&命令 1.1 基础概念 工作区:代码生产基地,pycharm

[JAVA基础知识汇总-1] 创建线程的几种方式

文章目录 1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 线程池 可以认为有四种方式,也可以认为有一种,因为都跟Runnable接口有关 1. 继承Thread类 代码 public class Thread1ExtendsThread extends Thread {// public Thread1(String n