将多个操作系统的并行或双并行作为CRAN包使用的自定义包
我正在为R构建一个包,我希望它能够跨平台。我正在Linux下开发,函数将多个操作系统的并行或双并行作为CRAN包使用的自定义包,r,parallel-processing,cran,R,Parallel Processing,Cran,我正在为R构建一个包,我希望它能够跨平台。我正在Linux下开发,函数mclappy将从parallel包中使用。Windows不支持此软件包(它使用doParallel)。我真的很喜欢parallel软件包,虽然它简单且速度快,但我不知道这是否应该成为为CRAN提供两个不同版本的软件包的原因,用于单独的操作系统(似乎需要额外维护),更不用说它是否被允许 想法 另外,现在我考虑的是并行 mclapply(ldata, function(x), mc.cores=cores) cl <-
mclappy
将从parallel
包中使用。Windows不支持此软件包(它使用doParallel
)。我真的很喜欢parallel
软件包,虽然它简单且速度快,但我不知道这是否应该成为为CRAN提供两个不同版本的软件包的原因,用于单独的操作系统(似乎需要额外维护),更不用说它是否被允许
想法
另外,现在我考虑的是并行
mclapply(ldata, function(x), mc.cores=cores)
cl <- makeCluster(cores)
parLapply(cl, ldata, function(x))
等同于双平行
mclapply(ldata, function(x), mc.cores=cores)
cl <- makeCluster(cores)
parLapply(cl, ldata, function(x))
cl首先,mclappy
和parlappy
都在parallel
包中,尽管mclappy
在Windows上实际上并不并行运行parlappy
在所有支持的平台上并行运行,但并不总是像mclappy
那样高效。doParallel
包与foreach
包一起使用,充当并行
包的适配器
要编写既适用于Windows又适用于非Windows的软件包,您有多种合理的选择:
- 只要使用
parlappy
,因为它在任何地方都有效
- 在Windows上使用
parlappy
,在其他地方使用mclappy
- 使用
doParallel
和foreach
doParallel
软件包很方便,因为它在非Windows平台上使用了mclappy
。例如:
library(doParallel)
registerDoParallel()
foreach(i=1:10, .options.snow=list(preschedule=TRUE)) %dopar% {
Sys.sleep(2)
}
这将在Linux和Mac OS X上使用mclappy
,但会在Windows的后台自动创建PSOCK群集对象。使用preschedule=TRUE
(添加在doParallel
1.0.3中)将导致doParallel
在内部使用clusterApply
预先安排任务,这与parlappy
非常相似
请注意,如果显式创建并注册集群对象,则无论平台如何,都不会使用mclappy
。它可以很好地工作,但可能没有那么有效。要使用mclappy
,必须使用数字参数调用registerDoParallel
,或者根本不调用参数
您可以查看boot
包的源代码,了解如何使用mclappy
或parlappy
的示例,具体取决于您的平台。为什么不同时使用parlappy
包中的parlappy
,因为我认为这是跨平台的(或者我希望是这样,因为我在我的一个软件包中使用了它)。您还可以将if(){}else{}
与Sys.info()[“sysname”]
使用正确的设置。@泰勒·林克,parlappy是否显示每个新脚本的.Rprofile加载?如果是,那么我认为它应该很好,因为它不是fork。parallel
在windows上受支持,并且可以使用mclappy
。它只是恢复到串行求值,就像一个简单的lappy
@MartinMorgan Bu那么这不是期望的回退行为不幸的是。。。