假设我有一个矩阵bigm
。我需要使用此矩阵的随机子集,并将其提供给机器学习算法,例如svm
。矩阵的随机子集只能在运行时知道。此外,还有其他参数也可以从网格中选择。
所以,我有看起来像这样的代码:
foo = function (bigm, inTrain, moreParamsList) {
parsList = c(list(data=bigm[inTrain, ]), moreParamsList)
do.call(svm, parsList)
}
我想知道的是R是否使用新内存将
bigm[inTrain, ]
对象保存在parsList中。 (我的猜测是这样。)我可以使用哪些命令自己测试这些假设?另外,有没有一种方法可以在R中使用子矩阵而不使用新的内存?编辑:
另外,假设我正在使用mclapply(在Linux上)调用
foo
,其中bigm
驻留在父进程中。这是否意味着我要使mc.cores
成为bigm
副本的数量,还是所有内核都只使用父级对象?跟踪内存位置和在不同内核中制造的对象的消耗有什么功能和试探法?
谢谢。
最佳答案
我将把我在该主题上的研究发现的内容放在这里:
我不认为使用mclapply
会根据mc.cores
手册中的内容来制作bigm
的multicore
副本:
In a nutshell fork spawns a copy (child) of the current process, that can work in parallel
to the master (parent) process. At the point of forking both processes share exactly the
same state including the workspace, global options, loaded packages etc. Forking is
relatively cheap in modern operating systems and no real copy of the used memory is
created, instead both processes share the same memory and only modified parts are copied.
This makes fork an ideal tool for parallel processing since there is no need to setup the
parallel working environment, data and code is shared automatically from the start.