我很难理解为什么随着迭代次数的增加,这段代码(改编自R Benchmark 2.5)变得越来越慢(平均而言)。
require(Matrix)
c <- 0;
for (i in 1:100) {
a <- new("dgeMatrix", x = rnorm(3250 * 3250), Dim = as.integer(c(3250, 3250)))
b <- as.double(1:3250)
invisible(gc())
timing <- system.time({
c <- solve(crossprod(a), crossprod(a, b))
})
print(timing)
rm(a, b, c)
}
这是一个示例输出,从一次运行到下一次运行略有不同。
据我了解,从一次迭代到下一次迭代都不应该保存任何内容,但是时间从前几个循环中的 1 秒缓慢增加到后面循环中的 4 秒以上。你知道是什么原因造成的,我该如何解决?
将 for 循环切换到 *apply 似乎会产生类似的结果。
我知道代码没有经过优化,但它来自广泛使用的基准测试,并且根据导致此行为的原因,它可能表明其结果存在严重偏差(默认情况下仅迭代 3 次)。
我在 Mac OS 10.8.4 上运行 R 版本 3.0.1 (x86_64),具有 16 GB RAM(其中很多是免费的)。BLAS 是 OpenBLAS。