【发布时间】:2012-05-06 06:31:01
【问题描述】:
我用 C++ 编写了这个小程序来检查 CPU 负载情况。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
int main()
{
double x = 1;
int t1 = GetTickCount();
srand(10000);
for (unsigned long i = 0; i < 10000000; i++)
{
int r = rand();
double l = sqrt((double)r);
x *= log(l/3) * pow(x, r);
}
int t2 = GetTickCount();
printf("Time: %d\r\n", t2-t1);
getchar();
}
我在 win7 x64 上为 x86 和 x64 编译了它。
出于某种原因,当我运行 x64 版本时,它在大约 3 秒内完成了运行
但是当我尝试使用 x86 版本时,它花了 48 (!!!) 秒。
我尝试了很多次,总是得到相似的结果。
什么可能导致这种差异?
【问题讨论】:
-
什么编译器?以及哪些优化?
-
我可能还会在最后打印
x,以确保优化器不会决定它可以丢弃x *=计算行。 -
我正在使用带有“Microsoft Visual C++ 2010 Service Pack 1:Windows SDK 7.1 的编译器更新”的 vs2010 express。我在调试模式下编译它,没有进行任何优化。
-
您确定在这两种情况下都使用了 Release 版本吗?
-
当你在没有优化的调试模式下编译时,你已经告诉编译器你对代码的性能不感兴趣。那为什么要测量呢?
标签: c++ performance windows-7 x86 64-bit