¿multihilo con R?

Al leer el sitio web de R-project , hay algunas referencias (poco claras) sobre el multihilo con R, pero no está claro cómo se comstackn el producto base y las bibliotecas de CRAN .

Revolution Analytics ofrece descarga base multiproceso (?) Para Windows y Redhat.

¿Algunas de las otras distribuciones de Linux también incluirían R (y paquetes) multiproceso?

Estás confundido.

Los internos R (y antes, S) son de un solo hilo, y casi seguramente permanecerán con un solo hilo. Según tengo entendido, el trabajo de doctorado de Duncan Temple Lang era sobre superar esto, y si él no puede hacerlo …

Dicho esto, hay bolsas de múltiples subprocesos:

  • En primer lugar, cada vez que realiza llamadas externas y con un locking adecuado, puede realizar múltiples subprocesos. Eso es lo que ofrecen las bibliotecas BLAS MKL, Goto / Open BLAS, Atlas (si se construye multiproceso), … todas ofrecen. Revo R “simplemente” se envía con (Intel) MKL, ya que Intel es un inversionista clave de Revo

  • Si tiene cuidado con lo que hace, puede usar OpenMP (una extensión de comstackción para multi-threading). Esto comenzó con el trabajo de Luke Tierney en pnmath y pnmath0 (que solía ser paquetes experimentales / externos) y desde entonces ha entrado en la propia R, lenta pero seguramente.

  • A continuación, en un mundo multinúcleo y en el sistema operativo correcto, siempre puede fork() . Eso es lo que promovió el multinúcleo de paquetes y el paquete que ahora funciona paralelamente.

  • Por último, pero no menos importante, está la ruta de red / RPC con MPI utilizada por paquetes como Rmpi, snow, parallel, … y cubierta en las presentaciones de HPC.

¿Qué hay de esto ? Dado que la fecha de modificación de esa página es en mayo de 2014, creo que los paquetes mencionados son relativamente nuevos, o tal vez esos no han sido estables en el momento en que se escribió la primera respuesta.

Renjin es una implementación basada en JVM del intérprete. Ellos afirman que:

A diferencia de GNU R, Renjin es multiproceso y se ejecutará felizmente en un entorno de plataforma como servicio, como Google Appengine, AWS Elastic Beanstalk, Heroku o Microsoft Azure.

#resource http://www.bedatadriven.com/products/renjin.html

Aún así, los paquetes R reales que llamaríamos desde R pueden no ser seguros para subprocesos.

Consulte la documentación de Jep que explica este problema desde el punto de vista de llamar a CPython desde Java/Scala .

https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications

Debido a complicaciones y limitaciones de JNI, un hilo que crea una instancia Jep se debe reutilizar para todas las llamadas a métodos a esa instancia Jep. Jep hará cumplir esto y arrojará excepciones que mencionen el acceso a hilos no válido. (En el futuro, esperamos simplificar o proporcionar utilidades para la gestión de subprocesos).

No se debe ejecutar más de una instancia Jep en el mismo subproceso al mismo tiempo. Si bien esto está técnicamente permitido, potencialmente puede arruinar el estado del hilo y conducir a un punto muerto en el intérprete de Python. Esto probablemente se cambiará para arrojar una excepción si se encuentra en el futuro.

Por lo tanto, parece haber esperanza con Renjin pero los Renjin reales binarios (C / C ++, etc.) utilizados deben verificarse para la seguridad del hilo.

Hay otras implementaciones R

https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/

Puede efectivamente multi-thread R utilizando KNIME o cualquier otro progtwig que utilice el ejecutable rserve.exe. En KNIME, puede poner un Fragmento R dentro de una serie de nodos de fragmentos paralelos para las operaciones realizadas en fila. Para operaciones en columnas, puede dividir el conjunto de datos en subconjuntos de columnas y ejecutar R Snippets en cada conjunto, luego combinarlos nuevamente.

¡Espero que esto haga que tu ventilador de la CPU gire más rápido!

Revolution R Open dice que ofrecen

Motor de lenguaje R de alto rendimiento (procesamiento multiproceso con Intel® Math Kernel Library )