Neon简介

Neon简介

简介

Arm Neon是Arm Cortex-A和Cortex-R系列处理器的一种高级SIMD架构扩展

Neon通过定义一组用于操作64bit D,doubleword的寄存器和128bit Q,quadword的寄存器的指令来扩展SIMD的概念

Neon寄存器组由32个64bit寄存器,这些寄存器可以视为以下两种寄存器组来使用

  1. 16个128bit quadword寄存器,Q0-Q15
  2. 32个64bit doubleword寄存器,D0-D31

Neon可以通过以下方式来使用

  1. 汇编指令
  2. 编译器优化
  3. Neon instrinsics

Neon Intrinsics

Neon instrinsics提供了一种通过写c语言来使用neon的方式

两个4维float类型向量相加的例子

1
2
3
4
5
6
7
void add(float* v1, float* v2, float* v3){
float32x4x3_t cache;
cache.val[0] = vld1q_f32(v1);
cache.val[1] = vld1q_f32(v2);
cache.val[2] = vaddq_f32(cache.val[0], cache.val[1]);
vst1q_f32(v3, cache.val[2]);
}

参考资料

  1. https://developer.arm.com/architectures/instruction-sets/simd-isas/neon
  2. 102159_0400_01_CodingForNeon.pdf
  3. DEN0018A_neon_programmers_guide.pdf