最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

并行計算

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

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

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

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

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

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

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

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

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

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

detectCores()

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

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

parallel(簡單)

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

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

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

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包

# 計算可用線程數(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

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

stopCluster(cl)

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • R語言的數(shù)據(jù)輸入深入講解

    R語言的數(shù)據(jù)輸入深入講解

    這篇文章主要介紹了R語言的數(shù)據(jù)輸入深入講解,代碼實例講解的很清晰,有需要的同學可以學習下
    2021-03-03
  • R語言安裝以及手動安裝devtools的詳細圖文教程

    R語言安裝以及手動安裝devtools的詳細圖文教程

    R語言是一個強大的數(shù)據(jù)分析工具,其強大之處在于有各種各樣的R包幫助其實現(xiàn)各種各樣的功能,下面這篇文章主要給大家介紹了關(guān)于R語言安裝以及手動安裝devtools的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • R語言實現(xiàn)將分類變量轉(zhuǎn)換為啞變量(dummy vairable)

    R語言實現(xiàn)將分類變量轉(zhuǎn)換為啞變量(dummy vairable)

    這篇文章主要介紹了R語言實現(xiàn)將分類變量轉(zhuǎn)換為啞變量(dummy vairable),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解R語言圖像處理EBImage包

    詳解R語言圖像處理EBImage包

    EBImage是R的一個擴展包,提供了用于讀取、寫入、處理和分析圖像的通用功能,非常容易上手,本文給大家介紹下R語言圖像處理EBImage包的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • R語言繪制折線圖實例分析

    R語言繪制折線圖實例分析

    在本篇文章里小編給大家整理了一篇關(guān)于R語言繪制折線圖實例分析內(nèi)容,有需要的小伙伴可以跟著學習參考下。
    2021-04-04
  • R語言關(guān)于二項分布知識點總結(jié)

    R語言關(guān)于二項分布知識點總結(jié)

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于R語言關(guān)于二項分布知識點總結(jié)內(nèi)容,有興趣的朋友們可以學習下。
    2021-05-05
  • R語言繪制corrplot相關(guān)熱圖分析美化示例及詳細圖解

    R語言繪制corrplot相關(guān)熱圖分析美化示例及詳細圖解

    這篇文章主要為大家介紹了R語言corrplot相關(guān)熱圖分析美化示例及詳細圖解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • R語言 install.packages 無法讀取索引的解決方案

    R語言 install.packages 無法讀取索引的解決方案

    這篇文章主要介紹了R語言 install.packages 無法讀取索引的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 詳解R語言的24個高效操作技巧

    詳解R語言的24個高效操作技巧

    這篇文章主要為大家介紹了R語言的24個高效操作技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • R studio 批量注釋的快捷方式

    R studio 批量注釋的快捷方式

    這篇文章主要介紹了R studio 批量注釋的快捷方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

古田县| 阳谷县| 伊金霍洛旗| 乌恰县| 安岳县| 和林格尔县| 德阳市| 勐海县| 山阳县| 桐乡市| 仙桃市| 大英县| 东丽区| 铜山县| 西宁市| 大田县| 依兰县| 潢川县| 江川县| 如东县| 韶山市| 特克斯县| 仪陇县| 潮安县| 工布江达县| 舟曲县| 开鲁县| 平乡县| 南京市| 灵台县| 仙桃市| 东乡| 仲巴县| 高要市| 新闻| 红原县| 普兰店市| 泾阳县| 贡觉县| 无锡市| 于都县|