最近要考核一些代码运行时间,无意中发现CCS3.3与CCS5.4相同的代码执行时间不同!!!
其中sin、tan、atan、浮点数除法有较大差异。以下为具体代码,每行代码后的注释为RAM仿真得到的时钟周期,左侧为CCS3.3、右侧为CCS5.4。
求指教,多谢多谢!!!
void main(void)
{
unsigned int i=0;
unsigned int a=0,b=0,c=0,d=0;
unsigned int array[10]={1,2,3,4,5,6,7,8,9,10};
float farray[10]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
float aa=0.0,bb=0.0,cc=0.0,dd=0.0;
InitSysCtrl();
for(;;)
{
a=1; //1
a=1.1; //1
a++; //1,3
b=1+2; //1,3
c=a+b; //3,4
c=a-b; //3,5
c=a*b; //3,4
c=a/b; //19,21
c=sqrt(a); //76,53
c=sqrt(2); //76,52
c=sin(a); //73,125
c=asin(a); //42,62
c=cos(a); //73,73
c=acos(a); //44,62
c=tan(a); //303,153
c=atan(a); //782,94 /***************/
c=a>>1; //3,5
c=a>>8; //3,4
c=a<<1; //2,3
c=a<<8; //2,4
c=a>b; //5,8
c= a==b;//5,7
c=abs(a); //4,5
aa=1; //2,5
aa=1.1; //2,5
aa++; //4,8
bb=1+2; //2,4
cc=aa+bb; //5,9
cc=aa-bb; //5,10
cc=aa*bb; //5,9
cc=aa/bb; //233,39 /***************/
cc=sqrt(aa);//72,47
cc=sqrt(2); //72,47
cc=sin(aa); //69,67
cc=sin(aa+2.0/3.0*PI); //72,73
cc=asin(aa);//38,57
cc=cos(aa); //69,67
cc=cos(aa+2.0/3.0*PI); //72,73
cc=acos(aa);//40,57
cc=tan(aa); //299,147
cc=atan(aa);//778,89
cc=a>>1; //11,18
cc=a>>8; //11,18
cc=a<<1; //10,17
cc=a<<8; //10,17
cc=a>bb; //16,27
cc= aa==bb; //15,27
cc=fabs(aa);//3,6
}
}
Hardy Hu:
你好!
运行时间的区别,和编译器的版本有一定的关系,CCS5.4里面的编译器版本整体来说比起CCS3.3是有升级和优化的。
如果你看disassembly会发现编译出来的汇编代码都不一样。
最近要考核一些代码运行时间,无意中发现CCS3.3与CCS5.4相同的代码执行时间不同!!!
其中sin、tan、atan、浮点数除法有较大差异。以下为具体代码,每行代码后的注释为RAM仿真得到的时钟周期,左侧为CCS3.3、右侧为CCS5.4。
求指教,多谢多谢!!!
void main(void)
{
unsigned int i=0;
unsigned int a=0,b=0,c=0,d=0;
unsigned int array[10]={1,2,3,4,5,6,7,8,9,10};
float farray[10]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
float aa=0.0,bb=0.0,cc=0.0,dd=0.0;
InitSysCtrl();
for(;;)
{
a=1; //1
a=1.1; //1
a++; //1,3
b=1+2; //1,3
c=a+b; //3,4
c=a-b; //3,5
c=a*b; //3,4
c=a/b; //19,21
c=sqrt(a); //76,53
c=sqrt(2); //76,52
c=sin(a); //73,125
c=asin(a); //42,62
c=cos(a); //73,73
c=acos(a); //44,62
c=tan(a); //303,153
c=atan(a); //782,94 /***************/
c=a>>1; //3,5
c=a>>8; //3,4
c=a<<1; //2,3
c=a<<8; //2,4
c=a>b; //5,8
c= a==b;//5,7
c=abs(a); //4,5
aa=1; //2,5
aa=1.1; //2,5
aa++; //4,8
bb=1+2; //2,4
cc=aa+bb; //5,9
cc=aa-bb; //5,10
cc=aa*bb; //5,9
cc=aa/bb; //233,39 /***************/
cc=sqrt(aa);//72,47
cc=sqrt(2); //72,47
cc=sin(aa); //69,67
cc=sin(aa+2.0/3.0*PI); //72,73
cc=asin(aa);//38,57
cc=cos(aa); //69,67
cc=cos(aa+2.0/3.0*PI); //72,73
cc=acos(aa);//40,57
cc=tan(aa); //299,147
cc=atan(aa);//778,89
cc=a>>1; //11,18
cc=a>>8; //11,18
cc=a<<1; //10,17
cc=a<<8; //10,17
cc=a>bb; //16,27
cc= aa==bb; //15,27
cc=fabs(aa);//3,6
}
}
gzc0319:
回复 Hardy Hu:
你好,多谢回复
还有一个问题就是:
根据我们测到的时间,发现新版本对于大部分运算是时间变长的,只有那几个特殊的原来需要很多时钟周期的运算变短了,这样整体下来很难说哪个版本CCS运行时间更快。
对于一个公司来说,同样的程序就会搞出不同的运行时间,这怎么办?
最近要考核一些代码运行时间,无意中发现CCS3.3与CCS5.4相同的代码执行时间不同!!!
其中sin、tan、atan、浮点数除法有较大差异。以下为具体代码,每行代码后的注释为RAM仿真得到的时钟周期,左侧为CCS3.3、右侧为CCS5.4。
求指教,多谢多谢!!!
void main(void)
{
unsigned int i=0;
unsigned int a=0,b=0,c=0,d=0;
unsigned int array[10]={1,2,3,4,5,6,7,8,9,10};
float farray[10]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
float aa=0.0,bb=0.0,cc=0.0,dd=0.0;
InitSysCtrl();
for(;;)
{
a=1; //1
a=1.1; //1
a++; //1,3
b=1+2; //1,3
c=a+b; //3,4
c=a-b; //3,5
c=a*b; //3,4
c=a/b; //19,21
c=sqrt(a); //76,53
c=sqrt(2); //76,52
c=sin(a); //73,125
c=asin(a); //42,62
c=cos(a); //73,73
c=acos(a); //44,62
c=tan(a); //303,153
c=atan(a); //782,94 /***************/
c=a>>1; //3,5
c=a>>8; //3,4
c=a<<1; //2,3
c=a<<8; //2,4
c=a>b; //5,8
c= a==b;//5,7
c=abs(a); //4,5
aa=1; //2,5
aa=1.1; //2,5
aa++; //4,8
bb=1+2; //2,4
cc=aa+bb; //5,9
cc=aa-bb; //5,10
cc=aa*bb; //5,9
cc=aa/bb; //233,39 /***************/
cc=sqrt(aa);//72,47
cc=sqrt(2); //72,47
cc=sin(aa); //69,67
cc=sin(aa+2.0/3.0*PI); //72,73
cc=asin(aa);//38,57
cc=cos(aa); //69,67
cc=cos(aa+2.0/3.0*PI); //72,73
cc=acos(aa);//40,57
cc=tan(aa); //299,147
cc=atan(aa);//778,89
cc=a>>1; //11,18
cc=a>>8; //11,18
cc=a<<1; //10,17
cc=a<<8; //10,17
cc=a>bb; //16,27
cc= aa==bb; //15,27
cc=fabs(aa);//3,6
}
}
Hardy Hu:
回复 gzc0319:
你好!
你是用的CCS3.3与CCS5.4里面的C2000 compiler的版本号能发给我吗?
最近要考核一些代码运行时间,无意中发现CCS3.3与CCS5.4相同的代码执行时间不同!!!
其中sin、tan、atan、浮点数除法有较大差异。以下为具体代码,每行代码后的注释为RAM仿真得到的时钟周期,左侧为CCS3.3、右侧为CCS5.4。
求指教,多谢多谢!!!
void main(void)
{
unsigned int i=0;
unsigned int a=0,b=0,c=0,d=0;
unsigned int array[10]={1,2,3,4,5,6,7,8,9,10};
float farray[10]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0};
float aa=0.0,bb=0.0,cc=0.0,dd=0.0;
InitSysCtrl();
for(;;)
{
a=1; //1
a=1.1; //1
a++; //1,3
b=1+2; //1,3
c=a+b; //3,4
c=a-b; //3,5
c=a*b; //3,4
c=a/b; //19,21
c=sqrt(a); //76,53
c=sqrt(2); //76,52
c=sin(a); //73,125
c=asin(a); //42,62
c=cos(a); //73,73
c=acos(a); //44,62
c=tan(a); //303,153
c=atan(a); //782,94 /***************/
c=a>>1; //3,5
c=a>>8; //3,4
c=a<<1; //2,3
c=a<<8; //2,4
c=a>b; //5,8
c= a==b;//5,7
c=abs(a); //4,5
aa=1; //2,5
aa=1.1; //2,5
aa++; //4,8
bb=1+2; //2,4
cc=aa+bb; //5,9
cc=aa-bb; //5,10
cc=aa*bb; //5,9
cc=aa/bb; //233,39 /***************/
cc=sqrt(aa);//72,47
cc=sqrt(2); //72,47
cc=sin(aa); //69,67
cc=sin(aa+2.0/3.0*PI); //72,73
cc=asin(aa);//38,57
cc=cos(aa); //69,67
cc=cos(aa+2.0/3.0*PI); //72,73
cc=acos(aa);//40,57
cc=tan(aa); //299,147
cc=atan(aa);//778,89
cc=a>>1; //11,18
cc=a>>8; //11,18
cc=a<<1; //10,17
cc=a<<8; //10,17
cc=a>bb; //16,27
cc= aa==bb; //15,27
cc=fabs(aa);//3,6
}
}
gzc0319:
回复 Hardy Hu:
你好
CCS5.4对应 TIv6.1.3
CCS3.3对应 V5.0.2,不知道是不是这个