Ska vi parallellisera?

Parallell programmering i R

Nabeel Imam

Data Scientist

Vi bygger ett hus

   

Bygga en våning ovanpå den förra: sekventiellt

 

Installera fönster i en färdig stomme: parallellt

En byggnad är under konstruktion. Våningar måste byggas i sekvens, medan fönster kan installeras parallellt.

Parallell programmering i R

Skalan sekventiellt–parallellt

Vanliga beräkningsuppgifter placeras på en skala från sekventiella i ena änden till parallella i den andra. Att skapa nya variabler ligger nära den parallella änden, medan kumulativ summa ligger nära den sekventiella änden.

Parallell programmering i R

En klassisk numerisk operation

Beräkna kvadratroten ur en miljon tal

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
Parallell programmering i R

Hur parallelliserar vi kvadratroten?

Ett flödesschema för parallell beräkning av kvadratrötter. Heltalen från ett till en miljon delas upp i fem grupper om 200 000 tal vardera.

Parallell programmering i R

Hur parallelliserar vi kvadratroten?

Den uppdelade datan skickas till ett kluster med flera kärnor. Varje grupp av tal skickas till en kärna för kvadratsrotsberäkning. Om alla tillgängliga kärnor är upptagna väntar nya grupper tills en kärna är ledig.

Parallell programmering i R

Hur parallelliserar vi kvadratroten?

Kvadratrötterna samlas in från varje kärna och kombineras till en miljon kvadratrötter.

Parallell programmering i R

En parallelliserad numerisk operation

Kvadratrötterna ur en miljon tal – parallellt

library(parallel)


my_cluster <- makeCluster(3)
start <- Sys.time() sq_roots <- parLapply(my_cluster, numbers, sqrt) end <- Sys.time()
stopCluster(my_cluster)
end - start
Time difference of 0.8416824 secs
Parallell programmering i R

Inte lika snabbt som förväntat

Ett flödesschema för parallell beräkning av kvadratrötter ur talen ett till en miljon.

Parallell programmering i R

Inte lika snabbt som förväntat

Parallell körning innebär flera extra steg. Det första är att dela upp datan.

Parallell programmering i R

Inte lika snabbt som förväntat

Efter uppdelningen måste varje delgrupp kopieras till kärnorna i klustret.

Parallell programmering i R

Inte lika snabbt som förväntat

Efter beräkningen måste resultatet från varje kärna samlas in för att ge det slutliga svaret.

Parallell programmering i R

Inte lika snabbt som förväntat

En del beräkningsresurser går åt till att samordna hela processen.

Parallell programmering i R

Ska vi alltså parallellisera?

För en tillräckligt komplex uppgift, tänk på:

Fördelar

  • Snabbare än sekventiellt
  • Mer kostnadseffektivt på sikt

 

Nackdelar

  • Kräver särskilda programmeringskunskaper (men du är redo!)
  • Hög minnesanvändning
Parallell programmering i R

Nu kör vi en övning!

Parallell programmering i R

Preparing Video For Download...