Neon

转自:http://blog.youkuaiyun.com/abnerchai/article/details/7450517

Neon是ArmV7架构的CPU引入的一个指令集合。

ArmV7是ARMCPU架构的演变版本路线中ARM6的更新的版本。

基于ARMV7的CPU有多个系列的实现,

Cortex A 系列 -- Application -- 消费电子领域

Cortex R 系列 --- Real Time领域,实时嵌入式领域

Cortex M系列 -- Macro 领域,低功耗嵌入式领域


所以CortexA8, A9是armV7体系结构下的CPU系列的一种,一般来看,Cortex A系列的CPU均实现和支持了Neon指令集合。


ARM 是一个很厉害的IP公司,全球只有几千人,靠卖专利赚钱,像TI,三星,高通这种芯片厂商都交钱给他。但是更厉害的是苹果, 很多人可能不知道ARM最早是由苹果天使投资资助的一个高科技公司,为什么苹果的iPhone卖的这么好?因为苹果手机的CPU都是CortexA系列的,均支持了Neon技术,所以用户体验这么好。而他交的专利费很少。并且最重要的是苹果手机的硬件生产线也是有苹果自己把控,兼容性很好,研发带来的问题也少。


相比google的Android就不一样了,Android手机有多个厂商生产,用的CPU也各式各样,虽然可以都宣称支持ARM规范和NEON技术,但是不同的厂家的手机的实现不同,其上对Neon支持的程度也不一样,而且,Android手机操作系统中的多媒体即使使用了Neon技术,也存在一个JAVA封装(JNI封装)和选型的问题,不像苹果那样是封闭的,看到这里大家也就明白了为什么Android手机早期流程性,用户体验不如苹果了,这个原因是很大的一个原因,当然也有其他原因如设计。封闭和开放的体系结构在Android和Apple的身上看到了太明显了。

03-19
### 关于ARM NEON指令集 NEON 是一种 SIMD (Single Instruction Multiple Data) 指令集,专为 ARM 架构设计。它能够显著提升多媒体和信号处理应用程序的性能,例如图像处理、音频解码以及视频编码等场景[^1]。 #### NEON 的基本概念 NEON 提供了一组专门用于并行计算的寄存器和指令集合。这些寄存器通常被划分为多个 64 位或 128 位宽的数据单元,允许一次加载多个数据项并对它们同时执行相同的运算。这种机制被称为向量化(vectorization)[^5]。 #### 编程模型 为了充分利用 NEON 的功能,在开发过程中可以通过以下几种方式实现: - **汇编语言**:直接编写 NEON 汇编代码来控制硬件行为。 - **C/C++ 内联汇编**:通过 GCC 或 Clang 支持的扩展语法嵌入 NEON 指令到高级语言中。 - **intrinsics 函数**:这是最常用的方法之一,利用编译器提供的内在函数接口调用底层 NEON 功能而无需手动写汇编代码[^4]。 #### 示例代码展示 以下是基于 intrinsics 方法的一个简单例子,演示如何使用 NEON 加速两个浮点数组相加的过程: ```c #include <arm_neon.h> #include <stdio.h> void neon_add(float *a, float *b, float *result, int n) { int i; for(i=0;i<n/4*4;i+=4){ // 将四个连续的float装载进一个128bit NEON register里 float32x4_t va = vld1q_f32(&a[i]); float32x4_t vb = vld1q_f32(&b[i]); // 执行逐元素加法 float32x4_t vc = vaddq_f32(va,vb); // 存储回内存 vst1q_f32(&result[i],vc); } } int main(){ const int N = 16; // 假设长度能整除4以便简化循环逻辑 float a[N]={1.,2.,...}; // 初始化输入数组A float b[N]={3.,4.,...}; // 初始化输入数组B float result[N]; neon_add(a,b,result,N); printf("Result:\n"); for(int j=0;j<N;++j){printf("%f ",result[j]);} return 0; } ``` 此段代码展示了如何定义 `neon_add` 函数来进行批量浮点数加法操作,并且包含了必要的头文件 `<arm_neon.h>` 来访问 NEON intrinsic 函数[^2]。 ### 总结 上述内容涵盖了 NEON 指令的基础理论及其实际应用方法。对于希望提高其算法效率特别是涉及大量数值计算的应用来说,学习掌握 NEON 技术是非常有价值的[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值