The parallel package - parApply

Effektiv R-kod

Colin Gillespie

Jumping Rivers & Newcastle University

Paketet parallel

  • Del av R sedan 2011
    library("parallel")
    
    • Plattformsoberoende: Koden fungerar i Windows, Linux och Mac
    • Har parallella versioner av standardfunktioner
Effektiv R-kod

Funktionen apply()

  • apply() liknar en for-loop

    • Vi applicerar en funktion på varje rad/kolumn i en matris
  • En matris med 10 kolumner och 10 000 rader:

m <- matrix(rnorm(100000), ncol = 10)
  • apply är snyggare än en for-loop
res <- apply(m, 1, median)
Effektiv R-kod

Konvertera till parallell körning

  • Läs in paketet
    • Ange antalet kärnor
    • Skapa ett klusterobjekt
    • Byt till parApply()
    • Stoppa!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
Effektiv R-kod

Den dåliga nyheten

Som Lewis Carroll sa:

Ju mer jag skyndar, desto mindre hinner jag.

  • Parallell körning kan ibland vara långsammare på grund av trådkommunikation
# Seriell version
apply(m, 1, median)
# Parallell version
parApply(cl, m, 1, median)
  • Jämför prestanda för båda lösningarna
Effektiv R-kod

Nu kör vi en övning!

Effektiv R-kod

Preparing Video For Download...