gpt4 book ai didi

c# - x64 与 x86 性能考虑因素.Net

转载 作者:IT王子 更新时间:2023-10-29 04:38:51 25 4
gpt4 key购买 nike

我试图了解在 x64 和 x86 中运行 native C#/.Net 4.0 应用程序时存在哪些性能差异。我理解内存注意事项(x64 寻址所有内存,x86 限制为 2/4gb),以及 x64 应用程序将使用更多内存(所有指针都是 8 字节而不是 4 字节)这一事实。据我所知,这些都不会影响时钟指令的任何时钟,因为 x64 管道足够宽,可以处理更宽的指令。

由于每个线程的堆栈大小较大,上下文切换是否会影响性能?在评估这两者时,我遗漏了哪些性能考虑因素?

最佳答案

Joe White 已经为您提供了一些很好的理由说明您的应用程序可能会变慢。更大的指针(因此在 .NET 中扩展为更大的引用)将占用更多的内存空间,这意味着更少的代码和数据将适合缓存。

但是,有很多您可能想要使用 x64 的有益原因:<​​/p>

  • AMD64 调用约定在 x64 中默认使用,并且比标准 cdecl 或 stdcall 快很多,许多参数在寄存器中传递并使用 XMM 寄存器进行浮点。

  • CLR 将发出用于处理 64 位浮点运算的标量 SSE 指令。在 x86 中,它转而使用标准的 x87 FP 堆栈,这要慢得多,尤其是对于诸如在 int 和 float 之间转换之类的事情。

  • 拥有更多的寄存器意味着 JIT 由于寄存器压力而不得不溢出它们的可能性要小得多。对于快速内部循环,溢出寄存器的代价可能相当高,尤其是当函数被内联并在那里引入额外的寄存器压力时。

  • 任何对 64 位整数的操作都可以通过将其放入单个寄存器而不是分成两个独立的部分而受益匪浅。

  • 这可能是显而易见的,但是如果您的应用程序是内存密集型的,那么您的进程可以访问的额外内存可能会非常有用,即使它没有达到理论限制。碎片可能会导致您在达到该标记之前很久就遇到“内存不足”的情况。

  • 在某些情况下,x64 中的 RIP 相对寻址可以 reduce the size of an executable image .尽管这并不真正直接适用于 .NET 应用程序,但它可以对可能必须重新定位的 DLL 的共享产生影响。我很想知道是否有人有关于 .NET 和托管应用程序的任何具体信息。

除此之外,x64 版本的 .NET 运行时似乎(至少在当前版本中)比 x86 等效版本执行更多优化。内联和内存对齐之类的事情似乎更频繁地发生。事实上,前一段时间有一个错误阻止了任何接受或返回值类型的方法的内联;我记得看到它在 x64 版本而不是 x86 版本中修复。

实际上,您能够判断哪种方式更适合您的应用程序的唯一方法是对两种架构进行分析和测试并比较实际结果。但是,我个人只是尽可能使用 Any CPU,并避免任何本质上依赖于体系结构的东西。这使得构建和部署变得容易,并且希望在大多数用户开始完全切换到 x64 时成为 future 的证明。

关于c# - x64 与 x86 性能考虑因素.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512733/

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