前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言实现并行计算

R语言实现并行计算

作者头像
一粒沙
发布2019-12-19 19:25:31
2.9K0
发布2019-12-19 19:25:31
举报
文章被收录于专栏:R语言交流中心

Python作为多线程的编程语言在并行方面相对于R语言有很大的优势,然而作为占据统计分析一席之地的R语言自然不能没有并行计算的助力。那么我们来看下在R语言中有哪些并行的包:隐式并行:OpenBLAS,Intel MKL,NVIDIA cuBLAS等;显性并行:parallel(主打lapply应用)、foreach(主打for循环)、SupR、还有利用GPU的办法(gpuR)。所谓显式并行也就是基于并行的编程语言编译的程序;隐式并行是基于串行程序编译的并行计算。当然,在R语言核心功能中也是带有了相关的并行的计算基础包parallel。今天就给大家介绍下这个基础并行包的具体应用。

我们不需要再安装这个包,可以直接进行相关的计算。首先我们看下里面的几个核心的函数:

1. detectCores() 发现PC终端有多少个核。所谓核就是CPU的性能体现,越多越好。实例:

代码语言:javascript
复制
library(parallel)cl.cores <- detectCores()#发现可用核数

2. makeCluster() 初始化我们需要用到的核数。其中type参数有两种PSOCK适用所有操作系统,FORK适用unix/max,实现内存共享以及节省内存。实例:

代码语言:javascript
复制
cl <-makeCluster(getOption("cl.cores", 2),type="PSOCK")

3. clusterExport() 将变量载入并行的环境中。实例:

代码语言:javascript
复制
xx=1:10clusterExport(cl, "xx")#读入变量数据

4. clusterEvalQ(,{code}) 将包或者代码直接载入并行环境。实例:

代码语言:javascript
复制
clusterEvalQ(cl,{library(ggplot2);xy=1:10})
代码语言:javascript
复制
clusterCall(cl, function(y) xy + y, 2:10)

5. clusterCall() 在并行环境中,一次运行过程在各节点的值。clusterMap便可以直接运行所用的值,并以列表形式展示所有结果。实例:

clusterCall(cl, function(y) xx + y, 2:10)

代码语言:javascript
复制
clusterMap(cl,function(y) xx + y,2:10)

6. parLapply(), parSapply(), 和 parApply() 和函数 lapply, sapply 及 apply一一对应。可以直接将自定义的函数引入并行环境。实例:

代码语言:javascript
复制
parSapply(cl,2:10, function(y) xx + y)

7. clusterApply() 类似parLapply 系列,可以直接运行得到所有结果,输出列表格式。clusterApplyLB()便是对其的优化,具体的优化模式我们就不赘述了。实例:

代码语言:javascript
复制
clusterApply(cl,2:10, function(y) xx + y)

8. do.call() 针对某个数据集执行指定的函数功能。实例:

代码语言:javascript
复制
res=clusterApply(cl,2:10, function(y) xx +y)do.call('rbind',res)

9. stopCluster() 关闭集群。实例

stopCluster(cl)

以上便是parallel包的全部功能函数,其实并行真正解决的是重复性工作的情况,在P值的计算中应用比较广泛。然而对于递归计算需要一定的优化才能使用并行计算,不然不一定有单机的效率高。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档