R语言的并行运算(CPU多核)

通常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);
}
 
#单核的普通LAPPLY函数
system.time({
res <- lapply(1:5000000, fun);
});
# 用户  系统  流逝
# 20.91  0.03 21.35
# 超过一个参数的 Function模型
x=c(1:500)
system.time({
res <- lapply(x,funcTwoPara,a=1);
});
 
#多核的 MakeCluster 函数,这里利用了本机CPU的2个物理核心同时跑程序
detectCores()   # 4 core
detectCores(logical = F)  # 2 core 物理核心
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)  # 8
mc <- getOption( "mc.cores" , 8)
system.time({
res <- mclapply(1:5000000, fun, mc.cores = mc);
});
stopCluster(mc);
 
# 8核的 结果
user  system elapsed
   7.175   1.187   3.416
# 4核的结果
user  system elapsed
  13.415   1.443   8.946
# 2核的结果
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/

转载于:https://www.cnblogs.com/xinping-study/p/6897891.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值