2013-10-25 76 views
3

Snow並行計算結束後是否需要刪除導出的變量?我發現即使調用了clusterEvalQ,'rsession'進程的內存也沒有太大變化。我懷疑是我的示例代碼如下Snow結束後是否需要刪除導出的變量

library(snow) 
cl2 <- makeCluster(3, type = "SOCK") 
data <- rep(1:10000,10000) 

clusterExport(cl2,"data") 

# is remove neccssary? 
clusterEvalQ(cl2, rm(data, pos=globalenv())) 

stopCluster(cl2) 

enter image description here

+2

嘗試調用'gc'。看起來像'clusterExport'正在製作出口數據的額外副本。如果您要停止羣集,我認爲不需要移除。 – mrip

回答

1

去除集羣工人導出的數據將釋放的集羣存儲的工人一些內存的問題,但它不確實的主進程釋放內存,這是你的本地R會話。如果你要在不需要數據的集羣上做更多的工作,這可能會非常有用,但如果你只是要停止集羣,那麼沒有真正的指向。

當您調用clusterExport時,主進程上的內存使用量可能會增加很多,因爲它必須序列化所有導出的對象,但它不保留對該內存的任何引用,所以它最終應該全部釋放垃圾收集。沒有什麼是你必須要做的,但我同意mrip,如果你想早點釋放它,你可以撥打gc。我不相信你的示例代碼有任何問題。