- 浏览: 576968 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (338)
- 已过时文章(留念用) (39)
- Android学习笔记 (30)
- Android开发指引自译 (100)
- Android NDK文档自译 (23)
- Android设计指引自译 (2)
- xp(ペケピー)&linux(理奈、铃)酱~ (4)
- ui酱&歌词自译~ (9)
- lua酱~ (9)
- 自我反省 (1)
- 羽game计划 (1)
- XSL酱 (2)
- java酱 (3)
- 设计的领悟 (58)
- 涂鸦作品(pixiv) (1)
- ruby酱 (2)
- Objective-C编程语言自译 (2)
- Android开发月报 (6)
- objc酱 (2)
- photoshop (3)
- js酱 (6)
- cpp酱 (8)
- antlr酱 (7)
- Lua 5.1参考手册自译 (11)
- 收藏品 (3)
- 待宵草计划 (4)
- 体验版截图 (1)
最新评论
-
naruto60:
太给力了!!!!我这网打不开Intel官网,多亏楼主贴了连接, ...
使用HAXM加速的Android x86模拟器(和一些问题) -
yangyile2011:
谢谢博主,翻译得很好哦
【翻译】(4)片段 -
ggwang:
牙痛的彼岸:痹!
牙痛的彼岸 -
ggwang:
总结得很简练清晰啊,学习了!
ANTLR学习笔记一:概念理解 -
leisurelife1990:
mk sdd
用git下载Android自带app的源代码
-----------------
英文文档见android-ndk-r5b的documentation.html
属于Android Native Development Kit (NDK)的一部分
见http://developer.android.com/sdk/ndk/(需要代理)
翻译仅个人见解
-----------------
Android NDK & ARM NEON instruction set extension support
Android NDK 和 ARM NEON指令集扩展支持
--------------------------------------------------------
Introduction:
介绍:
-------------
Android NDK r3 added support for the new 'armeabi-v7a' ARM-based ABI that allows native code to use two useful instruction set extensions:
Android NDK r3添加对新的基于ARM的armeabi-v7a ABI的支持,允许原生代码使用两个有用指令集扩展:
- Thumb-2, which provides performance comparable to 32-bit ARM instructions with similar compactness to Thumb-1
- Thumb-2,它提供与32位ARM指令可比的性能,也提供与Thumb-1相似的紧凑性
- VFPv3, which provides hardware FPU registers and computations, to boost floating point performance significantly.
- VFPv3,它提供硬件浮点处理单元寄存器和计算能力,显著提升浮点性能。
More specifically, by default 'armeabi-v7a' only supports VFPv3-D16 which only uses/requires 16 hardware FPU 64-bit registers.
更显著的是,默认armeabi-v7a只支持VFPv3-D16,VFPv3-D16只使用/需要16个硬件浮点处理单元64位寄存器。
More information about this can be read in docs/CPU-ARCH-ABIS.html
更多相关信息可以阅读docs/CPU-ARCH-ABIS.html。
The ARMv7 Architecture Reference Manual also defines another optional instruction set extension known as "ARM Advanced SIMD", nick-named "NEON". It provides:
ARMv7架构参考手册还定义另一个可选的指令集合,即ARM高级SIMD,昵称为NEON。它提供:
- A set of interesting scalar/vector instructions and registers (the latter are mapped to the same chip area as the FPU ones), comparable to MMX/SSE/3DNow! in the x86 world.
- 一组有趣的标量/矢量指令(注:标量指令是指处理器每次处理一条数据,而矢量指令则相反,允许并行处理多条数据)和寄存器(后来被映射为相同的芯片领域如浮点运算单元寄存器),可以和x86世界的MMX/SSE/3DNow!相比。
- VFPv3-D32 as a requirement (i.e. 32 hardware FPU 64-bit registers, instead of the minimum of 16).
- VFPv3-D32作为一种最低需要(即32个硬件浮点单元64位寄存器,而非至少16个)。
Not all ARMv7-based Android devices will support NEON, but those that do may benefit in significant ways from the scalar/vector instructions.
不是所有基于ARMv7的Android设备会支持NEON,而那些支持NEON的设备可以从标矢量指令中很有意义地获得好处。
The NDK supports the compilation of modules or even specific source files with support for NEON. What this means is that a specific compiler flag will be used to enable the use of GCC ARM Neon intrinsics and VFPv3-D32 at the same time. The intrinsics are described here:
NDK支持模块的编译或甚至是特定的源代码,拥有对NEON的支持。这意味着将使用一个特定的编译器开关同时打开对GCC ARM Neon内建和VFPv3-D32的使用。内建功能在这里描述:
http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html
LOCAL_ARM_NEON:
LOCAL_ARM_NEON
---------------
Define LOCAL_ARM_NEON to 'true' in your module definition, and the NDK will build all its source files with NEON support. This can be useful if you want to build a static or shared library that specifically contains
NEON code paths.
在你的模块定义中把LOCAL_ARM_NEON定义为true,NDK则会用NEON支持构建所有源文件。如果你想构建一个特定地包含NEON代码路径的静态或动态库,这可能有用。
Using the .neon suffix:
使用.neon后缀:
-----------------------
When listing sources files in your LOCAL_SRC_FILES variable, you now have the option of using the .neon suffix to indicate that you want to corresponding source(s) to be built with Neon support. For example:
当在你的LOCAL_SRC_FILES变量中列出源文件时,你现在拥有使用.neon的选择,以指出你想把源代码相应地用Neon支持进行构建。例如:
LOCAL_SRC_FILES := foo.c.neon bar.c
Will only build 'foo.c' with NEON support.
将只对foo.c用NEON支持构建。
Note that the .neon suffix can be used with the .arm suffix too (used to specify the 32-bit ARM instruction set for non-NEON instructions), but must appear after it.
注意.neon后缀可以同时使用.arm后缀(用于指明对非NEON指令的32位ARM指令集),但必须出现在后面。
In other words, 'foo.c.arm.neon' works, but 'foo.c.neon.arm' does NOT.
换句话说,foo.c.arm.neon可以,但foo.c.neon.arm不可以。
Build Requirements:
构建需要:
------------------
Neon support only works when targetting the 'armeabi-v7a' ABI, otherwise the NDK build scripts will complain and abort. It is important to use checks like the following in your Android.mk:
Neon支持仅在目标是armeabi-v7a ABI时才可工作,否则NDK构建脚本将解释和中止。在你的Android.mk中使用类似如下方式的检查是很重要的。
# define a static library containing our NEON code
# 定义一个静态库,包含我们的NEON代码
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib-neon
LOCAL_SRC_FILES := mylib-neon.c
LOCAL_ARM_NEON := true
include $(BUILD_STATIC_LIBRARY)
endif # TARGET_ARCH_ABI == armeabi-v7a
Runtime Detection:
运行时检测:
------------------
As said previously, NOT ALL ARMv7-BASED ANDROID DEVICES WILL SUPPORT NEON ! It is thus crucial to perform runtime detection to know if the NEON-capable machine code can be run on the target device.
正如前面所说的,不是所有基于ARMv7的Android设备支持NEON!因此最重要的是执行运行时检测以知道NEON能力的机器代码是否能运行在目标设备上。
To do that, use the 'cpufeatures' library that comes with this NDK. To lean more about it, see docs/CPU-FEATURES.html.
为了做到那一点,可以使用NDK提供的cpufeatures库。想知道更多相关信息,请参考docs/CPU-FEATURES.html。
You should explicitly check that android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM, and that android_getCpuFeatures() returns a value that has the ANDROID_CPU_ARM_FEATURE_NEON flag set, as in:
你应该显式地检查android_getCpuFamily()返回ANDROID_CPU_FAMILY_ARM,并且android_getCpuFeatures()返回一个拥有ANDROID_CPU_ARM_FEATURE_NEON标记位设置的值,正如这样:
#include <cpu-features.h>
...
...
if (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM &&
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0)
{
// use NEON-optimized routines
// 使用NEON优化例程
...
}
else
{
// use non-NEON fallback routines instead
// 改为使用非NEON倒退例程
...
}
...
Sample code:
示例代码:
------------
Look at the source code for the "hello-neon" sample in this NDK for an example on how to use the 'cpufeatures' library and Neon intrinsics at the same time.
查看这份NDK中hello-neon例子的源代码以获得关于如何同时使用cpufeatures库和Neon内建的例子。
This implements a tiny benchmark for a FIR filter loop using a C version, and a NEON-optimized one for devices that support it.
它实现了一个使用C版本的FIR(注:有限脉冲响应)滤波器循环,以及针对支持硬件NEON的设备的经过NEON优化的小型性能比较测试。
发表评论
-
【翻译】(25)ANDROID ATOMICS OPERATIONS
2012-02-21 10:22 1743----------------- 英文 ... -
【翻译】(21)Licenses
2011-11-13 21:11 963----------------- 英文文档见android ... -
【翻译】(19)Bionic Changes
2011-11-13 21:08 2530----------------- 英文文档见android ... -
【翻译】(16)Bionic Overview
2011-09-09 23:27 2261----------------- 英文文档见android ... -
【翻译】(17)SYSV IPC
2011-09-09 08:15 1624----------------- 英文文档见android ... -
【翻译】(20)System Issues
2011-09-08 18:22 1099----------------- 英文文档见andr ... -
【翻译】(24)Native Activity
2011-09-08 08:53 1532----------------- 英文文档见android ... -
【翻译】(23)NDK Stack
2011-09-07 16:45 2554----------------- 英文文档见android ... -
【翻译】(22)CPU X86
2011-09-07 15:52 1094----------------- 英文文档见android ... -
【翻译】(15)Standalone Toolchain
2011-04-26 17:05 1572----------------- 英文文档 ... -
【翻译】(14)Stable APIs
2011-04-26 17:04 1558----------------- 英文文档见android ... -
【翻译】(13)Prebuilts
2011-04-26 17:03 1192----------------- 英文文档见android ... -
【翻译】(12)NDK GDB
2011-04-26 17:00 1464----------------- 英文文档 ... -
【翻译】(11)NDK Build
2011-04-26 16:58 1586----------------- 英文文档 ... -
【翻译】(10)Import Module
2011-04-26 16:54 1508----------------- 英文文档见android ... -
【翻译】(9)CPU Features
2011-04-26 16:52 1523----------------- 英文文档见android ... -
【翻译】(7)CPU Arch ABIs
2011-04-26 16:48 1253----------------- 英文文档见android ... -
【翻译】(6)Application.mk File
2011-04-26 16:46 1420----------------- 英文文档 ... -
【翻译】(5)Android.mk File
2011-04-26 16:45 1330----------------- 英文文档见android ... -
【翻译】(4)How To
2011-04-26 16:43 991----------------- 英文文档见android ...
相关推荐
NEON 技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成),其性能至少为ARMv5 性能的3倍,为 ARMv6 SIMD性能的2倍。 关于SIMD和SISD:Single ...
NEON优化指令集能够与ARM处理器中的其他组件,如CPU和GPU协同工作,以实现高效的多媒体处理。NEON技术特别优化了包括整数和浮点运算在内的数据处理功能。整数指令能够处理8位、16位、32位或64位的数据,而浮点指令则...
NEON指令可以一次性处理16个8位整数或8个16位浮点数,这使得处理图像像素的计算效率大大提升。在处理图像曝光时,可能涉及到的NEON指令包括加载、存储、加法、乘法、归一化等。 1. **加载与存储**:NEON支持向量...
NEON单元被设计在处理器内部,以便于与CPU资源如整数运算、循环控制和缓存共享,这大大减少了硬件加速器所需的区域和功率成本。 #### 编译器支持 ARM NEON指令集的编译器支持包括自动识别和内联函数的使用。...
ARM NEON编程指南是针对ARM处理器中的NEON向量处理单元的一份详尽参考资料,旨在帮助开发者充分利用NEON技术进行高性能计算和多媒体应用的优化。NEON是ARM架构的一个重要扩展,提供了高级SIMD(单指令多数据)功能,...
在x86和ARM上,通过读取CPU ID可以确定处理器的支持特性,比如是否支持SSE、AES指令集,或者在ARM上是否支持NEON向量处理单元。 在实际开发中,提供的"CPU ID"压缩包文件可能包含以下内容: 1. 说明文档:详述了CPU...
这款解码包"MX Player 解码包 Arm_v7_Neon_v1.7.29"是针对ARM架构v7处理器并带有Neon扩展的设备设计的,目的是提升在这些设备上的视频播放性能和兼容性。下面我们将深入探讨相关的知识点。 1. **硬件解码**: 硬件...
- **ACL/Neon**:特指使用 ARM Compute Library 通过 Neon(ARM 的向量处理技术)进行测试。 #### 三、环境配置 ##### 3.1 硬件平台 - **支持的 CPU**:基于 ARM 架构的处理器。 - **支持的 GPU**:如 Mali 系列 ...
-enable-languages=c,c++,fortran --with-cpu=cortex-a9 --with-fpu=neon --with-float=hard --with-pkgversion='crosstool-NG 1.24.0' --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-...
1. **Neon架构**:Neon包含一组独立的寄存器和执行单元,与CPU核心并行工作,可以同时处理多个数据元素,极大地提高了计算效率。它拥有64个128位的VFP寄存器,这些寄存器可以分割为两个64位或四个32位的子寄存器。 ...
5. **库函数调用**: 使用专门为ARM优化的数学库,如NEON库,可以进一步提升计算性能。 压缩包内的“hpl-2.3-s1”很可能包含源代码、编译脚本、配置文件等,用户可以通过这些资源在interiork6w型ARM CPU上编译和运行...
3. **mx_neon**:可能是指该版本的工具是为ARM架构的CPU(尤其是具备NEON向量处理单元的处理器)优化的,如Cortex-A系列芯片。 4. **Storage Riru-stroage**:这部分可能是Riru的一个特定存储相关的插件或模块,专注...
### Unreal Engine 4: Mobile Graphics on ARM CPU and GPU Architecture #### 概述 本文主要探讨了Unreal Engine 4在移动设备上的应用,特别是在基于ARM架构的CPU和GPU上实现高性能图形渲染的技术细节。文章由ARM...
首先,我们要理解ARM Cortex-A8是ARMv7架构的一部分,它是32位的微处理器核心,支持NEON媒体和浮点处理单元,这使得它在多媒体应用和计算密集型任务中表现出色。ARMv7架构引入了Thumb-2指令集,提高了代码密度和效率...
这些处理器都支持ARM、Thumb-2和Thumb指令集,且具有Jazelle技术、TrustZone安全扩展、VFP硬件扩展和NEON多媒体处理引擎等特性。然而,在VFP/NEON类型、半精度浮点支持、多核MPCore、流水线pipeline、单MHz处理性能...
在Android应用中,`libjpeg-turbo`通常用于快速读取、处理和保存JPEG图像,以提高用户体验,减少CPU和内存资源的消耗。 `libjpeg-turbo`的so文件(动态链接库)在Android环境中用于提供C语言接口,供Java层通过JNI...
ARM Cortex-A系列处理器是ARM公司设计的高性能、基于RISC(精简指令集计算机)架构的CPU核心,广泛应用于移动设备、服务器、嵌入式系统等。ARMv8-A架构是Cortex-A系列的最新一代,它在ARMv7-A的基础上进行了重大改进...
8. **注意事项**: 交叉编译时需确保头文件、库和链接器选项正确匹配目标系统的配置,以避免运行时错误。同时,编译时可能需要为特定硬件特性(如CPU指令集)调整编译选项。 总结来说,`arm-linux-gnueabihf`编译链...
arm64-v8a则是面向ARMv8-A架构的,它支持64位计算,进一步提升了处理速度和效率,常见于现代高端Android设备。这个架构的设备通常具有更强大的处理能力,因此库也可以被优化以利用这些额外的性能。 libjpeg是一个...
2. **内核配置**:ARM平台上的Linux内核需要进行特定的配置以适应硬件特性,例如设置CPU架构、内存布局等。 3. **应用程序优化**:为了充分利用ARM处理器的性能,开发者需要对应用程序进行优化,比如利用NEON向量...