2011-12-03 12 views
12

Vorrei aumentare la velocità di tracciamento, e sono soddisfatto (e ho un sacco di codice che richiede) i pacchetti R graphics e ggplot - quindi sono interessato solo a sapere come posso configurare il mio sistema per velocizzare la stampa.Quale hardware limita la velocità di tracciamento in R?

In particolare:

  1. è la velocità di complotto in R limitato dalla scheda processore, memoria, grafica?
  2. Ci sono particolari componenti hardware o configurazioni che aumenterebbero la velocità di tracciamento?

Aggiornamento: Risposte alle domande nei commenti:

spec: Ubuntu 11.04, Intel Core Duo, 8 GB di RAM, ma io sono più in generale interessati a wether calcolo grafico o la resa grafica è limitante e in tal caso, come posso usare queste informazioni.

I miei lotti hanno molti oggetti, ma non ho idea di quali siano i costi computazionali del tracciamento. Non eseguo analisi specifiche durante la stampa (sto pianificando dopo aver completato le analisi richieste), anche se capisco che alcune vengono eseguite "al volo", come quando si traccia una linea smussata o addirittura si traducono i dati in posizioni.

+0

hai esaminato l'elaborazione parallela? O sei interessato principalmente a trame singole ad uso intensivo di computer? –

+0

@Xu no, non ci avevo pensato per le trame, e sono spesso interessato a più trame. –

+0

hai più processori? Su quale sistema operativo sei? Si noti inoltre che se si desidera aumentare la potenza della CPU o la RAM, esaminare l'utilizzo di un servizio cloud, come Amazon. Non so nulla di questo però. –

risposta

9

A meno che non si disponga di trame singole ad alta intensità di computer, un ottimo modo per accelerare il plottaggio multiplo è con l'elaborazione parallela. Ad esempio, si supponga di avere un dataframe e si desideri scomporlo da una determinata variabile (o variabili) e fare grafici per ogni partizione.

Ci sono molti modi per registrare un back-end parallelo, quindi non entrerò in questo. Si veda, per esempio, questo vignetta: http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

quindi controllare la funzione ddply nel pacchetto di Hadley plyr e utilizzare l'opzione .parallel = TRUE. Questo è fondamentalmente. Quindi basta fare il tracciato normalmente.

Ecco un self-contained esempio:

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

Ciò farà risparmiare due file, 0.pdf e 1.pdf, che sono i livelli (cioè i valori unici) della vs variabile del mtcars dataframe . Se lo hai rotto con una variabile country name, i file salvati sarebbero i nomi dei paesi. 0.pdf e 1.pdf sono le seguenti:

enter image description here

enter image description here

+2

Un bell'esempio, ma ad essere sincero a volte aiuta a usare lattice anziché ggplot (2). Può essere molto più veloce. –

4

Come @Xu Wang sottolinea, è possibile utilizzare la parallelizzazione per disegnare diversi appezzamenti in una sola volta.

Quindi, in termini di hardware, una potente macchina multi-core veloce con abbondanza di RAM potrebbe aiutare un po '.

Se si desidera tracciare un singolo grafico con, diciamo, 1 milione di cerchi in un grafico x-y (diagramma a dispersione), l'accelerazione dell'hardware grafico sarebbe molto vantaggiosa.

Ma una scheda grafica veloce aiuta solo se i dispositivi grafici in R supportano l'accelerazione hardware. Al momento non lo fanno e, come sottolinea @hadley, ggplot utilizza i dispositivi grafici standard.

Il pacchetto rgl apparentemente utilizza OpenGL per fare grafica 3D. Non l'ho provato però. Potresti essere in grado di usarlo per disegnare alcune trame in modo più efficiente ...

Ho un po 'di esperienza nella creazione di grafici accelerati hardware interattivi veloci (2d e 3d), e può essere una grande velocità. I 2d-plot sono in realtà più difficili da accelerare rispetto a quelli 3D ... Probabilmente non è una cosa facile da inserire nell'attuale concetto di dispositivo grafico di R.

UPDATE Ho appena provato rgl e il suo plot3d con 1 milione di punti. È completamente interattivo (piccole frazioni di secondo da aggiornare) sul mio (piuttosto potente) laptop.

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

Ggplot2 supporta l'accelerazione hardware se i dispositivi grafici R hanno fatto – hadley

+0

@hadley - Buon punto! Risposta aggiornata – Tommy

+0

Nice risponde a tutti. C'è anche un buon esempio qui http://stackoverflow.com/a/6814180/636656 –

Problemi correlati