本帖最后由 TI_MCU 于 2011-11-25 11:25 编辑
经常有朋友在看到M4的特性后会问到底什么是SIMD,简单讲,SIMD就是单指令多数据(Single Instruction Multiple Data)的缩写。这套东西最早是并行计算机使用的,现在也是DSP中的重要特性。在M4中,SIMD作为M4的DSP特性的一部分,支持了8bit、16bit的SIMD。
在编程的时候,大家经常会用到诸如下面的代码:
char input_A[N] = {1, 2, 3, 4, ...};
char input_B[N] = {1, 2, 3, 4, ...};
char result[N];
for(int i = 0; i < N; i++)
{
result = input_A * input_B;
}
CPU会在寄存器中存储input_A、input_B、result,每次循环,分别计算result[0]、result[1]、result[2]、result[3]...的结果。
但在M4中,因为寄存器是32bit的,而只用来进行8bit的计算,显然有些浪费。当采用SIMD后,寄存器会将4个8Bit数据放入32bit寄存器,一次完成4个8bit数(32bit)计算。也就是一次计算就可以完成result[0]、result[1]、result[2]、result[3]四个结果的输出。下一个循环就可以直接得到result[4]、result[5]、result[6]、result[7]的结果。这就是8bit的SIMD。
SIMD的神奇功效就是其并行计算的能力,在8bit计算中,四个循环可以合为一个,最多可以减少75%的计算时间。而16bit计算也是同样地道理,两个循环的事情,一个循环可以完成,最多可以减少50%的计算时间。 |