TI中文支持网
TI专业的中文技术问题搜集分享网站

c6748的代码优化

float a=1.0,b=2.0;
int i;
while(1)
{
for(i=0;i<100000;i++)
{
a=a*b;

}
GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH); // D4 亮
for(i=0;i<100000;i++)
{ a=a*b;

}

GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW); // D4 灭

如上代码,我想最大的发挥6748的运算速度,用测10W次的乘法为例,现在的情况是我对这段初始代码进行了改变:

float a=1.0,b=2.0,c=3.0,d=4.0,e=5.0;
int i;
while(1)
{
for(i=0;i<20000;i++)
{
a=a*b;

b=b*c;

c=c*d;

d=d*e;

e=a*c;

}

GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_HIGH); // D4 亮
for(i=0;i<20000;i++)
{ a=a*b;

b=b*c;

c=c*d;

d=d*e;

e=a*c;

}

GPIOPinWrite(SOC_GPIO_0_REGS, 110, GPIO_PIN_LOW); // D4 灭

}

}

依然测10W次,对比之前的代码,可以优化到-O1,-pm,-mt,整体运算时间大幅度减少,每个b=b*c运算耗时6 cpu cycle(但是有个别步骤耗时30cpu cyle ,我判断是for循环导致流水线断开,并且逐渐回复的过程)。但是看了datasheet里面,浮点运算速度是2748 MFLOPS,主频456Mhz,乘法计数器写着2sp X sp=sp per clock,并且DSP的乘法指令周期汇编手册上写了在1个cpu cycle。那么我现在如何提升每个b=b*c运算的速度尽量到1个cpu cycle呢?或者我该如何修改代码,才可以进行-O2 -O3的优化呢?

Shine:

看一下下面的wiki网站是否有用。http://processors.wiki.ti.com/index.php/Floating_Point_Optimization 

赞(0)
未经允许不得转载:TI中文支持网 » c6748的代码优化
分享到: 更多 (0)