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

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

x86:            68ms
Any CPU/x64:    160ms

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

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

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

最佳答案 对于使用大量指针数据结构的程序,这可能会发生,因为指针在64位上是8个字节,而在32位上是4个字节.指针追踪代码的瓶颈是缓存未命中.在100%的代码追逐指针的限制中,64位和32位的高速缓存未命中数是两倍,因此减速为2倍.

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

点赞