gpt4 book ai didi

c++ - 试除法代码在 Windows 上运行 32 位比在 Linux 上运行 64 位快 2 倍

转载 作者:IT老高 更新时间:2023-10-28 23:18:22 24 4
gpt4 key购买 nike

我有一段代码在 Windows 上的运行速度比在 linux 上快 2 倍。以下是我测量的时间:

g++ -Ofast -march=native -m64
29.1123
g++ -Ofast -march=native
29.0497
clang++ -Ofast -march=native
28.9192
visual studio 2013 Debug 32b
13.8802
visual studio 2013 Release 32b
12.5569

好像真的差别太大了。

代码如下:

#include <iostream>
#include <map>
#include <chrono>
static std::size_t Count = 1000;

static std::size_t MaxNum = 50000000;

bool IsPrime(std::size_t num)
{
for (std::size_t i = 2; i < num; i++)
{
if (num % i == 0)
return false;
}
return true;
}

int main()
{
auto start = std::chrono::steady_clock::now();
std::map<std::size_t, bool> value;
for (std::size_t i = 0; i < Count; i++)
{
value[i] = IsPrime(i);
value[MaxNum - i] = IsPrime(MaxNum - i);
}
std::chrono::duration<double> serialTime = std::chrono::steady_clock::now() - start;
std::cout << "Serial time = " << serialTime.count() << std::endl;

system("pause");
return 0;
}

所有这些都是在使用 windows 8 和 linux 3.19.5(gcc 4.9.2,clang 3.5.0)的同一台机器上测量的。 linux和windows都是64位的。

这可能是什么原因?一些调度程序问题?

最佳答案

您没有说 windows/linux 操作系统是 32 位还是 64 位。

在 64 位 linux 机器上,如果将 size_t 更改为 int,您会发现 linux 上的执行时间下降到与 windows 类似的值。

size_t 在 win32 上是 int32,在 win64 上是 int64。

编辑:刚刚看到你的 windows 反汇编。

您的 Windows 操作系统是 32 位版本(或者至少您已经编译为 32 位)。

关于c++ - 试除法代码在 Windows 上运行 32 位比在 Linux 上运行 64 位快 2 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983453/

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