На каких этапах microbenchmark выполняет заданный код?
Вот что я хотел сделать. У меня есть 2 разных способа умножения матриц. Поэтому я хочу найти, какой путь лучше. Я использовал пакет microbenchmark и вызывал каждую функцию, чтобы проверить их время выполнения. Поскольку мои матрицы слишком велики, я хочу получить отвечающую матрицу, затем удалить ее и очистить мусор. Поэтому я написал следующий код. Делая это 100 раз, я хочу выяснить, какой метод создает матрицу ответа быстрее.
set.seed(100)
library(microbenchmark)
library(parallel)
cl <- makeCluster(4)
matrix.multiply.method1 <- function(cl, A, B){
ans <- clusterApply(cl, lapply(splitIndices(nrow(A), length(cl)), function(ii) A[ii,,drop=FALSE]), get("%*%"), B)
do.call(rbind, ans)
}
matrix.multiply.method2 <- function(A,B){
return (A%*%B)
}
nr <- 5000
A <- matrix(round(rnorm(nr^2),1),nr=nr)
B <- matrix(round(runif(nr^2),1),nr=nr)
timing <- microbenchmark(
x <- matrix.multiply.method1(A,B),
remove (x),
gc(),
y <- matrix.multiply.method2(A,B),
remove(y),
gc()
)
stopCluster(cl)
timing
Я хочу знать, как microbenchmark выполняет эти шаги 100 раз? Микробенчмарк выполняет одну строку 100 раз, а затем переходит на вторую строку? Или он выполняет все строки один раз, снова и снова в сотый раз?
Я хотел знать это, потому что когда я запускаю этот код, он выдает мне предупреждение о том, что он не может удалять объекты "x" и "y". Поэтому я подумал, что причина в том, что микробенчмарк выполняет код.