如何让R使用所有处理器?

Dav*_*ith 30 linux windows parallel-processing packages r

我有一台运行Windows XP的四核笔记本电脑,但是看看任务管理器R似乎一次只能使用一个处理器.如何让R使用所有四个处理器并加速我的R程序?

han*_*7id 42

我有一个基本系统,我在"for"循环中并行化我的程序.一旦了解了需要完成的工作,这种方法很简单.它只适用于本地计算,但这似乎是你所追求的.

您需要安装这些库:

library("parallel")
library("foreach")
library("doParallel")
Run Code Online (Sandbox Code Playgroud)

首先,您需要创建计算群集.我经常在运行并行程序时做其他事情,所以我想保持一个开放状态."detectCores"函数将返回计算机中的核心数.

cl <- makeCluster(detectCores() - 1)
registerDoParallel(cl, cores = detectCores() - 1)
Run Code Online (Sandbox Code Playgroud)

接下来,使用"foreach"命令以及%dopar%运算符调用for循环.我总是使用"try"包装器来确保丢弃操作失败的任何迭代,并且不会破坏其他好的数据.您需要指定".combine"参数,并将任何必要的包传递到循环中.请注意,"i"定义为等号,而不是"in"运算符!

data = foreach(i = 1:length(filenames), .packages = c("ncdf","chron","stats"),
               .combine = rbind) %dopar% {
  try({
       # your operations; line 1...
       # your operations; line 2...
       # your output
     })
}
Run Code Online (Sandbox Code Playgroud)

完成后,清理:

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)


Dir*_*tel 29

高性能CRCRAN任务视图R列出了几个选项.XP是有限制的,但你仍然可以像用几分钟内插座工作.


csg*_*pie 15

从版本2.15开始,R现在支持多核计算.只需加载并行包

library("parallel")
Run Code Online (Sandbox Code Playgroud)

并查看相关的插图

vignette("parallel")
Run Code Online (Sandbox Code Playgroud)


JD *_*ong 7

我听说REvolution R支持更好的多线程,然后R和REvolution的典型CRAN版本也支持Windows中的64位R. 我一直在考虑购买副本,但我发现他们的价格不透明.他们的网站上没有价目表.很奇怪.

  • 如果你不得不问价格,你买不起. (9认同)
  • 学术定价列于此处:http://www.revolution-computing.com/industry/academic.php. (3认同)
  • 它现在被微软收购了,而且没有免费的学术版本了.但是你可以免费安装http://www.revolutionanalytics.com/revolution-r-open,它还附带了intel MKL库.在Windows上,如果您从该安装中获取libiomp5md.dll,Rblas.dll和Rlapack.dll文件并覆盖您希望使用的任何R安装中的文件,那么您将拥有多线程矩阵操作(通常为10-20 x加速).或者来自https://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/binary/windows/x64/ als的Atlas Rblas.dll工作并且几乎一样快. (2认同)

Pet*_*r M 6

我相信这个multicore包适用于XP.它提供了一些基本的多进程功能,特别是通过提供直接替换lapply()和一种评估新线程中表达式的简单方法(mcparallel()).

  • 多核软件包需要符合POSIX标准的操作系统,因此它无法在Win中运行.您可以在此处阅读要求:http://cran.r-project.org/web/packages/multicore/index.html (2认同)