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