c6000系列的C代码优化(六)

2019-07-30 16:08发布

十一、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 位数的特性,并利用一个指令周期能读取两个数据的特点。   

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
huangfeng33
2019-07-30 18:33
十二、set_zero 程序的优化  
       1、源代码:
Word16 i;  
        for (i = 0; i < L; i++)   
    {  
       x = 0;  
   }  
2、改编代码:  
       (1)数组长度能被 2 整除  
  Word32 i;  
        int *x1 = (int *)&x[0];   
        for (i = 0; i < L/2; i++)   
    {  
        *x1++ = 0;  
    }  
(2)数组长度能被 4 整除  
Word32 i;  
        int *x1 = (int *)&x[0];   
        int *x2 = (int *)&x[2];   
        for (i = 0; i < L/4; i++)   
    {  
        *x1 = 0;  
        *x2 = 0;  
        x1++;  
        x2++;  
        x1++;  
        x2++;  
    }  
3、优化方法说明:  
       把一次循环为一个 word16 的数赋值改为一次为 2个或 4 个 word16 的数赋值。  
       4、技巧:  
       充分利用C6XX一次读取32位数的特点, 并利用一个指令周期能读取两个数据的特点。   

一周热门 更多>