Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86

来源:互联网 发布:网站制作软件培训 编辑:程序博客网 时间:2024/05/16 12:16

转载请注明出处:http://blog.csdn.net/loveyaozu/article/details/51205820


简介

在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到

mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面的包是干什么用的?

这三个包下面存放的用C编译的本地库文件(各类『.so』文件)。

mips、armeabi、armeabi-v7a和x86都表示CPU的类型。一般的手机或平板都是用arm的cpu。不同的cpu的特性不一样,armeabi就是针对普通的或旧的

arm v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。

mips、armeabi、armeabi-v7a和x86到底是什么

mips:MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),

其机制是尽量利用软件办法避免流水线中的数据相关问题。

armeabi默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI (二进制接口)

创建的二进制代码将可以在所有 ARM* 设备上运行。所以armeabi通用性很强。但是速度慢

armeabi-v7a创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。

x86:支持基于硬件的浮点运算的 IA-32 指令集。x86是可以兼容armeabi平台运行的,无论是armeabi-v7a还是armeabi,同时带来的也是性能上的损耗,

另外需要指出的是,打包出的x86的so,总会比armeabi平台的体积更小。

总结

如果项目只包含了 armeabi,那么在所有Android设备都可以运行; 如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行; 

如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了 armeabi, armeabi-v7a和x86,

所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。

扩展知识

NEON

通过干净方式构建的 NEON 技术可无缝用于其本身的独立管道和寄存器文件。

NEON 技术是 ARM Cortex™-A 系列处理器的 128 位 SIMD(单指令,多数据)架构扩展,旨在为消费性多媒体应用程序提供

灵活、强大的加速功能,从而显著改善用户体验。它具有 32 个寄存器,64 位宽(双倍视图为 16 个寄存器,128 位宽。)

NEON 指令可执行“打包的 SIMD”处理:

  • 寄存器被视为同一数据类型元素矢量
  • 数据类型可为:签名/未签名的 8 位、16 位、32 位、64 位单精度浮点数
  • 指令在所有通道中执行同一操作

用于演示 NEON 打包的 SIMD 处理的图表

使用 NEON 技术的 ARM Cortex™-A 系列处理器,以及 ARM 的 Mali 多媒体硬件解决方案可用于多媒体应用,

范围从智能手机和移动计算设备到 HDTV。

NEON的优点

NEON 增强了用户体验
NEON 可增强许多多媒体用户体验:
观看任意格式的任意视频
编辑和强化捕获的视频 – 视频稳定性
锯齿消除渲染和合成
游戏处理
快速处理几百万像素的照片
语音识别
强大的多通道高保真音频处理
NEON 的特征和优点
NEON 支持用于 Internet 应用程序的范围广泛的多媒体编解码器:
许多软编解码器标准:MPEG-4、H.264、On2 VP6/7/8、Real、AVS
对于各种格式的正常大小的“Internet 流”解码来说,是理想的解决方案
不仅仅针对编解码器,还适用于 2D 和 3D 图形和其他矢量处理
提供现有工具、操作系统支持和生态体系支持
所需周期减少:
NEON 可使复杂视频编解码器的性能提升 60-150%
单个简单 DSP 算法可实现更大的性能提升(4 倍 -8 倍)
处理器可更快进入睡眠状态,从而在整体上节约了动态功耗 
NEON 技术的大量元素能够提高性能并简化软件开发过程,如: 
通过对齐和非对齐数据访问,可对 SIMD 操作进行有效的矢量化。
清晰的指令集架构,设计用于自动矢量化编译器和手动编码。
有效访问打包数组,如 ARGB 或 xyz 坐标
支持整数和浮点操作,以确保适合从编解码器、高性能计算到 3D 图形等广泛应用领域。
与 ARM 处理器紧密结合,提供单指令流和内存的统一视图,从而能够提供一个具有更简单工具流的开发平台目标。nbsp;
通过具有双 128 位/64 位视图的大型 NEON 寄存器文件,可有效处理数据并尽可能减少对内存的访问,从而增加了数据吞吐量。

如何使用 NEON
OpenMAX DL 库:
加速 AV 编解码器的建议方法
以源格式释放的库,在 ARM 网站上免费提供
支持以下格式:MPEG-4 简单配置文件、H.264 基准、JPEG、MP3、AAC
支持以下功能:FIR、IIR、FFT、点积、色彩空间转换、de-blocking.de-ringing、旋转、缩放、合成
矢量化编译器:
使用现有源代码自动搜索 NEON SIMD
受 ARM RealView 开发套件(v3.1 Pro 及更高版本)支持
在 2007q3 及更高版本中受 gcc 支持
C 内部函数:
C 函数调用接口至 NEON 操作
支持 NEON 支持的所有数据类型和操作
在 ARM RealView 开发套件(3.1 及更高版本)和 gcc 2007q3 及更高版本中受支持
汇编器:
针对确实需要在最低级别进行优化的用户
在 ARM 的 RealView 开发套件(3.1 及更高版本)和 gcc 2007q3 及更高版本中受支持

开源社区中的 NEON 支持
当前,在以下开源项目中支持 NEON:
Android – NEON 优化
使用 NEON,Skia 库 S32A_D565_Opaque 的速度加快了 5 倍
Ubuntu 09.04 支持 NEON:
关键共享库的 NEON 版本
Bluez – 官方 Linux 蓝牙协议堆栈
NEON SBC 音频编码器
Pixman(Cairo 2D 图形库的一部分)
合成/alpha 混合
X.Org、Mozilla Firefox、Fennec 和 Webkit 浏览器
例如,使用 NEON 后,fbCompositeSolidMask_nx8x0565neon 的速度提高了 8 倍
ffmpeg - libavcodec
用于众多 Linux 分发版的 LGPL 媒体播放器
视频:MPEG-2、MPEG-4ASP、H.264 (AVC)、VC1
音频:Ogg Vorbis
x264 – Google 2009 年度编程之夏
GPL h.264 编码器 – 例如,针对视频会议

SSE: 英特尔推出的类似 NEON 的工具

SSE 指面向英特尔架构(IA)的SIMD 流指令扩展。 目前,英特尔® 凌动™ 最高支持 SSSE3(补充 SIMD 流指令扩展 3)。 凌动暂不支持 SSE4.x。

后者也是一个 128 位引擎,用于打包浮点数据。 这一执行模式开始于 MMX 技术。SSx 是较新的技术,取代了 MMX。。 如欲了解详细信息,

请参阅英特尔《IA-32 和 IA-64 软件开发人员手册》中的“第一卷: 基础架构”部分。 目前,SSE 概述部分在 5.5 节。 它提供 SSE、SSE2、

SSE3 和 SSSE3 的操作码。注意,数据运算通常会涉及到处理基于精度的打包浮点数值;并且需要在 XMM 寄存器之间,或在这些寄存器

与内存之间批量传输数据。 XMM 寄存器主要用于取代 MMX 寄存器。

SSE的官方介: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

0 0
原创粉丝点击