- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Criterion 中对函数进行基准测试之前,如何强制评估函数的输入?我正在尝试对某些函数进行基准测试,但希望排除评估输入 thunk 的时间。有问题的代码使用 unboxed vectors对于输入,不能对 Int 向量进行深度排序。下面的示例代码片段:
-- V is Data.Vector.Unboxed
shortv = V.fromList [1..10] :: V.Vector GHC.Int.Int16
intv = V.fromList [1..10] :: V.Vector GHC.Int.Int32
main :: IO ()
main = defaultMain [
bench "encode ShortV" $ whnf encodeInt16V shortv
,bench "encode IntV" $ whnf encodeInt32V intv
]
标准基准测试包括构建 shortv 的时间以及对上述函数进行基准测试时的intv 输入。标准测量如下 - 每个函数的测量值约为 400 纳秒,其中似乎还包括输入的构建时间:
benchmarking encode ShortV
mean: 379.6917 ns, lb 378.0229 ns, ub 382.4529 ns, ci 0.950
std dev: 10.79084 ns, lb 7.360444 ns, ub 15.89614 ns, ci 0.950
benchmarking encode IntV
mean: 392.2736 ns, lb 391.2816 ns, ub 393.4853 ns, ci 0.950
std dev: 5.565134 ns, lb 4.694539 ns, ub 6.689224 ns, ci 0.950
现在,如果基准代码的主要部分修改为以下(通过删除第二个基准函数):
main = defaultMain [
bench "encode ShortV" $ whnf encodeInt16V shortv
]
shortv 输入似乎在对encodeInt16V 函数进行基准测试之前进行评估。这确实是我想要的输出,因为这个基准测试测量函数执行的时间,不包括构建输入的时间。标准输出如下:
benchmarking encode ShortV
mean: 148.8488 ns, lb 148.4714 ns, ub 149.6279 ns, ci 0.950
std dev: 2.658834 ns, lb 1.621119 ns, ub 5.184792 ns, ci 0.950
类似地,如果我仅对“encode IntV”基准进行基准测试,我也会获得约 150 纳秒的时间。
我从 Criterion 文档中了解到,它试图避免惰性评估以获得更准确的基准测试。这是有道理的,但这里并不是真正的问题。我的问题是如何构建 Shortv 和 intv 输入,以便在传递给基准函数之前对它们进行评估。现在,我可以通过限制 defaultMain 一次仅对一个函数进行基准测试来完成此任务(如我上面所示),但这不是一个理想的解决方案。
编辑1
Criterion 基准测试还发生了其他问题,而且它似乎只发生在向量数组上,而不是列表上。如果我通过打印 Shortv 和 intv 强制进行全面评估,基准测试仍然测量时间为 ~400ns,而不是 ~150ns。代码更新如下:
main = do
V.forM_ shortv $ \x -> do print x
V.forM_ intv $ \x -> do print x
defaultMain [
bench "encode ShortV" $ whnf encodeInt16V shortv
,bench "encode IntV" $ whnf encodeInt32V intv
]
标准输出(还有 158.4% 的异常值,这似乎不正确):
estimating clock resolution...
mean is 5.121819 us (160001 iterations)
found 253488 outliers among 159999 samples (158.4%)
126544 (79.1%) low severe
126944 (79.3%) high severe
estimating cost of a clock call...
mean is 47.45021 ns (35 iterations)
found 5 outliers among 35 samples (14.3%)
2 (5.7%) high mild
3 (8.6%) high severe
benchmarking encode ShortV
mean: 382.1599 ns, lb 381.3501 ns, ub 383.0841 ns, ci 0.950
std dev: 4.409181 ns, lb 3.828800 ns, ub 5.216401 ns, ci 0.950
benchmarking encode IntV
mean: 394.0517 ns, lb 392.4718 ns, ub 396.7014 ns, ci 0.950
std dev: 10.20773 ns, lb 7.101707 ns, ub 17.53715 ns, ci 0.950
最佳答案
您可以使用evaluate
在调用 defaultMain 运行基准测试之前。不确定这是否是最干净的解决方案,但它看起来像这样:
main = do
evaluate shortv
evaluate intv
defaultMain [..]
关于haskell - 在 Criterion 中进行基准测试之前强制评估函数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379191/
我正在尝试计算与引用单元格颜色相同的范围内的单元格数量,如果另一个范围内的相应单元格具有正确的值标准。例如: 如果 (A1 < 350) 和 (B1 与引用单元具有相同的颜色),则计数 1。 循环第
我在 eclipse Juno、Spring 3.1.1、hibernate 4.1、tomcat 7 和 mySQL 中使用 STS。 我创建了一个简单的 MVC 模板项目。我的目的是用户将一些数据
Criterion Rust 的基准库记录为 generating plots描述基准测试结果: Criterion.rs can generate a number of useful charts
以下代码(由 Reid Barton 在 Criterion causing memory consumption to explode, no CAFs in sight 处建议)有一个基准时间,与
在 Criterion 中对函数进行基准测试之前,如何强制评估函数的输入?我正在尝试对某些函数进行基准测试,但希望排除评估输入 thunk 的时间。有问题的代码使用 unboxed vectors对于
我正在使用criterion对我的 Haskell 代码进行基准测试。我正在进行一些繁重的计算,需要随机数据。我已经编写了这样的主要基准文件: main :: IO () main = newStdG
目前,我必须创建一个临时 Criteria 并使用 Criteria.list() 获取匹配的实体列表,然后将该列表传递给 HibernateTemplate .deleteAll(): void d
我遇到了这种情况的问题(我会尽量简化)- 我的数据库中有用户具有角色列表和状态列表。 public class User implements Serializable { @ManyToM
我正在使用标准 (cargo bench) 为 crate 开发一些基准测试。在完成代码之前,我想暂时限制迭代次数。 我知道测量值可能不准确,但这只是暂时的。这可能吗? 最佳答案 这是可能的。 查看C
我正在使用 sklearn.tree.DecisionTreeClassifier here是它的链接。我想使用关键字 criterion 并将其设置为 "entropy" 我做了以下事情: mode
我想用 3 个 OR Criterions 进行标准查询,但我不知道什么是最好的方法。 目前我只有 2 个或限制。 Criteria crit = session.createCriteria(Rea
我正在使用 NHibernate 版本 2.0.0.4000。 在我的一个查询中,我想使用 sql 函数 dateadd 来添加天数。这没有注册,所以我创建了自己的方言并注册了如下函数: Regist
我使用 Hibernate 而不是 mySQL。在 mySQL 中,您甚至可以在查询中对数字(如 double )参数和日期添加 LIKE,例如您可以编写: select * from sillyta
我有一个以下查询,我必须从子查询创建的临时表中选择行。 select x, y, x from (select x, y, z from some_table where x between x1 a
我正在尝试使用 Criterion 框架来衡量一个简单的 Haar DWT 程序的性能。 (这是错误的慢,但我会把它留给另一个问题)。不幸的是,我在网上找不到任何好的文档。我的两个主要问题是 如何将数
我正在尝试对 annotate 进行基准测试例程使用 Criterion 基准测试库。例程检查 &[&str]参数(二维方串)并返回 Vec我怀疑它的执行时间可能取决于参数的内容。因此,我想随机化单个
我想知道我的程序将 12.9MB 的 .wav 文件读入内存需要多长时间。将文件读入内存的函数如下所示: import qualified Data.ByteString as BS g
如果我要根据特定条件选择一些行,我可以在 NHibernate.Criterion 中使用 ICriterion 对象,例如: public List GetByCriteria() {
我刚刚升级到 Hibernate 4.1.10.Final(在第一次升级到 4.1.8.Final 之后),但现在无法编译: Restrictions.eq("loginName", loginNam
你好,我有一个大型的 oracle hibernate web 应用程序,它似乎给出了这个错误 ORA-01795:列表中表达式的最大数量为 1000 我需要一个 java 代码作为 hibernat
我是一名优秀的程序员,十分优秀!