能够在窗口上执行多线程是很棒的,但是这个问题可能比我想象的要困难。:(
在survey:::svyby.default内部有一个块,它是lapply或mclapply,这取决于multicore=TRUE和您的操作系统。无论如何,windows用户都会被迫进入lapply循环,我想知道是否有任何方法可以替代mclapply路径。加快计算速度。
我对并行处理的内部不太了解,但我做了一些实验,看看是否有任何一个窗口--可接受的替代方案--能起作用。首先,我尝试用
mclapply <-
function( X , FUN , ... ){
clusterApply(
x = X ,
fun = FUN ,
cl = makeCluster( detectCores() ) , ... )
}接下来,我使用fixInNamespace( svyby.default , "survey" )删除行if (multicore) parallel:::closeAll()
但那只会让我觉得
> svyby(~api99, ~stype, dclus1, svymean , multicore=TRUE )
Error in checkForRemoteErrors(val) :
3 nodes produced errors; first error: object 'svymean' not found发布于 2014-07-14 13:03:08
引用R survey软件包的作者Thomas博士的话回应我的询问--
不是的。这种并行化方法依赖于分叉,而Windows不支持分叉。 有必要重写它以使用clusterApply(),而且我非常肯定通信开销会占用速度增益。通过分叉,子进程可以免费获得父进程数据的副本--所有这些都是由虚拟<->物理内存转换硬件完成的--但是使用集群方法,R必须显式地将数据发送到子进程。
https://stackoverflow.com/questions/24737166
复制相似问题