我目前正在测试R中的一些性能关键算法,我正在寻找一种简单的方法来完成这些基准测试并获得清晰的总结。所以我找到了经常使用的rbenchmark
包。但这并不适合我的需求。我的算法通常取决于某些参数,或者有不同的“典型”数据集,应该可以批量测试。R中基准(性能分析)的最佳方式是什么?
我的电流速正脏溶液是(与其中max /中位数是10^6和5×10^6个随机数测试了相当愚蠢,但简单的例子)
library(rbenchmark)
multi.benchmarks <- function(..., settings) {
res <- NULL
for (i in 1:length(settings)) {
env <- new.env()
eval(settings[[i]], env)
tres <- benchmark(..., environment = env)
res <- rbind(res, cbind(names(settings)[i], tres))
}
names(res)[1] <- "setting"
return(res)
}
multi.benchmarks(mean = expression(mean(x)), median = expression(median(x)),
settings = list(s1 = expression({x <- runif(1E6)}),
s2 = expression({x <- runif(5E6)})),
replications = 3)
这返回:
setting test replications elapsed relative user.self sys.self user.child sys.child
1 s1 mean 3 0.00 NA 0.00 0.00 NA NA
2 s1 median 3 0.16 NA 0.14 0.01 NA NA
3 s2 mean 3 0.03 1 0.04 0.00 NA NA
4 s2 median 3 0.57 19 0.51 0.07 NA NA
这或多或少是我想要的,但我仍然失踪:
- 一个简单的语法(表达式读v ia
substitute(...)
等)和 - 更多可能的参数 - 例如,
my_benchmark(algorithm(dataset, a, b), algorithm = list(func1, func2), a = list(1,2), b = list(10, 20), replications = 3)
是运行8个不同基准测试的好方法:对于func1/func2以及所有可能的值a
和b
的所有组合。 - 检测一些并不需要的PARAMS:如果
func1
有参数a
和b
和func2
只是有一个参数a
但不b
,那么我们将只有6种可能的组合。 - 更详细的输出,例如可以选择获得N个重复后所有运行时间的平均值和标准偏差的额外列。
也许它会花费我只是几天的时间写一个基准包,它能够做所有这些事情,仍然有某种向下兼容于rbenchmark,但在我开始做这个,我会喜欢问你:
- 是否还有其他值得推荐的基准解决方案,我应该考虑?
- 您是否认为具有此类功能的更复杂的基准测试包对R社区普遍感兴趣? (我正在考虑一个新的软件包)
查看Hadley Wickham的[Performance](http://adv-r.had.co.nz/Performance.html) – zx8754 2014-09-05 13:02:06