降低了x64目标上的F#性能?

时间:2011-08-23 07:15:14

标签: performance f# 64-bit

最近,当使用x64目标与x86相比时,我对F#编译器的行为感到惊讶。相同的应用程序在不同的目标上使用以下时间:

x86:            68ms
Any CPU/x64:    160ms

对我来说这个结果很奇怪。 结果相差几乎两倍。我假设在64位处理器,64位操作系统上,64位应用程序的工作速度比32位应用程序快。

所以问题是:出了什么问题?问题出现在编译器中,或者是我的错?

环境:Core 2 Duo和Windows 7 x64。 F#应用程序:FsYacc / FsLex语言解析器。 .Net 4框架。

2 个答案:

答案 0 :(得分:2)

对于使用大量指针数据结构的程序,可能会发生这种情况,因为指针在64位上是8字节,而在32位上是4字节。指针追踪代码的瓶颈是缓存未命中。在100%的代码追逐指针的限制中,64位和32位的缓存未命中率是两倍,因此速度减慢了2倍。

但是对于其他类型的程序,64位可能比32位快,至少在x86 / x64上。 x64的通用寄存器数量是32位x86的两倍,SSE / SSE2等新指令保证在x64上可用,但不能在32位x86上使用,并且有更多的地址空间可以进行不同的空速权衡,例如作为存储,而不是重新计算值或内存映射大文件。

答案 1 :(得分:0)

您是否尝试在应用中使用Int64而不是Int32?您是否尝试过更改为8位字符集?这些事情如何影响性能?

您是否运行普通硬盘或SSD?