arm's multiply(arm的乘)之二
今天上午在我的strongarm上做了次实验
环境是
strongarm 206MHZ
ppc2002
编写了一个程序
int res;
void func()
{
for(int loop=0;loop<1000;loop++)
for(int lop=0;lop<1000;lop++)
for(int lp=0;lp<1000;lp++)
res = lp*105
}
wince3.0的计时器据说有1ms的精度
用它测量的这段函数的执行时间如下
共6次,单位 ms
78736
76742<===这次很奇怪,不知道是不是我记录错误
78717
78733
78724
78721
可以得出
res = lp*105 这条指令大概用了79ns
另外上一篇文章中说evc3没有对乘法优化是错误的,我把105改成10005后运行时间几乎不变,
说明realse版本已经对乘法优化过了。从反汇编后的代码也可以看出,release版没有mul指令,
而debug版有mul指令。
而我把105改成10005后,发现反汇编代码居然变化非常大!奇怪!
有点沮丧,evc优化了我还能做什么?
有个问题是,如何能精确得出此指令的运行时间?79ns里包含了内存访问时间