通常R语言运行都是在CPU单个核上的单线程程序。有时我们会有需求对一个向量里的元素应用相同的函数,最终再将结果合并,并行计算可以大幅节约时间。
为了支持R的并行运算, parallel包已经被纳入了R的BASE库中,可以被直接调用,来实现在同一个CPU上利用多个核Core同时运算相同的函数。
版本一、Window版本的R程序
对比普通的LAPPLY函数和Parallel包下的多核makeCluster + parLapply函数效率
library(parallel)
fun <- function(x){
return (x+1);
}
funcTwoPara< -function (x,a){
return (x+a);
}
system.time({
res <- lapply(1:5000000, fun);
});
x=c(1:500)
system.time({
res <- lapply(x,funcTwoPara,a=1);
});
detectCores()
detectCores(logical = F)
cl <- makeCluster(getOption( "cl.cores" , 4));
system.time({
res <- parLapply(cl, 1:10000000, fun)
});
stopCluster(cl);
|
版本二、Linux版本的R程序
library(parallel)
fun <- function(x){
return (x+1);
}
system.time({
res <- lapply(1:5000000, fun);
});
detectCores(logical = F)
mc <- getOption( "mc.cores" , 8)
system.time({
res <- mclapply(1:5000000, fun, mc.cores = mc);
});
stopCluster(mc);
user system elapsed
7.175 1.187 3.416
user system elapsed
13.415 1.443 8.946
user system elapsed
16.882 1.726 8.139
user system elapsed
16.760 0.039 16.807
|
Reference:
http://blog.sina.com.cn/s/blog_6f194ed30101blpu.html
http://blog.itpub.net/24229571/viewspace-1120592/
|
请发表评论