在Windows XP上通过doMC和foreach实现R的多核处理

8
我发这个问题是为了寻求关于如何在Windows XP机器上优化使用多处理器的建议。
目前,我正在创建4个脚本(每个脚本都有例如for (i in 1:100)和(i in 101:200)等),并在同时运行的4个不同的R会话中运行它们。这似乎使用了所有可用的CPU。
但是,我希望能更加高效地完成这项任务。一种解决方案可能是使用“doMC”和“foreach”包,但这在Windows机器上的R中是不可能的。
例如:
library("foreach")
library("strucchange")
library("doMC") # would this be possible on a windows machine?
registerDoMC(2)  # for a computer with two cores (processors)
## Nile data with one breakpoint: the annual flows drop in 1898
## because the first Ashwan dam was built
data("Nile")
plot(Nile)

## F statistics indicate one breakpoint
fs.nile <- Fstats(Nile ~ 1)
plot(fs.nile)
breakpoints(fs.nile)     # , hpc = "foreach" --> It would be great to test this.
lines(breakpoints(fs.nile))

有什么解决方案或建议吗?
3个回答

4

为了完整起见,这里是对Tal评论的要求回答,提供一个简单且可移植的替代方案。答案包括运行以下内容:

 > library(snow)
 > help(makeCluster)

运行示例部分顶部的前三行代码:

> cl <- makeCluster(c("localhost","localhost"), type = "SOCK")
> clusterApply(cl, 1:2, get("+"), 3)
[[1]]
[1] 4

[[2]]
[1] 5

> stopCluster(cl)
> .Platform$OS.type
[1] "windows"
> 

这真的那么难吗?

doSNOW这样的附加包,然后使用foreach,可以以可移植的方式使用它。


嗨,Dirk。两件事:1)我在我的电脑上尝试了这段代码,在“makeCluster”处卡住了。2)我记得上次尝试时,它无法使用我拥有的两个核心,但是在同一个R实例上运行了两个。你怎么看?Tal - Tal Galili
你怎么知道这两个实例运行在同一个核心上?除非你启用了“CPU绑定”(通常是一个相当依赖于操作系统的功能),否则操作系统会根据自己的判断分配任务。许多人,包括SNOW的作者,都以这种方式使用它,目的是在Windows上轻松进行并行工作。此外,套接字在更大规模上可能不可靠。真正的工作应该使用MPI完成。最后,关于机器挂起的问题:我不知道。我尽可能避免使用这个操作系统,几乎所有时间都是这样。 - Dirk Eddelbuettel
嗨,Dirk, 感谢您的回答。关于使用的核心是什么 - 我只是在Windows任务管理器中检查了它的使用情况。但这是从内存中获取的,我可能是错的。最好,Tal - Tal Galili

4
尝试使用 doSNOW 并行后端- 它在 Windows 系统上支持开箱即用。与 snow socket 集群一起使用。

请问您能否提供一个简单的示例代码呢?(我记得曾经尝试过,但是没有成功)谢谢。 - Tal Galili
请查看我刚刚发布的答案。 - Dirk Eddelbuettel

3

1
我们应该努力专注于CRAN(或BioC或...)包,而不是商业扩展,因为这会使我们走上一条使用非公共模块的非便携式代码之路。 - Dirk Eddelbuettel
2
嗨,Dirk,总的来说我同意你的观点。具体到这种情况下——doSMP是GPL和免费的(在链接的帖子中提到,你可以将该库移植到自己的R安装中)。祝好,Tal - Tal Galili
1
请问您能否请REvo将其上传到CRAN,或者如果确实是GPL许可并允许再分发的话,请您自行上传。 - Dirk Eddelbuettel
1
我同意Dirk的观点- 追求doSMP包需要向REvolution Computing提供个人信息,然后下载他们的R版本- 上次我检查时基于2.9.1,现在已经过时了两个主要版本。 - Sharpie
嗨,Dirk,我与REvolution没有任何关联 - 所以我要求他们重新分发与其他人一样。我不会自己将其上传到CRAN,因为这可能会引起不必要的摩擦。我将通过电子邮件联系David,我仅从他的博客中了解他,并询问他的意见。 - Tal Galili
1
更新 - 我已将软件包上传到我的博客。现在可以(轻松地!)下载。(在获得REvolution的许可后完成。这不是因为我必须合法地这样做,而只是因为这似乎是正确的做法) - Tal Galili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接