gpt4 book ai didi

.net - SHA256Managed 在 x64 构建中的速度是原来的两倍——这是典型的吗?

转载 作者:行者123 更新时间:2023-12-04 08:20:22 25 4
gpt4 key购买 nike

据说 .NET 应用程序可以在 x86 模式下编译,因为几乎 x64 提供的唯一好处是更大的虚拟地址空间,从而允许应用程序分配超过 2(或 3)GB 的内存内存,或内存映射整个非常大的文件。

但是,一个非常简单的测试表明,在 64 位机器上,SHA256Managed 对 10 MB 字节数组进行哈希处理时,如果应用程序是 x86,则速度几乎是 x64 的两倍。因此,任何执行大量 SHA256 哈希运算的应用程序都可以从“任何 CPU”或为两个平台单独构建中获益。

我的问题是:这是 .NET 的典型结果吗?在 64 位操作系统上以 64 位模式运行其他计算量大的任务是否同样受益?当然,我可以只测试每个特定的计算,但我希望有一个整体的“经验法则”,例如:

  • 是的,任何做大量整数运算的事情都会快得多
  • 是的,所有数字计算都快得多(包括 double /小数)
  • 不,这是一个罕见的异常(exception),大多数算法在两种模式下的运行速度大致相同

最佳答案

首先,很高兴您分享了测试结果。

答案:视情况而定。

64 位与 32 位很多不同,这是一个完整的单独讨论。你无法从任何知道他们在谈论什么的人那里得到明确的答案的原因是有些事情更快,有些事情更慢。但一些应用程序和某些算法显然确实从中受益。

64 位可以寻址更多,同时移动更大的数据 block ,有更多的寄存器,使共享库更快,等等。但它也改变了中断的工作方式(iirc),有更多的指令(​​虽然一些旧的被删除了),在较小的数据 block 上效率较低,堆栈和指针占用更多空间等。

如果您对 CPU 能力有很高的要求,那么企业购买更强大的 CPU 通常比在这样的水平上调整程序更便宜……遗憾的是!但是要确定某种算法在任何一个平台上的效率,您都必须对其进行测试。

在机器代码中,您添加的每个堆栈项都占用两倍的内存,因此在 L1、L2 和内存之间移动的数据量也是两倍。但是对于每次计算和内存读/写,您每次传递可以处理更多数据(大量数据的吞吐量更高)。因此,这取决于您传递的数据量以及您进行的算术数量和类型。然后考虑与仅移动 4k 页的操作系统相比速度的增益/损失,并且存储的每个指针占用高值(value)的 L1 和 L2 缓存的两倍...... + 我不记得的一切。

我的观点是,问题很快就会变得复杂,而答案将非常针对问题。

我想说将 .Net 应用程序强制为 32 位的唯一原因是它引用 32 位库。在代码执行之前无法确定这种依赖性,因此会导致异常。

关于.net - SHA256Managed 在 x64 构建中的速度是原来的两倍——这是典型的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819181/

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