Ren*_*néR 8 performance benchmarking r blas
我很难理解为什么随着迭代次数的增加,这段代码(改编自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)
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例输出,从一次运行到下一次运行略有不同.
据我了解,没有什么应该保存从一个迭代到下一个,但时机慢慢地从1秒在最初的几个循环,以超过4秒钟,在以后的循环增加.你知道造成这种情况的原因,以及我如何解决这个问题?
将for循环切换为*apply似乎会产生类似的结果.
我知道代码没有经过优化,但它从一个广泛使用的基准到来,这取决于是什么原因导致这种行为,这可能表明其结果严重偏差(只迭代默认为3次).
我在Mac OS 10.8.4上运行R版本3.0.1(x86_64),内存为16 GB(大量免费).BLAS是OpenBLAS.
也许你可以尝试将 for 循环中的代码变成一个函数。这样一来,一次运行就不可能影响另一次运行。此外,它还消除了因过度使用 rm() 和 gc() 而造成的混乱。
require(Matrix)
NewFun <- function() {
a <- new("dgeMatrix", x = rnorm(3250 * 3250), Dim = as.integer(c(3250, 3250)))
b <- as.double(1:3250)
timing <- system.time({
c <- solve(crossprod(a), crossprod(a, b))
})
print(timing)
}
for (i in 1:100) {
NewFun()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |