在移植应用程序时有效地利用64位架构

时间:2012-08-21 09:14:08

标签: c# .net performance 64-bit

我正在考虑将处理器密集型32位.NET 4(C#)控制台应用程序移植到64位。它是一个并行数字运算算法,运行大约五个小时。

我对性能优势有所了解,但不确定如何更改代码以充分利用64位架构。例如,我应该考虑将所有Int32类型更改为Int64等吗?

在移植到x64时,我在哪里可以找到一些全面的资源来了解优化注意事项?搜索范围主要是关于x64架构的一般信息。

4 个答案:

答案 0 :(得分:2)

没有希望你的努力会得到回报。 x64核心与x86核心的速度相同,时钟速度相同,受硅片物理学的限制。 x64核心的一个明显优势是它可以同时驱动64位,是x86核心数量的两倍。但在实践中,实际上需要该范围的现实世界问题很少。大多数整数问题都可以正常工作,范围为+/- 20亿。从你的代码中很容易看出,如果你的内部循环中有很多 long 而不是 int 变量,那么你就会领先。

x64核心的一个重要的缺点是它更快地消耗可用的缓存。这也受到芯片的限制,只有很多内存可以放在芯片上。任何指针都是大小的两倍,在32位模式下是8个字节而不是4个字节。指针用于任何对象引用。缓存在现代内核上是一个非常的大问题,与内核的速度相比,内存总线速度慢得多。 x64具有8个以上的cpu寄存器(r8到r15),这个缺点有所平衡。

净效果是32位代码通常比64位代码执行更快 。当程序因为必须在2 GB的地址空间中处理它所处理的数据而陷入困境时,您只能从64位代码中获益。换句话说,必须使用文件或内存映射文件以避免内存不足。如果您的应用受计算限制,正如您的问题中所建议的那样,您就不太可能领先。

答案 1 :(得分:0)

对于纯.NET代码,您似乎无法优化自己。 编译到任何cpu,IL编译器将优化到x64,例如额外的内存空间和几个寄存器。

有关类似讨论,请参阅How can compiling my application for 64-bit make it faster or better?

答案 2 :(得分:0)

将32位更改为64位类型本身并没有帮助。在x64上,32位操作都比64位操作快或快。不同的是64位操作比32位模式更快。因此,例如,如果您使用int32的数组,并且您也可以使用int64的数组,这是的一半,它可能会有所帮助。

答案 3 :(得分:0)

您没有提到您的应用程序是否也是内存密集型的。然而, 请注意,在进行此转换时,您的应用程序内存占用量预计会显着增长。由于所有引用类型指针现在占用了两倍的空间。换句话说,虽然你有一个有效的无限地址空间,但有效的内存利用率仍然受到RAM的限制。