gpt4 book ai didi

c++ - x64 性能与 x86 相比

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:12 25 4
gpt4 key购买 nike

我用 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 (!!!) 秒。
我试了很多次,总是得到相似的结果。
是什么导致了这种差异?

最佳答案

查看带有/Ox(最大优化)的汇编程序输出,x86 和 x64 构建之间的速度差异很明显:

; cl /Ox /Fa tick.cpp
; x86 Line 17: x *= log(l/3) * pow(x, r)
fld QWORD PTR _x$[esp+32]
mov eax, esi
test esi, esi
; ...

我们看到 x87 指令被用于此计算。将其与 x64 构建进行比较:

; cl /Ox /Fa tick.cpp
; x64 Line 17: x *= log(l/3) * pow(x, r)
movapd xmm1, xmm8
mov ecx, ebx
movapd xmm5, xmm0
test ebx, ebx
; ...

现在我们看到正在使用 SSE 指令。

您可以通过 /arch:SSE2 尝试修改 Visual Studio 2010 生成类似的指令,但看起来 64 位编译器生成的 好得多 更快地组装您手头的任务。

最后,如果放宽浮点模型,x86 和 x64 的性能几乎相同。

时间,不科学的 3 种最佳:

  • x86,/Ox:22704 刻
  • x64,/Ox:822 刻
  • x86,/Ox/arch:SSE2:3432 个滴答声
  • x64, /Ox/favor:INTEL64: 1014 ticks
  • x86, /Ox/arch:SSE2/fp:fast: 834 ticks

关于c++ - x64 性能与 x86 相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com