Pachetul parallel - parApply

Scrierea codului R eficient

Colin Gillespie

Jumping Rivers & Newcastle University

Pachetul parallel

  • Parte din R începând cu 2011
    library("parallel")
    
    • Multiplatformă: codul funcționează pe Windows, Linux, Mac
    • Conține versiuni paralele ale funcțiilor standard
Scrierea codului R eficient

Funcția apply()

  • apply() este similar cu o buclă for

    • Aplicăm o funcție pe fiecare rând/coloană al unei matrici
  • O matrice cu 10 coloane și 10.000 de rânduri:

m <- matrix(rnorm(100000), ncol = 10)
  • apply este mai ordonat decât o buclă for
res <- apply(m, 1, median)
Scrierea codului R eficient

Conversia la execuție paralelă

  • Încărcați pachetul
    • Specificați numărul de nuclee
    • Creați un obiect cluster
    • Treceți la parApply()
    • Opriți!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
Scrierea codului R eficient

Vestea proastă

Cum spunea Lewis Carroll:

Cu cât mă grăbesc mai tare, cu atât rămân mai în urmă.

  • Uneori execuția paralelă este mai lentă din cauza comunicării între fire
# Versiunea serială
apply(m, 1, median)
# Versiunea paralelă
parApply(cl, m, 1, median)
  • Comparați performanța ambelor soluții
Scrierea codului R eficient

Să exersăm!

Scrierea codului R eficient

Preparing Video For Download...