【问题标题】:x64 much faster than x86 in Windows 7 64-bit, why? [duplicate]x64 在 Windows 7 64 位中比 x86 快得多,为什么? [复制]
【发布时间】:2014-07-31 13:36:46
【问题描述】:

我想创建一个非常基本的应用程序来测试 64 位和 32 位的性能,看看哪个在我的计算机上运行得最好。 令我惊讶的是,我发现 x64 比 x86 快大约 3 倍。 我使用为发布而编译的 VS 2012 Ultimate 并作为独立应用程序运行而无需调试。 这是一个带有一个按钮和 2 个文本框的 WinForm 应用程序。 在 x64 版本中完成大约需要 120 毫秒,而 x86 构建大约需要 350 毫秒。 另外,如果我将数据类型从 int 更改为 Int64,那么两个代码路径都会慢 3 倍左右。

我知道 x64 在 64 位 Windows 上本机运行,而 32 位是通过 WoW 转换的,但在线比较表明,在 64 上运行 32 位并没有显着的性能损失,除非它使用的是我没有的安腾 CPU。

另一种可能性是 VS2012 编译器针对 x64 进行了更多优化,但与通用 VS 优化相比,3 倍的性能差异合理吗?

无论哪种方式,似乎我最好尽可能在我的机器上编译到 x64。 谁能给我任何 x86 可能更好的简单案例?

这是我的测试代码。

    DateTime startTime;
    DateTime stopTime;
    int waitValue;

    private void button1_Click(object sender, EventArgs e)
    {
        string startText = textBox1.Text;
        int value;
        if (int.TryParse(startText, out value))
        {
            waitValue = value - 1;
        }
        else
        {
            value = 1000000;
            waitValue = value - 1;
            textBox1.Text = value.ToString();
        }

        startTime = DateTime.Now;
        for (int ii = 0; ii < value; ii++)
        {
            shortProcess(ii);
        }
    }

    private int shortProcess(int value)
    {
        int startValue = value;
        int useVal = startValue;
        for (int ii = 0; ii < 1000; ii++)
        {
            useVal = ii;
        }
        useVal = startValue;
        checkValue(useVal);
        return useVal;
    }

    private void checkValue(int value)
    {
        if (value >= waitValue)
        {
            stopTime = DateTime.Now;
            //textBox2.Text = (stopTime.Ticks - startTime.Ticks).ToString();
            textBox2.Text = (stopTime.Subtract(startTime).TotalMilliseconds).ToString();
        }
    }

【问题讨论】:

  • 只是一个评论-据我所知,如果您在 64 位版本的 Windows 下运行 64 位应用程序,那是“本机”,但如果您从相同版本的 Windows 运行 32 位应用程序,它必须翻译,以便 64 位架构可以正确读取,这可能不会影响您的代码,只是认为值得一提
  • “我想知道这些结果是否是典型的,您是否可以发布您的结果” - 我们不是测试平台社区,您不太可能会被大量样本数据淹没。此外,您还需要了解处理器、操作系统、配置等等。此外,您的示例代码也不适用于基准测试,您可能想检查您是否真的只测试一件事(您不是)。
  • 很有可能您看到的是 x64 JIT 优化器优于 x86 JIT 优化器的结果(至少在这个人工测试用例中)。如果您edited 要求解释,而不是尝试进行投票,这可能是一个可以接受的问题。
  • 我按照建议将代码编辑为更多问题。我看过其他帖子和其他一些帖子,但每个帖子都非常笼统,没有任何可测试的结论。我也不知道这是否仅限于我的机器或仅适用于 VS 2012,这就是为什么我正在寻找确认或任何我可以做的事情来改进我的测试。

标签: c# visual-studio-2012 performance-testing


【解决方案1】:

这里已经回答了一个非常相似的问题:Why is this faster on 64 bit than 32 bit?

那个测试更复杂,需要更多的数学运算,但结果与我的相似,甚至更极端,这意味着 x64 是要走的路。

【讨论】:

  • 更正:x64 可以是要走的路。这不是总是性能上的胜利。与任何工程决策一样,需要权衡取舍。例如,指针在 64 位世界中更大,这意味着更大的内存占用。当然,天花板更高,但压力也更高。更不用说 cache,它的大小相同,因此填充速度要快得多。当您使用 64 位宽的类型时,x64 几乎总是更快,但普通应用程序很少需要这么多位。只有 32 位,性能差异很小。您必须测试才能确定。
猜你喜欢
  • 1970-01-01
  • 2018-03-23
  • 2020-11-11
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
相关资源
最近更新 更多