Snow结束后是否有必要删除导出的变量

时间:2013-10-25 18:17:01

标签: r parallel-processing snow

在Snow的并行计算结束后是否需要删除导出的变量?我发现即使调用了clusterEvalQ,'rsession'进程的内存也没有太大改变。我怀疑下面的示例代码存在一些内存问题

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

1 个答案:

答案 0 :(得分:1)

从群集工作线程中删除导出的数据将释放群集工作线程上的内存,但它不会释放主进程(即本地R会话)上的内存。如果您要在不需要该数据的集群上做更多工作,这可能非常有用,但如果您只是要停止集群,则没有真正的意义。

当您调用clusterExport时,主进程上的内存使用可能会增加很多,因为它必须序列化所有导出的对象,但它不会保留对该内存的任何引用,因此它最终都应该被垃圾收集释放。没有什么是你必须要做的,但我同意mrip你可以打电话gc如果你想尽快释放它。我不相信您的示例代码有任何问题。