mclapply的不当使用案例?

时间:2015-09-08 22:16:34

标签: linux r lapply mclapply

我一直在安装了linux mint(debian)的旧笔记本电脑上玩rstudio服务器。

我一直在Windows上运行,因此我从未利用parallelmulticore个软件包,我的目标是学习rstudio server以及{{1}以及多核处理如何加速我的进程。

我每天使用的lapply的一个主要用途是这样的:

R linux

中位时间为f <- function(x) { x1 <- data[1:50, x] x2 <- data[51:100, x] line <- c(paste0(mean(x1), " (", sd(x1), ")"), paste0(mean(x2), " (", sd(x2), ")"), t.test(x1, x2)$p.value) return(line) } data <- data.frame(matrix(rnorm(2600, 85, 19), nrow=100, ncol=26)) names(data) <- letters do.call(rbind, lapply(letters, f)) microbenchmark( do.call(rbind, lapply(letters, f)) ) 毫秒

可替换地:

21.8

中位时间为library(parallel) microbenchmark( do.call(rbind, mclapply(letters, f)) ) 毫秒。

为什么会有这么大的差异?

这台机器是一个双核恐龙。在使用&gt; = 4核机器之前,您是否看不到好处?我的用例(data.frame的列式计算)是不正确的,以便看到好处?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的数据很小,有利于避免开销,请尝试

f <- function(x) {
  x1 <- data[1:50000, x]
  x2 <- data[50001:100000, x]

  line <- c(paste0(mean(x1), " (", sd(x1), ")"),
            paste0(mean(x2), " (", sd(x2), ")"),
            t.test(x1, x2)$p.value)
  return(line)
}

data <- data.frame(matrix(rnorm(2600, 85, 19), nrow=100000, ncol=26))

而是检查结果。你的例子占用了我的笔记本电脑7和17中位数毫秒,但我的更大的例子将其改为120和80.因此在我看来它(不仅)是核心数量,而是在这种情况下更多的数据大小。