我的程序很简单,如下,当使用O2,O3优化级别时计算结果有误,使用O1时就没问题,请问下是什么原因呢?该怎么解决?
//***************************************************************************************************************************
float DSPF_dp_sp_dotprod( float * x, float * y, int nx)
{
int i;
float sum = 0;
_nassert(nx >= 0);
_nassert(nx % 4 == 0);
for(i=0;i<nx;i++)
{
sum += x[i]*y[i];
}
return (sum);
}
float a[600],b[600];
volatile float c1=0,c2=0,yt1,yt2,yt;
void main()
{
int i;
for(i=0;i<600;i++)
{
a[i]=1.0/(i+1.0);
b[i]=i*2.1;
}
c1=DSPF_dp_sp_dot(a,b,600);
}
xu shi:
补充下,使用的平台是DSP C6748,已经是最新版本的编译器7.4.5
kooking:
请问有什么错误提示没,一般来说o3有可能引起错误,o2应该还好,另外,可以把里面的循环去了看看还会不会有错
xu shi:
回复 kooking:
编译并没有报错,只是最后的计算结果c1出错了,去掉里面的循环对不对都已经没有意义了,而且这个函数DSPF_dp_sp_dotprod是从TI官方提供的C674X DSPLIB里面直接拿出来没改过的