为什么相同的程序在旧计算机上运行得更快?

计算科学 效率
2021-12-18 17:23:01

我有同样的单线程问题,这就像一个简单的

#include<stdlib.h>
#include<iostream>
#include<stdio.h>
#include<time.h>
//#include<ctime.h>

int main(){

clock_t start=clock();
for (int i=0;i<100 000 000; i++){
//do something here
}

double duration = (clock()-start)/(double)CLOCKS_PER_SEC;
cout<<endl<<"Total consumption time is : "<<duration<<"seconds "<<endl;
// or use 
// printf("\n Total consumption time is : %lf seconds",duration);
system("pause");

return 0;
}

有时当我在不同的计算机上运行它们时:旧的一台装有 XP OS 和 Pentium V CPU,新的一台装有 Win7 OS x86 和 i7 CPU。

很奇怪,我发现旧电脑运行相同程序的速度明显更快。然后我发现它对于其他类似程序是通用的。

为什么我会得到这样的结果?是因为XP操作系统比Win7快吗?

2个回答

影响程序运行速度的变量太多了,仅从您的描述中无法分辨。例如:

  • 其他程序是否同时运行?
  • 你的处理器的时钟速度是多少?
  • 程序是如何编译的,它针对哪个处理器进行了优化?
  • 程序开始运行多长时间 - 例如,它是否在计时器的精度范围内?
  • 循环是否足够简单,编译器可以将其优化掉?
  • 您是在计时整个程序执行(包括加载它),还是仅计时循环的实际运行时间?
  • 如果您对整个程序执行(包括加载)进行计时,程序链接到的共享库集有何不同?

还有许多其他问题无法笼统地回答您的问题。

较重的操作系统可能足以弥补较快的 CPU。如果您想要一个真正的比较,您将在两台计算机上使用相同的操作系统运行测试。

此外,根据您在该循环中实际执行的操作,程序可能会在内存读取/写入上花费比浮点操作更多的时间,在这种情况下,性能更多地取决于缓存而不是处理器时钟速度。