Tengo un equipo portátil de cuatro núcleos con Windows XP, pero al mirar el Administrador de tareas R, parece que solo utiliza un procesador a la vez. ¿Cómo puedo hacer que R use los cuatro procesadores y acelere mis programas R?¿Cómo hacer que R use todos los procesadores?
Respuesta
Oigo decir que REvolution R es compatible con un multihilo mejor que la versión típica CRAN de R y REvolution también admite 64 bit R en Windows. He estado considerando comprar una copia, pero me pareció opaca su fijación de precios. No hay una lista de precios en su sitio web. Muy raro.
Si tiene que preguntar el precio, no puede pagarlo. – Buhb
El precio académico se detalla aquí: http://www.revolution-computing.com/industry/academic.php. –
Ha sido comprado por Microsoft ahora, y ya no hay una versión académica gratuita. Pero puede instalar http://www.revolutionanalytics.com/revolution-r-open de forma gratuita, y también viene con las bibliotecas Intel MKL. En Windows, si toma los archivos libiomp5md.dll, Rblas.dll y Rlapack.dll de esa instalación y sobrescribe los que están en la instalación de R que desee utilizar, tendrá operaciones de matriz multiproceso (por lo general 10-20 x aceleración). O el Atlas Rblas.dll de https://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/binary/windows/x64/ als funciona y es casi igual de rápido. –
El CRAN Task View on High-Performance Compting with R enumera varias opciones. XP es una restricción, pero todavía obtienes algo como snow para trabajar usando sockets en minutos.
En Windows, creo que la mejor manera de hacerlo sería probablemente con foreach y nieve como dijo David Smith.
Sin embargo, los sistemas basados en Unix/Linux pueden calcular utilizando múltiples procesos con el paquete 'multinúcleo'. Proporciona una función de alto nivel, 'mclapply', que realiza una lista de comprensión en múltiples núcleos. Una ventaja del paquete 'multinúcleo' es que cada procesador obtiene una copia privada del entorno global que puede modificar. Inicialmente, esta copia es solo un indicador del entorno global, lo que hace que el intercambio de variables sea extremadamente rápido si el entorno global se trata como de solo lectura.
Rmpi requiere que los datos se transfieran explícitamente entre procesos R en lugar de trabajar con el enfoque de cierre 'multinúcleo'.
- Dan
creo que el paquete de multicore
funciona en XP. Ofrece algunas capacidades básicas de multiprocesos, especialmente ofreciendo un reemplazo directo para lapply()
y una manera simple de evaluar una expresión en un nuevo hilo (mcparallel()
).
la caída en reemplazo de 'lapply()' se llama 'mclapply()'. Es realmente así de simple: N procesadores son N veces más rápidos (siempre que todo el trabajo pesado esté dentro de la función que se está aplicando) –
el paquete multinúcleo requiere un OS compatible con POSIX, por lo que no funciona en Win. Puede leer los requisitos aquí: http://cran.r-project.org/web/packages/multicore/index.html –
'doSMP' proporciona una funcionalidad similar a' multicore' en Windows, y está [disponible en CRAN] (http://cran.r-project.org/web/packages/doSMP/index.html) –
A partir de la versión 2.15, R ahora viene con soporte nativo para cálculos multi-core. Sólo tiene que cargar el paquete en paralelo
library("parallel")
y echa un vistazo a la viñeta asociado
vignette("parallel")
Bootstrapping a través del arranque del paquete también puede ser de interés y se explica en ese archivo. – MistereeDevlord
@MistereeDevlord Ah gracias. No estoy seguro de cómo me perdí eso. – csgillespie
Tengo un sistema básico que utilizo en el que paralelizar mis programas en los bucles "for". Este método es simple una vez que comprenda lo que debe hacerse. Solo funciona para la informática local, pero parece ser lo que buscas.
Tendrá instaladas estas bibliotecas:
library("parallel")
library("foreach")
library("doParallel")
En primer lugar es necesario crear el clúster de computación. Normalmente hago otras cosas mientras ejecuto programas paralelos, así que me gusta dejar uno abierto. La función "detectarCores" devolverá la cantidad de núcleos en su computadora.
cl <- makeCluster(detectCores() - 1)
registerDoParallel(cl, cores = detectCores() - 1)
A continuación, llame a su bucle con el comando "foreach", junto con el operador% dopar%. Siempre utilizo un contenedor "try" para asegurarme de que las iteraciones en las que fallan las operaciones sean descartadas y no interrumpan los datos que de otra manera serían buenos. Deberá especificar el parámetro ".combine" y pasar los paquetes necesarios al ciclo. Tenga en cuenta que "i" se define con un signo igual, no con un operador "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
})
}
Una vez que haya terminado, limpiar con:
stopCluster(cl)
Si usted hace una gran cantidad de operaciones de la matriz y está utilizando Windows puede instalar revolutionanalytics.com/revolution-r-open de forma gratuita, y éste viene con el bibliotecas MKL de Intel que te permiten realizar operaciones de matriz multiproceso. En Windows, si toma los archivos libiomp5md.dll, Rblas.dll y Rlapack.dll de esa instalación y sobrescribe los de la versión R que desee usar, tendrá operaciones de matriz de subprocesos múltiples (normalmente obtendrá una aceleración de 10-20 x para operaciones de matriz). O puede utilizar el Atlas Rblas.dll desde prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/binary/windows/x64 que también funciona en 64 bit R y es casi tan rápido como el MKL. Encontré que esto es lo más fácil de hacer para aumentar drásticamente el rendimiento de R en sistemas Windows. No estoy seguro de por qué no vienen como estándar en las instalaciones de R Windows.
En Windows, multihilo por desgracia no está bien apoyado en R (a menos que utilice OpenMP via Rcpp) y la disposición SOCKET-based parallelization on Windows systems, e.g. via package parallel, is very inefficient. On POSIX systems things are better as you can use forking there. (paquete de multicore
Hay creo que la más eficiente). También podría intentar usar el paquete Rdsm
para multihebras dentro de un modelo de memoria compartida - Tengo una versión en mi github que tiene unflagged -unix solo marca y debería funcionar también en Windows (Windows anterior no era compatible con la dependencia bigmemory
supuestamente didn no funciona en Windows, pero ahora parece que sí):
library(devtools)
devtools::install_github('tomwenseleers/Rdsm')
library(Rdsm)
- 1. ¿Cómo se programa usar todos los procesadores en su máquina?
- 2. ¿Cómo hacer que HttpClient use Kerberos?
- 3. ¿Debo hacer todos los ejercicios en K & R?
- 4. R stat_smooth todos los puntos
- 5. Use RegisterDeviceNotification() para TODOS los dispositivos USB
- 6. cómo arrancan los procesadores multinúcleo?
- 7. ¿Python usará todos los procesadores en el modo de subprocesos?
- 8. Cómo cambiar los procesadores en matplotlib/Python
- 9. GWT - ¿Hacer que CellTable Cell use HTML?
- 10. ¿Cómo hacer que todos los caracteres estén minúsculos en NSString?
- 11. ¿Cómo hacer que mercurial ignore todos los archivos ocultos?
- 12. Hacer que Qt Creator use MinGW
- 13. Hacer que GNU use un compilador diferente
- 14. Cómo hacer que la declaración del conmutador C# use IgnoreCase
- 15. ¿Cómo hacer que Jersey use SLF4J en lugar de JUL?
- 16. ¿Cómo hacer que Emacs use mi archivo .bashrc?
- 17. ¿Cómo hacer que LogonUser no use credenciales en caché?
- 18. ¿Cómo puedo hacer una lista de todos los pares únicos de puntos de datos en R?
- 19. Hacer que Readonly todos los campos en un formulario
- 20. ¿Cómo necesitaría una contraseña para todos los archivos, excepto uno que use .htaccess?
- 21. ¿Cómo puedo hacer que el cliente web use cookies?
- 22. ¿Cómo hacer que NSTextField use la subclase personalizada de NSTextFieldCell?
- 23. ¿Cómo hacer que boost.build use una instalación de compilación específica?
- 24. ¿Cómo puedo hacer que StackPanel use una ItemTemplate?
- 25. ¿Cómo hacer que Eclipse use JDK8 para compilar un proyecto?
- 26. ¿Cómo hacer que gcc use march = native como predeterminado?
- 27. ¿Cómo hacer que un WPF TextBox use caracteres de contraseña?
- 28. cómo obtener todos los subconjuntos hasta N en R
- 29. Use jQuery para verificar si todos los div están ocultos
- 30. Cómo crear una biblioteca estática para iOS sin hacer que todos los símbolos sean públicos
Basado en los comentarios a continuación y una búsqueda en linkedin de su nombre ... Estoy bastante seguro de que es una publicidad desvergonzada (https: // www .linkedin.com/in/dmsmith). Usted respondió su propia pregunta con un producto pagado en el que está involucrado en el desarrollo ... vamos ... –