十一、copy程序的优化
1、源代码:
Word16 i;
for (i = 0; i < L; i++)
{
y = x;
}
2、改编代码:
(1)要求数组长度能被 2 整除
Word32 i;
Word32 temp;
int *p1 = (int *)&x[0];
int *q1 = (int *)&y[0];
for (i = 0; i < L/2; i++)
{
temp = *p1++;
*q1++ = temp;
}
(2)要求数组长度能被 4 整除
Word32 i;
Word32 temp1, temp2;
Word32 *pin1, *pin2, *pout1, *pout2;
pin1 = (Word32 *)&x[0];
pin2 = (Word32 *)&x[2];
pout1= (Word32 *)&y[0];
pout2= (Word32 *)&y[2];
for (i = 0; i < L/4; i++)
{
temp1 = *pin1;
temp2 = *pin2;
pin1+=2;
pin2+=2;
*pout1= temp1;
*pout2= temp2;
pout1+=2;
pout2+=2;
}
3、优化方法说明:
把一次循 拷贝一个 word16 的数改为一次循环拷贝 2 个 word16 或4 个 word16 的数。
4、技巧:
充分利用 c6xx 一次读取32 位数的特性,并利用一个指令周期能读取两个数据的特点。
|