能够在Windows上进行多线程会很棒,但也许这个问题比我想象的更难...... :(
在survey:::svyby.default
内部有一个块,lapply
或mclapply
取决于multicore=TRUE
和您的操作系统。无论如何,Windows用户都被强制进入lapply
循环,我想知道是否有任何方法可以沿着mclapply
路径前进......加快计算速度。
我不太了解并行处理的内部,但我做了一些实验,看看是否有任何Windows可接受的替代方案可行。首先我尝试用
覆盖mclapplymclapply <-
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
答案 0 :(得分:4)
引用R survey
包裹的作者Thomas Lumley博士回应我的询问 -
没有。这种并行化的方法依赖于分叉,即Windows 不支持。
有必要重写它以使用clusterApply(),我就是 非常确定通信开销会消耗速度增益。同 forking,子进程获取父进程数据的副本 免费 - 全部由虚拟&lt; - &gt;物理内存翻译完成 硬件 - 但使用集群方法R必须将数据发送到 儿童过程明确。