首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么方框版本的解析器比完全专门化的解析器快13倍?

为什么方框版本的解析器比完全专门化的解析器快13倍?
EN

Stack Overflow用户
提问于 2017-12-26 21:37:45
回答 1查看 48关注 0票数 1

我正在为新的Spiral language制作教程的过程中,偶然发现了一个有趣的性能难题。可以在this chapter中看到我正在尝试做的事情,生成的两个程序是:boxyfully_specialized。他们所做的就是从一个字符串中读取3个整型数,并将它们返回到一个元组中。令人惊讶的是,boxy版本比完全专门化版本快13倍(在某些情况下高达20倍)。在脚本模式和编译模式下,计时是相似的,因此在Repl中测试它应该很容易。

在我尝试反汇编以试图弄清楚它之前,我有几个想法为什么会发生这种情况。

1)由于代码占用更少,提高了缓存的局部性。我不认为是这个,否则我会在另一个例子中看到类似的改进。

2)由JIT完成的黑魔法。

3)我在基准测试方面做错了什么。

据我所知,这个程序确实运行得很好,而且我的眼睛在方框版本中没有发现任何错误。

你知道是怎么回事吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-27 18:08:03

代码语言:javascript
复制
           Method |       Mean |     Error |    StdDev |
----------------- |-----------:|----------:|----------:|
       TermCasted |   406.6 ns | 1.2316 ns | 1.1520 ns |
             Boxy |   199.4 ns | 0.9976 ns | 0.9332 ns |
 FullySpecialized |   292.8 ns | 0.8448 ns | 0.7902 ns |
           FSharp | 3,616.2 ns | 8.9547 ns | 8.3762 ns |

当我使用正确的benchmarking tool而不是随意的脚本时,我得到的数字是有意义的。boxy和完全专业化之间的差异是45%,而不是现在的1300%。这些数字更符合人们的预期。

螺旋的解析器比F#的解析器快一个数量级,这也是我们所期望的。查看教程的master解析器章节,了解更多信息。

从这件事中得到的教训是--千万不要自己做基准测试,真的。从这里开始,我打算把这件事放在心上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47979396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档