亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

R語(yǔ)言常用兩種并行方法之parallel詳解

 更新時(shí)間:2021年11月08日 14:07:31   作者:Kanny廣小隸  
這篇文章主要為大家介紹了R語(yǔ)言常用兩種并行方法之parallel方法的詳解,有需要的朋友可以借鑒C參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日甚至加薪

由于最近在進(jìn)行一些論文的模擬,所以嘗試了兩種并行的方法:parallelsnowfall,這兩種方法各有優(yōu)缺,但還是推薦snowfall,整體較為穩(wěn)定,不容易因?yàn)閮?nèi)存不足或者并行線程過(guò)多等原因而報(bào)錯(cuò)。

并行計(jì)算

并行計(jì)算: 簡(jiǎn)單來(lái)講,就是同時(shí)使用多個(gè)計(jì)算資源來(lái)解決一個(gè)計(jì)算問(wèn)題,是提高計(jì)算機(jī)系統(tǒng)計(jì)算速度和處理能力的一種有效手段。(參考:并行計(jì)算簡(jiǎn)介

  • 一個(gè)問(wèn)題被分解成為一系列可以并發(fā)執(zhí)行的離散部分;
  • 每個(gè)部分可以進(jìn)一步被分解成為一系列離散指令;
  • 來(lái)自每個(gè)部分的指令可以在不同的處理器上被同時(shí)執(zhí)行;
  • 需要一個(gè)總體的控制/協(xié)作機(jī)制來(lái)負(fù)責(zé)對(duì)不同部分的執(zhí)行情況進(jìn)行調(diào)度。

而在我們平時(shí)的模擬中,在一臺(tái)電腦或者服務(wù)器上,就是將我們的計(jì)算任務(wù)分散到多個(gè)不同的小的核中同時(shí)進(jìn)行處理。

在模擬時(shí)什么地方可以用到并行?

并行操作一般適用于重復(fù)的操作,比如重復(fù)隨機(jī)按照相同分布生成數(shù)據(jù),然后分別同時(shí)進(jìn)行模擬。這里就可以用并行。亦或者我們要做permutation計(jì)算p-value等信息,也可以進(jìn)行并行,因?yàn)檫@種操作是簡(jiǎn)單的重復(fù)即可完成。

但諸如迭代,遞歸等算法就很難用并行實(shí)現(xiàn),這種都叫串行。因?yàn)楹笠粋€(gè)的對(duì)象需要前一個(gè)對(duì)象的信息,只能先算完前一個(gè),再計(jì)算后一個(gè)內(nèi)容。

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

所以建議,如果能將并行寫(xiě)到每個(gè)算法中間的話,就盡量寫(xiě)到每個(gè)具體算法之中(如需要permutation的寫(xiě)到permutation中;如要多次for循環(huán)計(jì)算統(tǒng)計(jì)量以及其它信息的,直接替代for循環(huán)),這樣后面實(shí)際操作時(shí)也比較方便。(這樣做的缺點(diǎn)是可能導(dǎo)致內(nèi)存占用過(guò)多,從而使并行出錯(cuò))

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

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

detectCores()

理論上這個(gè)值 ≥2,我們電腦就可以進(jìn)行并行操作(現(xiàn)在的電腦基本都是4往上的)。當(dāng)然通常我們不會(huì)使用所有的線程來(lái)進(jìn)行并行,不然。。。電腦很可能會(huì)崩。

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

parallel(簡(jiǎn)單)

一個(gè)是parallel包,此包最大的優(yōu)勢(shì)就是非常的便捷,只需將我們?cè)镜?code>apply()修改為parApply()lapply()修改為parLapply();sapply()修改為我們常用的parSapply()等等,然后再在開(kāi)頭和結(jié)尾添加上相應(yīng)的開(kāi)始并行與結(jié)束并行的語(yǔ)句即可。

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

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

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

輸出結(jié)果為:

[[1]]
[1] 1 1 1

[[2]]
[1] 2 4 8

[[3]]
[1]  3  9 27

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

library(parallel) # 載入parallel包

# 計(jì)算可用線程數(shù),并設(shè)置并行使用線程數(shù)
no_cores <- detectCores() - 1

# 初始化
cl <- makeCluster(no_cores)

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

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

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

輸出結(jié)果為:

[[1]]
[1] 1 1 1

[[2]]
[1] 2 4 8

[[3]]
[1]  3  9 27

到這里我們還沒(méi)完,前面初始化我們的并行,這里需要結(jié)束我們的并行,釋放我們用到的線程與內(nèi)存,返還給系統(tǒng)。具體使用如下語(yǔ)句:

stopCluster(cl)

至此,一個(gè)簡(jiǎn)單的并行就完成了。

但事情遠(yuǎn)遠(yuǎn)沒(méi)這么簡(jiǎn)單,在我們需要處理非常復(fù)雜的并行任務(wù),反復(fù)使用parallel庫(kù)中的并行方法時(shí),我們沒(méi)辦法將我們的線程數(shù)開(kāi)到最大,有時(shí)候甚至連一半都不行,它會(huì)出現(xiàn)下面所示的報(bào)錯(cuò):

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

這種情況出現(xiàn)的原因就很復(fù)雜了,這是因?yàn)椤罢{(diào)用核心數(shù)–計(jì)算機(jī)內(nèi)存”的不匹配造成的。如果你的數(shù)據(jù)集很大,調(diào)用了很多核心,那么你的計(jì)算機(jī)內(nèi)存如果不夠匹配,就會(huì)出現(xiàn)連接不上的不錯(cuò),甚至還出現(xiàn)卡機(jī)等現(xiàn)象。簡(jiǎn)言之就是爆內(nèi)存了。

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

使用更少的線程進(jìn)行并行;

如果你的電腦內(nèi)存非常小,有一個(gè)簡(jiǎn)單的方法確定你的最大使用線程:

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

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

不過(guò)后面我們介紹另一種并行方式snowfall相對(duì)而言就更加穩(wěn)定了(雖然代碼寫(xiě)起來(lái)會(huì)相對(duì)復(fù)雜一些),這個(gè)我們留待下一篇博客:R中兩種常用并行方法snowfall 中進(jìn)行詳細(xì)介紹。

以上就是R語(yǔ)言常用兩種并行方法之parallel詳解的詳細(xì)內(nèi)容,更多關(guān)于R語(yǔ)言并行方法parallel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • R語(yǔ)言ggplot2拼圖包patchwork安裝使用

    R語(yǔ)言ggplot2拼圖包patchwork安裝使用

    這篇文章主要介紹了R語(yǔ)言ggplot2拼圖包patchwork安裝使用的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Rstudio 修改工作路徑(三種方法總結(jié))

    Rstudio 修改工作路徑(三種方法總結(jié))

    這篇文章主要介紹了Rstudio 修改工作路徑(三種方法總結(jié)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • R語(yǔ)言繪制數(shù)據(jù)可視化Dumbbell?plot啞鈴圖

    R語(yǔ)言繪制數(shù)據(jù)可視化Dumbbell?plot啞鈴圖

    這篇文章主要為大家介紹了R語(yǔ)言繪制數(shù)據(jù)可視化Dumbbell?plot啞鈴圖的實(shí)現(xiàn)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • R語(yǔ)言中向量和矩陣簡(jiǎn)單運(yùn)算的實(shí)現(xiàn)

    R語(yǔ)言中向量和矩陣簡(jiǎn)單運(yùn)算的實(shí)現(xiàn)

    這篇文章主要介紹了R語(yǔ)言中向量和矩陣簡(jiǎn)單運(yùn)算的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • R語(yǔ)言繪制Vonoroi圖的完整代碼

    R語(yǔ)言繪制Vonoroi圖的完整代碼

    今天來(lái)給大家分享一篇教程關(guān)于R語(yǔ)言繪制Vonoroi圖的完整代碼,包括deldir包繪制Voronoi圖,ggplot2繪制Voronoi圖的實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • R語(yǔ)言中矩陣matrix和數(shù)據(jù)框data.frame的使用詳解

    R語(yǔ)言中矩陣matrix和數(shù)據(jù)框data.frame的使用詳解

    這篇文章主要介紹了R語(yǔ)言中矩陣matrix和數(shù)據(jù)框data.frame的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • R語(yǔ)言繪圖樣式設(shè)置操作(符號(hào),線條,顏色,文本屬性)

    R語(yǔ)言繪圖樣式設(shè)置操作(符號(hào),線條,顏色,文本屬性)

    這篇文章主要介紹了R語(yǔ)言繪圖樣式設(shè)置操作(符號(hào),線條,顏色,文本屬性),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • R語(yǔ)言ggplot2實(shí)現(xiàn)將多個(gè)照片拼接到一起

    R語(yǔ)言ggplot2實(shí)現(xiàn)將多個(gè)照片拼接到一起

    本文主要介紹了R語(yǔ)言ggplot2實(shí)現(xiàn)將多個(gè)照片拼接到一起,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • R語(yǔ)言繪制頻率直方圖的案例

    R語(yǔ)言繪制頻率直方圖的案例

    這篇文章主要介紹了R語(yǔ)言繪制頻率直方圖的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • R語(yǔ)言中循環(huán)的相關(guān)知識(shí)詳解

    R語(yǔ)言中循環(huán)的相關(guān)知識(shí)詳解

    這篇文章主要為大家詳細(xì)介紹了R語(yǔ)言中循環(huán)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)R語(yǔ)言有一定的幫助,感興趣的可以了解一下
    2023-03-03

最新評(píng)論