通常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/

R语言的并行运算(CPU多核)的更多相关文章

  1. MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)

    MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下.而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~ -------------------------- ...

  2. R语言︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读

    XGBoost不仅仅可以用来做分类还可以做时间序列方面的预测,而且已经有人做的很好,可以见最后的案例. 应用一:XGBoost用来做预测 ------------------------------- ...

  3. 碎片︱R语言与深度学习

    笔者:受alphago影响,想看看深度学习,但是其在R语言中的应用包可谓少之又少,更多的是在matlab和python中或者是调用.整理一下目前我看到的R语言的材料: ---------------- ...

  4. R语言使用 multicore 包进行并行计算

    R语言是单线程的,如果数据量比较大的情况下最好用并行计算来处理数据,这样会获得运行速度倍数的提升.这里介绍一个基于Unix系统的并行程序包:multicore. 我们用三种不同的方式来进行一个简单的数 ...

  5. 提高R语言速度--转载

    1.     参考<R语言编程艺术>(Norman Matloff) chapter 14 & chapter 15 2.     方法 (1)向量化 与非向量化-循环做个对比: ...

  6. R语言编程艺术(5)R语言编程进阶

    本文对应<R语言编程艺术> 第14章:性能提升:速度和内存: 第15章:R与其他语言的接口: 第16章:R语言并行计算 ================================== ...

  7. 美团 R 语言数据运营实战

    一.引言 近年来,随着分布式数据处理技术的不断革新,Hive.Spark.Kylin.Impala.Presto 等工具不断推陈出新,对大数据集合的计算和存储成为现实,数据仓库/商业分析部门日益成为各 ...

  8. R语言缺点

    R的优点:免费,开源,体积小.缺点:对大文本处理差,另外一个也在于开源,package如果出错,烦死你.当你跑比较大的simulation,对效率有要求的时候,有时还是不得不用C,这可能是10小时和1 ...

  9. Go语言在国产CPU平台上应用前景的探索与思考

    http://www.chinaaet.com/article/3000087559 0 引言 CPU是电子产品的核心,代表着信息产业的发展水平.CPU发展至今已经有四十多年的历史了,实际就是Inte ...

随机推荐

  1. Net Core网络通信

    Net Core网络通信 https://www.cnblogs.com/xxred/p/9859893.html 聊聊如何设计千万级吞吐量的.Net Core网络通信! 作者:大石头 时间:2018 ...

  2. Redis、Memcache和MongoDB

    一.Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰 ...

  3. Java面试题:栈和队列的实现

    面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要 ...

  4. 当前标识(NT AUTHORITY\NETWORK SERVICE)没有对

    报错:当前标识(NT AUTHORITY\NETWORK SERVICE)没有对C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP. ...

  5. 读写另一EXE的内存

    procedure TfrmMain.tmrChangeServerNameTimer(Sender: TObject); function GetProcessID(FileName: string ...

  6. Delphi单元文件之-简体繁体互转

    Function GBCht2Chs(GBStr: String): AnsiString; {GBK繁体转简体} Var   len:integer;   pGBCHTChar: PChar;   ...

  7. java 最差实践

    HashMap size 陷阱: 错误写法: Map map = new HashMap(collection.size()); for (Object o : collection) { map.p ...

  8. SQL Server 2008怎么自动备份数据库

    在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你 ...

  9. Playbooks 中的错误处理

    Topics Playbooks 中的错误处理 忽略错误的命令 控制对失败的定义 覆写更改结果 Ansible 通常默认会确保检测模块和命令的返回码并且会快速失败 – 专注于一个错误除非你另作打算. ...

  10. JQUEY 引用

    $(document).ready(function(){ alert($("a:first").attr("id")); });