windows XP上R中的多核处理-通过doMC和foreach

windows XP上R中的多核处理-通过doMC和foreach,windows,r,parallel-processing,multicore,Windows,R,Parallel Processing,Multicore,我发布这个问题是为了征求关于如何在WindowsXP机器上优化使用R中的多处理器的建议 目前,我正在创建4个脚本(每个脚本都带有例如for(1:100中的I)和(101:200中的I)等),我同时在4个不同的R会话中运行这些脚本。这似乎使用了所有可用的cpu 不过,我希望这样做更有效率一点。一种解决方案是使用“doMC”和“foreach”包,但这在Windows机器上的R中是不可能的 e、 g 库(“foreach”) 图书馆(“结构变更”) 库(“doMC”)#这在windows计算机上可能

我发布这个问题是为了征求关于如何在WindowsXP机器上优化使用R中的多处理器的建议

目前,我正在创建4个脚本(每个脚本都带有例如for(1:100中的I)和(101:200中的I)等),我同时在4个不同的R会话中运行这些脚本。这似乎使用了所有可用的cpu

不过,我希望这样做更有效率一点。一种解决方案是使用“doMC”和“foreach”包,但这在Windows机器上的R中是不可能的

e、 g

库(“foreach”)
图书馆(“结构变更”)
库(“doMC”)#这在windows计算机上可能吗?
registerDoMC(2)#用于具有两个核心(处理器)的计算机
##尼罗河数据只有一个断点:年流量在1898年下降
##因为第一座阿什旺大坝建成了
数据(“尼罗河”)
地块(尼罗河)
##F统计数据表示一个断点
尼罗财政司司长:如果能测试一下,那就太好了。
行(断点(fs.nile))

有任何解决方案或建议吗?

请尝试
doSNOW
并行后端-它在Windows上受到开箱即用的支持。将其与雪插座群集一起使用。

您可以从中尝试
doSMP

有关更多信息,请参阅此博客帖子:

完整性,以下是对好未来评论的要求回答,提供了一个简单且可移植的替代方案。答案是跑步

 > 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"
> 
>cl clusterApply(cl,1:2,get(“+”),3)
[[1]]
[1] 4
[[2]]
[1] 5
>停止簇(cl)
>.Platform$OS.type
[1] “窗口”
> 
真的那么难吗

附加软件包,如
可以以可移植的方式利用它。

我认为我们应该努力关注CRAN(或BioC或…)包,而不是商业扩展,因为这让我们走上了使用非公共模块的不可移植代码的道路。嗨,德克,总的来说,我同意你的看法。特别是在本例中,doSMP是GPL并且是免费的(在链接到它的帖子中说,您可以将该库移植到您自己的R安装中)。干杯TalCan你能让REvo把它上传到CRAN吗,我同意德克的观点——追求
doSMP
软件包需要向革命计算提供个人信息,然后下载他们的R版本——我上次检查的版本是基于2.9.1的,现在已经过时了两个主要版本。更新-我上传了我的博客的软件包。没有(很容易!)可供下载。(这是在获得革命的许可后完成的。不是因为我在法律上需要这样做,而是因为这似乎是一件好事)你能给出一个简单的示例代码吗?(我记得我试过一次,但它对我不起作用)谢谢。请看我刚刚发布的答案。嗨,德克。两件事:1)我在我的计算机上尝试了代码,但它在“makeCluster”上冻结了2)我记得上次我尝试它时,它与我拥有的两个内核不起作用-只是在同一个内核上运行了两个R实例。你怎么认为?Tal是什么让你认为这两个实例运行在同一个内核上?除非您启用“cpu固定”(通常是一种依赖于操作系统的功能),否则操作系统将根据需要分配作业。许多人,包括斯诺的作者,都用这种方式来达到“在Windows上轻松并行工作”的目的。此外,插座在更大范围内可能不可靠。真正的工作应该用MPI来完成。最后,关于机器悬挂:不知道。我尽量避免使用这个操作系统,这几乎是所有的时间。嗨,德克,谢谢你的回答。关于正在使用的核心-我只是在windows任务管理器上检查了它的使用情况。但这是出于记忆,我可能错了。最好的,塔尔
> 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"
>