R语言实现并行计算[parallel,Rdsm]

最近在R中的学习并行计算
整个人被各种函数整的头都大了
所以准备专门写一条博文来总结
所谓R中的并行无非是
snow包multicore包和foreach包
但很遗憾的是只有第一个能够在win下运行
辅助并行计算的共享内存包rdsm也只能在linux或者macos上运行

然而在macos上安装r和rstudio是十分痛苦的
说实话碰到了装成日文版等等各种问题
最后还是没有解决rstudio无法运行的结果,故只能在r中调试
如果有大佬解决了相关情况希望也ballball孩子
(console不可以通过,terminal可以通过)
最终所有实验还是在ubuntu上做的

话不多说,在r语言中parallel包里

parallel包

创建一个两个线程的集群:

cls<-makeCluster(2)

当然使用完毕需要释放这个集群:

stopCluster(cls)

将”lnks”变量分享给整个cls集群:

clusterExport(cls,”lnks”)

同理将函数function分享给整个cls集群:

clusterEvalQ(cls,function)

在这里要介绍一下:

R语言提供了批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作。
当然这个批处理也有并行计算包中的批处理函数。
但我们先插入介绍一下原本的批处理函数
这些函数底层是通过C来实现的,所以效率也比手工遍历来的高效。
批量处理函数有很重要的apply族函数:lapply sapply apply tapply mapply。apply族函数是高效能计算的运算向量化(Vectorization)实现方法之一,比起传统的for,while常常能获得更好的性能。

a

pply : 用于遍历数组中的行或列,并且使用指定函数来对其元素进行处理。
lapply : 遍历列表向量内的每个元素,并且使用指定函数来对其元素进行处理。返回列表向量。
sapply : 与lapply基本相同,只是对返回结果进行了简化,返回的是普通的向量。
mapply: 支持传入两个以上的列表。
tapply: 接入参数INDEX,对数据分组进行运算,就和SQL中的by group一样。

而对于并行计算parallel包中也有相应的包

我们有几种调度模式,以此来减少通信开销:
1.通过直接给线程发送已经分好的任务量

ichunks<-clusterSplit(cls,1:n))

这个其实就是按照数目给把1:n号基本均分给各个cls,生成一个任务列
2.通过轮转调度每个任务,A-1 B-2 A-3 B-4这种调度

clusterApply(集群,任务列(数目),处理函数,处理函数所需要的参数)
示例:
clusterApply(cls,tasks,dochunk,x,y,allcombs,chunksize)cls :snow cluster
x: predictor matrix,one column corresponds to a predictor
y:respons vector
allcombs: genallcombs(p,k)
chunksize:size of chunks
dochunk<-function(psetstart,x,y,allcombs,chunksize)

3.但是上方的函数处理非常的不合算,因为单纯的轮转可能导致最终计算结果太慢
举个例子:线程1接到两个需要做半个小时的任务,线程二接到俩个需要做十分钟的任务
这显然是不合算的

这时候就出现了自动调度并行计算函数

clusterApplyLB(cls,tasks,function,parameters)

当然谈到并行计算,就不得不考虑通信开销
此时就需要Rdsm包这种能够分配共享内存空间的包
谈到临界区,就逃不了锁和屏障,这个不详细解释,可以去了解一下操作系统

屏障是用来同步全部线程的
这个函数为

barr()

和c程序中的MPI_Barrier如出一辙

在这个包中:

myinfo$nwrkrs线程个数
myinfo$id当前线程id

这两个东西相当于常量
但是只有线程在运作的时候才能使用

mgrinit(cls)初始化Rdsm包系统

中间放你用parallel开的集群

mgrmakevar(cls,”varname”,nrow,ncol)在共享内存中创建变量

用snow包中的

clusterEvalQ(cls,function)来开始线程

在这个包中也有一个如clusterSplit()的分开函数

getidxs(n)即将1到n根据线程数量分为若干段

总之描述上如上
想要仔细的了解还需要多多写程序
希望有所帮助

R语言实现并行计算[parallel,Rdsm]相关推荐

  1. 基于redis和R语言构建并行计算平台(yiyou)

    最近研究gearman时发现不少问题,关于队列持久化的问题搞了半个月还是没能解决,并且国内可以参考的资料太少,所以考虑换一种方案试试.如下贴出gearman集群的架构: 可以看到该架构存在的问题,当持 ...

  2. R语言如何并行处理[parallel package][向量化操作并行优化]

    使用数据,长下面这样: 方法:使用parallel包,并行向量化处理,进一步提升原先向量化处理速度. 原始代码: start <- Sys.time() experiment_step1 < ...

  3. R语言中的并行计算——二、搭建R的集群

    zhuanzai :http://blog.sina.com.cn/s/blog_83bb57b70101qeys.html 一直纠结于R的大数据计算问题,希望可以找到一个彻底的方案解决它.而云服务器 ...

  4. 【转】R语言中的并行计算——搭建R的集群

    转载:http://blog.sina.com.cn/s/blog_83bb57b70101qeys.html 一直纠结于R的大数据计算问题,希望可以找到一个彻底的方案解决它.而云服务器当然是解决这个 ...

  5. r语言系统计算上是奇异的_R语言实现并行计算

    Python作为多线程的编程语言在并行方面相对于R语言有很大的优势,然而作为占据统计分析一席之地的R语言自然不能没有并行计算的助力.那么我们来看下在R语言中有哪些并行的包:隐式并行:OpenBLAS, ...

  6. r语言 不同长度 list 转 dataframe_解决R效率问题—parallel多线程启动

    很多用R的小伙伴可能会抱怨R的效率问题,尤其是处理海量数据的时候.如果你确实这样认为,那是因为你大概不知道R也有多线程之说... R 提供各种各样的包以解决并行处理问题,其中snow包是最典型的之一. ...

  7. R语言并行计算spearman相关系数

    R语言并行计算spearman相关系数,加快共现网络(co-occurrence network)构建速度    利用spearman相关性分析是构建共现网络的重要方法,但由于OTU table往往有 ...

  8. r语言kendall协和系数_R语言之并行计算(kendall相关系数篇)

    对于属性较多的数据,我们一般都会去计算两两属性之间的相关性,用以探讨属性之间的关系. 相对于皮尔森相关系数,我们更喜欢使用spearman和kendall相关系数,因为作为非参数相关系数,稳定性更好. ...

  9. R语言使用GGally包的ggparcoord函数可视化多变量的平行坐标轴图(parallel coordinates plot)、当排序点图的数据对象变多的可视化效果变差的时候

    R语言使用GGally包的ggparcoord函数可视化多变量的平行坐标轴图(parallel coordinates plot).当排序点图的数据对象变多的可视化效果变差的时候 目录

最新文章

  1. linux 无线网络配置工具wpa_supplicant与wireless-tools
  2. Request download hierarchy check
  3. 梦燕服饰:企业数字化走得快不是真本事,走得稳才是硬道理
  4. rancher 使用部分运维操作
  5. rn php,RN和React路由详解及对比
  6. 【论文笔记】Face Alignment at 3000 FPS via Regressing Local Binary Features
  7. 评价类问题中的模糊综合评价法
  8. PLC控制系统接地要求
  9. word目录制表符对齐
  10. WordPress和October
  11. 军事 - [纪录片]古兵器大揭秘
  12. 翻转课堂融入计算机课,【计算机基础论文】大学计算机基础翻转课堂的构建思路(共3745字)...
  13. python获取word页数_用程序获取word页码方法汇总
  14. PTA 基础编程题目集 7-1 厘米换算英尺英寸
  15. MMD导入Unity利用MMD4Mecanim转化MMD模型
  16. 2021-12-6 《聪明的投资者》学习笔记-3.一个世纪的股市历史:1972年年初的股价水平-股市周期性。股价、利润和股息
  17. oracle 文件大小为零,windows Oracle数据文件大小为0的恢复case
  18. Pytorch 深度学习实战 ‘cannot import name ‘BytesType‘ from ‘diskcache.core‘
  19. Mac OS使用技巧之七:个性化自己的Mac OS主界面
  20. php图片地址替换,php把采集内容中图片地址下载并替换成本地地址

热门文章

  1. 【蜂口 | AI人工智能】表情识别——龙鹏 深度学习与人脸图像应用连载(七)...
  2. 按着Phoenix Framework文档练个手,感受一下Elixir语言。
  3. 【旧文集】一生伏首拜阳明-记于2017
  4. 付永刚计算机信息安全技术课后答案
  5. 手把手教你用JAVA实现“语音合成”功能(文字转声音)标贝科技
  6. H265编码视频流媒体播放器EasyPlayer.js支持9宫格视频同屏播放的写法
  7. android麦克风被禁用怎么办,为什么微信麦克风被禁用?如何开启?
  8. 关于web出现此问题:index:25 Uncaught ReferenceError: delFruit is not defined at HTMLImageElement.onclick
  9. 90后凤凰男:寒门难出贵子
  10. 计算机开机时前按什么键,开机怎么进入bios?电脑开机按什么键进入BIOS方法大全...