![]() |
1
5
我建议使用
以你的例子为基准
GHCi和
您可以在这里看到,时间从最低9.3毫秒到9.5毫秒不等,因此没有大的异常值。但是,Criterion会自动丢弃初始运行,以确保仅在第一次运行代码时产生的成本(GHC代码中常见的情况)不会包含在计时中。
这个
了解这个计算的哪些部分很重要
不是
正在进行基准测试。表达
但这产生了出乎意料的更快的结果:
因为列表通过列表融合进行了优化,现在您正在对一个紧密的求和循环进行基准测试。
如果你真的想对显式列表进行时间构造和求和,你可以防止列表与以下内容的副本融合
也就是说,对GHC代码进行基准测试很棘手,但使用
完整示例:
大概是我得到的时间
在这里,这种差异与数据类型本身关系不大,而与拆箱和融合的组合关系更大。最终的基准测试被编译成一个相当紧密的汇编循环,将1到100000的数字添加到寄存器中。
实际上,本机代码生成器在这里做得不好。LLVM后端(
|
![]() |
trpnd · 如何定义由两个任意单声道变压器组成的单声道变压器? 3 年前 |
![]() |
Fabus1184 · Haskell mapM_不打印 3 年前 |
![]() |
Gotthold · 基于范数约束向量的类型 3 年前 |
![]() |
jian · haskell将另一个函数用作输入参数 3 年前 |
![]() |
Jocafrei · 用Haskell函数实现最大公约数函数 7 年前 |