簡體   English   中英

使用bigmemory處理大於R中物理RAM的數據?

[英]Work on data that larger than physical RAM in R using bigmemory?

我正在開發一個名為biglasso的R包,該包通過使用bigmemory C ++庫中實現的內存映射技術,適合大數據集的R中的套索模型。 具體來說,對於非常大的數據集(例如10GB),首先使用存儲在磁盤上的內存映射文件創建文件支持的big.matrix 然后將模型擬合算法訪問big.matrix經由MatrixAccessor在C ++庫中定義以獲得數據進行計算。 我假定內存映射技術可以處理大於可用RAM的數據,如bigmemory論文所述

對於我的程序包,如果數據大小不超過可用RAM,則此時一切正常。 但是,當數據大於RAM時,代碼像永遠一樣運行,沒有抱怨,沒有錯誤,沒有停止。 在Mac上,我檢查了top命令,並注意到該作業的狀態一直在“睡眠”和“運行”之間切換,我不確定這是什么意思,或者這表明發生了什么。

[編輯:]

通過“無法完成”,“永遠運行” ,我的意思是:使用16 GB RAM處理18 GB數據不能完成1.5個小時以上,但是如果使用32 GB RAM可以在5分鍾內完成。

[結束編輯]

問題:

(1)我基本上了解內存映射利用虛擬內存,以便它可以處理大於RAM的數據。 但是處理大於RAM的對象需要多少內存? 有上限嗎? 還是由虛擬內存的大小決定? 由於虛擬內存就像是無限的(受硬盤驅動器限制),這是否意味着內存映射方法可以處理比物理RAM大得多的數據?

(2)有沒有一種方法可以分別測量物理RAM和虛擬內存中使用的內存?

(3)我做錯了什么嗎? 我在這里遇到問題的可能原因是什么?

非常感謝任何反饋! 提前致謝。


以下是我在Mac和Windows上進行的實驗以及相關問題的一些詳細信息。

  1. 在Mac OS上:物理RAM:16GB; 測試數據:18GB。 這是內存使用情況的屏幕截圖。 代碼無法完成。

在此處輸入圖片說明

[編輯2]

在此處輸入圖片說明

我在這里附上了CPU使用率和歷史記錄。 R計算只使用一個核。 奇怪的是系統使用6%的CPU,而User僅使用3%的CPU。 並且在CPU歷史記錄窗口中,有很多紅色區域。

問題 :這表明什么? 現在我懷疑是CPU緩存已滿。 那正確嗎? 如果是這樣,我該如何解決這個問題?

[END EDIT 2]

問題:

(4)據我所知,“存儲器”列表示在物理RAM中使用的存儲器,而“真實存儲器”欄示出了總的內存使用,如指出這里 那是對的嗎? 使用的內存總是顯示〜2GB,所以我不明白為什么RAM中沒有使用那么多的內存。

(5)一個小問題。 正如我觀察到的那樣,似乎“使用的內存” +“高速緩存”必須始終小於“物理內存”(在底部的中間部分)。 這個對嗎?


  1. 在Windows計算機上:物理RAM:8GB; 測試數據:9GB。 我觀察到的是,當我開始工作時,內存使用量一直在增加,直到達到極限為止。 該工作也無法完成。 我還測試了biganalytics軟件包中的功能(也使用bigmemory),發現內存也耗盡了。

在此處輸入圖片說明

“無法完成”在這里含糊不清。 如果您等待足夠長時間,則可能是您的計算將完成。 使用虛擬內存時,可以在磁盤上和磁盤下對其進行分頁,這比將其保留在RAM中要慢數千到數百萬倍。 您將看到的速度下降取決於算法訪問內存的方式。 如果您的算法僅以固定順序訪問每個頁面一次,則可能不會花費太長時間。 如果您的算法在您的數據結構中四處跳動O(n ^ 2)次,那么分頁將使您的速度減慢太多,可能無法完成。

在Windows中,檢出TaskManager->性能-> Resourcemonitor->磁盤活動以查看您的進程ID將多少數據寫入磁盤可能是有用的。 如果寫入速度成為瓶頸等,它可以讓您了解從RAM向虛擬內存中有多少數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM