一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - R語言 - R語言常用兩種并行方法之parallel詳解

R語言常用兩種并行方法之parallel詳解

2022-01-20 15:41Kanny廣小隸 R語言

這篇文章主要為大家介紹了R語言常用兩種并行方法之parallel方法的詳解,有需要的朋友可以借鑒C參考下,希望能夠有所幫助,祝大家多多進步早日甚至加薪

由于最近在進行一些論文的模擬,所以嘗試了兩種并行的方法:parallelsnowfall,這兩種方法各有優缺,但還是推薦snowfall,整體較為穩定,不容易因為內存不足或者并行線程過多等原因而報錯。

并行計算

并行計算: 簡單來講,就是同時使用多個計算資源來解決一個計算問題,是提高計算機系統計算速度和處理能力的一種有效手段。(參考:并行計算簡介)

  • 一個問題被分解成為一系列可以并發執行的離散部分;
  • 每個部分可以進一步被分解成為一系列離散指令;
  • 來自每個部分的指令可以在不同的處理器上被同時執行;
  • 需要一個總體的控制/協作機制來負責對不同部分的執行情況進行調度。

而在我們平時的模擬中,在一臺電腦或者服務器上,就是將我們的計算任務分散到多個不同的小的核中同時進行處理。

在模擬時什么地方可以用到并行?

并行操作一般適用于重復的操作,比如重復隨機按照相同分布生成數據,然后分別同時進行模擬。這里就可以用并行。亦或者我們要做permutation計算p-value等信息,也可以進行并行,因為這種操作是簡單的重復即可完成。

但諸如迭代,遞歸等算法就很難用并行實現,這種都叫串行。因為后一個的對象需要前一個對象的信息,只能先算完前一個,再計算后一個內容。

在進行實際的模擬比較多種方法的優劣時,通常需要重復實驗成百上千次,一般可對這里進行并行操作,寫在這里的操作是最簡單的。但會有個缺點:可能會出現掛服務器跑了半天還沒出現結果,但是自己又并不知道運行到哪了的現象。雖然有一些方法可以進行查看(例如snowfall中的sfCat()函數,但是輸出的結果是相對來說比較凌亂的,而且有時還會輸出不了,具體用法后面會進行介紹),但是還是可能等很久才出一些結果,如果并行某一個地方維度或者代碼有些小瑕疵,整段結果都沒法進行輸出。

所以建議,如果能將并行寫到每個算法中間的話,就盡量寫到每個具體算法之中(如需要permutation的寫到permutation中;如要多次for循環計算統計量以及其它信息的,直接替代for循環),這樣后面實際操作時也比較方便。(這樣做的缺點是可能導致內存占用過多,從而使并行出錯)

怎么在R中看我們可以使用并行?

只需使用如下命令,就可以查看我們電腦能夠使用的線程數:

?
1
detectCores()

理論上這個值 ≥2,我們電腦就可以進行并行操作(現在的電腦基本都是4往上的)。當然通常我們不會使用所有的線程來進行并行,不然。。。電腦很可能會崩。

言歸正傳,下面介紹兩種R中常用的并行操作(默認會apply族相關操作)。

parallel(簡單)

一個是parallel包,此包最大的優勢就是非常的便捷,只需將我們原本的apply()修改為parApply()lapply()修改為parLapply()sapply()修改為我們常用的parSapply()等等,然后再在開頭和結尾添加上相應的開始并行與結束并行的語句即可。

下面舉個栗子(參考:How-to go parallel in R – basics + tips

首先我們使用lapply()進行下述操作向量化操作:

?
1
lapply(1:3, function(x) c(x, x ^ 2, x ^ 3))

輸出結果為:

[[1]]
[1] 1 1 1

[[2]]
[1] 2 4 8

[[3]]
[1]  3  9 27

我們將其修改為并行方法,首先是初始化我們的并行:

?
1
2
3
4
5
6
7
library(parallel) # 載入parallel包
 
# 計算可用線程數,并設置并行使用線程數
no_cores <- detectCores() - 1
 
# 初始化
cl <- makeCluster(no_cores)

然后修改原本我們lapply()的命令:

?
1
parLapply(cl, 1:3, function(x) c(x, x ^ 2, x ^ 3))

注意:這里與一般的lapply()相比,要加上cl。

輸出結果為:

[[1]]
[1] 1 1 1

[[2]]
[1] 2 4 8

[[3]]
[1]  3  9 27

到這里我們還沒完,前面初始化我們的并行,這里需要結束我們的并行,釋放我們用到的線程與內存,返還給系統。具體使用如下語句:

?
1
stopCluster(cl)

至此,一個簡單的并行就完成了。

但事情遠遠沒這么簡單,在我們需要處理非常復雜的并行任務,反復使用parallel庫中的并行方法時,我們沒辦法將我們的線程數開到最大,有時候甚至連一半都不行,它會出現下面所示的報錯:

Error in unserialize(node$con) : error reading from connection

這種情況出現的原因就很復雜了,這是因為“調用核心數–計算機內存”的不匹配造成的。如果你的數據集很大,調用了很多核心,那么你的計算機內存如果不夠匹配,就會出現連接不上的不錯,甚至還出現卡機等現象。簡言之就是爆內存了。

解決方法(不能說完全解決,只能說能有效緩解):

使用更少的線程進行并行;

如果你的電腦內存非常小,有一個簡單的方法確定你的最大使用線程:

max cores = memory.limit() / memory.size();

將大量的并行分小部分進行;在代碼中多使用rm()刪除沒用的變量,使用gc()回收內存空間;

不過后面我們介紹另一種并行方式snowfall相對而言就更加穩定了(雖然代碼寫起來會相對復雜一些),這個我們留待下一篇博客:R中兩種常用并行方法snowfall 中進行詳細介紹。

以上就是R語言常用兩種并行方法之parallel詳解的詳細內容,更多關于R語言并行方法parallel的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/weixin_41929524/article/details/81707053

延伸 · 閱讀

精彩推薦
  • R語言R語言讀取xls與xlsx格式文件過程

    R語言讀取xls與xlsx格式文件過程

    這篇文章主要為大家介紹了使用R語言讀取xls與xlsx格式文件的過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪...

    Kanny廣小隸11982022-01-20
  • R語言如何用R語言繪制散點圖

    如何用R語言繪制散點圖

    這篇文章主要介紹了如何用R語言繪制散點圖,幫助大家更好的理解和學習使用R語言,感興趣的朋友可以了解下...

    菜鳥教程13002021-12-23
  • R語言R語言常量知識點總結

    R語言常量知識點總結

    在本篇文章里小編給大家整理了一篇關于R語言常量知識點總結內容,有興趣的朋友們可以學習分享下。...

    R語言教程網12102021-12-29
  • R語言基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    這篇文章主要介紹了基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    truffle52815052022-01-05
  • R語言R語言中qplot()函數的用法說明

    R語言中qplot()函數的用法說明

    這篇文章主要介紹了R語言中qplot()函數的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    Jack_丁明12752022-01-05
  • R語言R語言實現支持向量機SVM應用案例

    R語言實現支持向量機SVM應用案例

    本文主要介紹了R語言實現支持向量機SVM應用案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一天_pika5222022-01-18
  • R語言R語言中的vector(向量),array(數組)使用總結

    R語言中的vector(向量),array(數組)使用總結

    這篇文章主要介紹了R語言中的vector(向量),array(數組)使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    A葉子葉來5772021-11-14
  • R語言R語言gsub替換字符工具的具體使用

    R語言gsub替換字符工具的具體使用

    這篇文章主要介紹了R語言gsub替換字符工具的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    lztttao10372021-12-24
主站蜘蛛池模板: 欧美视频一二三区 | 欧美作爱福利免费观看视频 | 男女肉粗暴进来下面好紧 | 亚洲成色www久久网站 | 国产成人咱精品视频免费网站 | 国产九九在线观看播放 | 极品手交handjobtattoo | 日韩播放| 腿交hd| 久久成人免费大片 | 欧美日韩亚洲区久久综合 | 亚洲视频在线观看免费视频 | 午夜私人影院在线观看 | 小莹的性荡生活45章 | 免费视频大全 | 奇米影视久久777中文字幕 | 成年人在线观看免费视频 | 色综合天天综合网站中国 | 日日操天天射 | 91日本在线观看亚洲精品 | youzljzljzljzlj96| 扒开斗罗美女了的胸罩和内裤漫画 | 楚乔传第二部免费播放电视连续剧 | 成人免费视频一区二区 | 日本不卡视频免费 | 秋霞宅宅236理论片 秋霞一级黄色片 | 亚洲国产精品二区久久 | 成人综合网址 | 婷射吧| 全程粗语对白视频videos | 动漫美女被羞羞产奶 | 亚洲精品国精品久久99热 | 青青国产成人久久激情91麻豆 | 国产亚洲人成网站在线观看不卡 | 亚洲成年网站在线观看 | 日本高清中文字幕视频在线 | 嗯啊好大视频 | 午夜精品区 | 70岁多老妇人特黄a级毛片 | 免费老外的毛片清高 | 韩国三级大全 |