一个关于指令执行时间的问题(整形或者浮点运算)
不知道发这里合适不,先发吧。大家先看这个程序
int main() {
int i;
int sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8;
sum1 = 0;
sum2 = 0;
sum3 = 0;
sum4 = 0;
sum5 = 0;
sum6 = 0;
sum7 = 0;
sum8 = 0;
for (i = 0; i < ITER; i++) {
sum1 = sum1 + 2;
sum2 = sum2 + 2;
sum3 = sum3 + 2;
sum4 = sum4 + 2;
sum5 = sum5 + 2;
sum6 = sum6 + 2;
//sum7 = sum7 + 2;
//sum8 = sum8 + 2;
}
printf("%d\n", sum1);
return 0;
}
需要说明是编译指令gcc xxx.c -DITER=1000000000 -O0 -o xxx,无任何优化,测试平台ubuntu7.10,时间测试使用time命令。
大家可以看到,for循环中有8条加指令,我现在希望在某个硬件平台上测试,在操作指令数的递增情况下,程序耗费时间是一个什么关系。下面是我在IBM T43上的测试结果
1(就是for中只有一条 sum1 = sum1 + 2;下同):4.xx s
2 4.xx s
3 6.xx s
4 6.xx s
5 8.xx s
6 6.xx s
7 7.xx s
8 9.xx s
OK,我在别的平台上也测试过,具体秒数肯定不一样,但是变化都是毫无规律,大小不一。
我将程序转换成汇编看过,每多一条指令就多一条对应的addl指令,其他没有任何变化
所以,我的问题是,这个无规律执行时间是不是和CPU内部架构,比如加法器数量,分配机制之类的有关?还是可能time命令测试不一定准备?for循环中的操作都是无依赖操作。但是不管怎么和加法器有关,我也不理解为什么有时候操作指令多了,反而时间还减少了?浮点数结果更甚,我就不贴上来了。
希望明白的朋友赐教,多谢。