我一直在一台安装了LinuxMint(Debian)的旧笔记本电脑上玩rstudio服务器。
我总是在windows上运行,所以我从来没有利用过parallelmulticore包,我的目标是学习rstudio serverR 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))
)

中间时间120.9毫秒。
为什么会有这么大的差别?
这台机器是一种双核恐龙。在使用>=4核机器之前,您是否没有看到好处?我的用例(按列计算data.frame)是否不适合看到好处?
谢谢您!

最佳答案

你的数据很小,相对于开销来说有优势,试试

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毫秒。所以在我看来,这不仅仅是核心的数量,更重要的是数据的大小。

关于linux - mclapply用例不当?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32468136/

10-12 20:36