2011-12-03 11 views
12

Me gustaría aumentar la velocidad de trazado, y estoy contento con (y tengo muchos códigos que requieren) los gráficos R y los paquetes ggplot, así que solo estoy interesado en saber cómo puedo configurar mi sistema para acelerar el trazado.¿Qué hardware limita la velocidad de trazado en R?

Específicamente:

  1. es la velocidad de trazado en I limitado por la tarjeta de procesador, memoria, gráficos?
  2. ¿Hay componentes de hardware o configuraciones particulares que aumenten la velocidad de trazado?

Actualizar: Las respuestas a las preguntas en los comentarios:

especificaciones: Ubuntu 11.04, Intel Core Duo, 8 GB de RAM, pero estoy más en general interesado en wether la computación gráfica o la prestación gráfica está limitando , y si es así, ¿cómo puedo usar esta información?

Mis gráficos tienen muchos objetos, pero no tengo idea de cuáles son los costos computacionales del trazado. No hago ningún análisis específico mientras grafico (estoy trazando después de completar cualquier análisis requerido), aunque entiendo que algo se hace "sobre la marcha", como cuando trazo una línea suavizada o incluso traduciendo datos a ubicaciones.

+0

¿ha investigado el procesamiento en paralelo? ¿O le interesan principalmente las parcelas individuales con uso intensivo de la informática? –

+0

@Xu no, no había pensado en eso para las tramas, y a menudo me interesan las tramas múltiples. –

+0

¿tiene múltiples procesadores? ¿En qué sistema operativo estás? También tenga en cuenta que si realmente desea más potencia de CPU o RAM, investigue utilizando un servicio en la nube, como el de Amazon. Sin embargo, no sé nada de esto. –

Respuesta

9

A menos que tenga parcelas individuales con uso intensivo de la computadora, una gran manera de acelerar el trazado múltiple es con el procesamiento en paralelo. Por ejemplo, supongamos que tiene un marco de datos y desea desglosarlo por una determinada variable (o variables) y hacer gráficos para cada partición.

Hay muchas formas de registrar un servidor paralelo, así que no entraré en eso. Véase, por ejemplo, esta viñeta: http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

A continuación, echa un vistazo a la función ddply en el paquete de Hadley plyr y utilice la opción .parallel = TRUE. Eso es básicamente eso. Entonces solo haz un trazado normalmente.

Aquí hay una auto-contenida ejemplo:

#this is the particular library I chose to register a parallel backend. There are others. See the new "Parallel R" book for details. 
library(doMC) 
registerDoMC() 
getDoParWorkers() #This lists how many workers you have (hopefully more than 1!) 

library(ggplot2) 
ddply(
     mtcars, .variables = "vs", .fun = function(x) { 
     #do your plotting now 
     example_plot <- ggplot(x, aes(y = mpg, x = wt)) + geom_point() + geom_smooth(se = FALSE) 
     #save your plot 
     ggsave(paste(x$vs[1],".pdf",sep = ""), example_plot) 
     }, 
     .parallel = TRUE 
) 

Esto ahorrará dos archivos, 0.pdf y 1.pdf, que son los niveles (es decir, los valores únicos) de la variable vs de la trama de datos mtcars . Si lo descompusiste por una variable country name, los archivos guardados serían los nombres de los países. 0.pdf y 1.pdf son las siguientes:

enter image description here

enter image description here

+2

Buen ejemplo, pero para ser justos, a veces ayuda usar el enrejado en lugar de ggplot (2). Puede ser mucho más rápido. –

4

Como @Xu Wang señala, puede utilizar la paralelización a sacar varias parcelas a la vez.

Por lo que respecta al hardware, una poderosa máquina de múltiples núcleos con mucha RAM ayudaría un poco.

Si desea trazar una sola parcela con, digamos, 1 millón de círculos en una trama xy (diagrama de dispersión), entonces la aceleración de hardware de gráficos sería muy beneficiosa.

Pero una tarjeta gráfica rápida solo ayuda si los dispositivos gráficos en R admiten aceleración de hardware. Actualmente no lo hacen, y como señala @hadley, ggplot usa los dispositivos gráficos estándar.El paquete rgl aparentemente usa OpenGL para hacer gráficos en 3D. No lo he probado sin embargo. Es posible que pueda usarlo para dibujar algunos trazados de manera más eficiente ...

Tengo cierta experiencia en la creación de trazados acelerados acelerados por hardware (2d y 3d), y puede tener magnitudes más rápidas. Las tramas en 2d son en realidad más difíciles de acelerar que las 3d ... Aunque probablemente no es algo fácil de conectar al concepto actual de dispositivos gráficos de R.

ACTUALIZACIÓN Acabo de probar rgl y su plot3d con 1 millón de puntos. Es totalmente interactivo (pequeñas fracciones de segundo para actualizar) en mi portátil (bastante potente).

library(rgl) 
x <- sort(rnorm(1e6)) 
y <- rnorm(1e6) 
z <- rnorm(1e6) + atan2(x,y) 
plot3d(x, y, z, col=rainbow(1000)) 
+2

Ggplot2 admitiría la aceleración de hardware si los dispositivos gráficos R sí lo hicieron – hadley

+0

@hadley - ¡Buen punto! Respuesta actualizada – Tommy

+0

Nice responde a todos. También hay un buen ejemplo de rgl aquí http://stackoverflow.com/a/6814180/636656 –

Cuestiones relacionadas