2010-04-23 18 views
8

Estoy publicando esta pregunta para pedir consejos sobre cómo optimizar el uso de múltiples procesadores de R en una máquina con Windows XP.procesamiento de múltiples núcleos en R en Windows XP - a través de doMC y foreach

Por el momento estoy creando 4 scripts (cada script con, por ejemplo, (i en 1: 100) y (i en 101: 200), etc.) que ejecuto en 4 sesiones R diferentes al mismo tiempo. Esto parece usar toda la CPU disponible.

Sin embargo, me gustaría hacerlo un poco más eficiente. Una solución podría ser usar el paquete "doMC" y el paquete "foreach", pero esto no es posible en R en una máquina con Windows.

p. Ej.

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)) 

¿Alguna solución o consejo?

Respuesta

4

Para completar, esta es la respuesta solicitada al comentario de Tal, que proporciona una alternativa simple y portátil. La respuesta consiste en correr

> library(snow) 
> help(makeCluster) 

y en funcionamiento las tres primeras líneas de código desde la parte superior de los ejemplos: Sección:

> 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" 
> 

¿Era realmente tan difícil?

Los paquetes complementarios como doSNOW y, posteriormente, foreach pueden hacer uso de esto de forma portátil.

+0

Hola Dirk. Dos cosas: 1) Probé el código en mi computadora y se congeló en "makeCluster" 2) Recuerdo la última vez que probé que no funcionaba con los dos núcleos que tenía, pero simplemente ejecuté dos instancias R en el mismo.Qué piensas ? Tal –

+0

¿Qué te hace pensar que las dos instancias funcionan en el mismo núcleo? A menos que habilite 'fijación de CPU' (generalmente una función que depende bastante del sistema operativo), el sistema operativo asignará trabajos como lo considere conveniente. Numerosas personas, incluido el autor de SNOW, lo usan de esta manera para el propósito declarado de "trabajo paralelo fácil en Windows". Además, los enchufes pueden no ser confiables a mayor escala. El trabajo real debe hacerse con MPI. Por último, en cuanto a la máquina colgando: no tengo idea. Evito este sistema operativo donde puedo, que es casi todo el tiempo. –

+0

Hola Dirk, Gracias por las respuestas. Con respecto a qué núcleo se está utilizando, simplemente verifiqué su uso en el administrador de tareas de Windows. Pero es de memoria, y podría estar equivocado. Mejor, Tal –

4

Pruebe el doSNOW backend paralelo: se admite de fábrica en Windows. Úselo con un clúster de toma de nieve.

+0

¿Podría dar un código de ejemplo simple para eso? (Recuerdo haberlo intentado una vez y que no funcionó para mí) Gracias. –

+0

Por favor, vea la respuesta que acabo de publicar. –

3

Puede probar doSMP de REvolution Computing. Para obtener más información, consulte la publicación del blog: Parallel Multicore Processing with R (on Windows)

+1

Debería esforzarme para centrarme en los paquetes CRAN (o BioC o ...) en lugar de extensiones comerciales, ya que esto nos lleva a un camino hacia el código no portátil utilizando módulos no públicos. –

+2

Hola Dirk, en general estoy de acuerdo contigo. Específicamente en este caso, DoSMP es GPL y gratuito (y en la publicación vinculada a él se dice que puede transferir esa biblioteca a su propia instalación R). Cheers, Tal –

+1

¿Puede pedirle a REvo que lo cargue en CRAN, o hacerlo usted mismo si se trata de GPL que le otorga derechos de redistribución? –

Cuestiones relacionadas