-
- 数据处理技术简介
- Single Instruction Single Data
- 数据处理技术简介
每个操作符指定要处理的单个数据源。如果要处理多个数据项,则需要多个指令。如下代码使用了4个指令完成8个寄存器相加。
add r0, r5 add r1, r6 add r2, r7 add r3, r8 |
-
- Single Instruction Multiple Data (vector mode)
每个操作符可以指定相同处理的多个数据源。如果control register的LEN值为4,在单个向量的add指令执行4个add操作:
VADD.F32 S24, S8, S16 // four operations occur // S24 = S8 +S16 // S25 = S9 +S17 // S26 = S10 +S18 // S27 = S11 +S20 |
注意:尽管只是一个指令,这4个add操作是用了4个step顺序执行的。
在ARM术语中,该技术称之为“vector float point”。
VFP扩展在ARMv5架构中引入,并且执行短的向量指令( short vector instruction)来加速浮点运算。源和目的寄存器,或者是用于标量运算的单个寄存器,或者是用于向量运算的2到8个寄存器。
-
- Single Instruction Multiple Data (packed data mode)
每个操作可以为保存着一个很大的寄存器的多个数据域指定并行执行相同的处理。
VADD.I16 Q10, Q8, Q9 // One operation adds two 64-bit registers, // but each of the four 16-bit lanes in the register is added separately. // There are no carries between the lanes |
说明:
- 一个操作完成了两个64-bit的寄存器的add操作;
- 64-bit寄存器被分成了4个16-bit的lanes,分别add。
- Lanes之间没有进位,也就是说,完全独立的。相当于4对16-bit的数相加。
如下图1-1所示:
在ARM 术语中,它被称之为先进的SIMD技术或者NEON技术。
图1-1显示了一个64-bit寄存器保存了4个16-bit值,但在NEON寄存器中,还有其它的组合如下:
- 对于一个64-bit的寄存器,可以同时执行2个32-bit,4个16-bit或8个8-bit整数值。
- 对于一个128-bit的寄存器,可以同时执行4个32-bit,8个16-bit或16个8-bit整数值。
从上面的3种数据处理的技术看,很明显看到了并行计算的优化;第2)相对于1)主要是存取的优化;第3)相对于第2)种主要是计算上的优化。