Czy powinniśmy zrównoleglać?

Programowanie równoległe w R

Nabeel Imam

Data Scientist

Budujemy budynek

   

Budowanie kolejnego piętra: sekwencyjne

 

Montaż okien w gotowej konstrukcji: równoległe

Budynek w trakcie budowy. Piętra można wznosić tylko sekwencyjnie, natomiast okna można montować równolegle.

Programowanie równoległe w R

Skala: sekwencyjne – równoległe

Typowe zadania obliczeniowe umieszczono na skali od sekwencyjnych do równoległych. Tworzenie nowych zmiennych jest bliżej końca równoległego, a suma skumulowana – bliżej sekwencyjnego.

Programowanie równoległe w R

Klasyczna operacja numeryczna

Obliczanie pierwiastków kwadratowych z miliona liczb

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
Programowanie równoległe w R

Jak zrównoleglić obliczanie pierwiastków?

Schemat blokowy równoległego obliczania pierwiastków kwadratowych. Liczby od 1 do miliona są podzielone na pięć grup po 200 000 elementów.

Programowanie równoległe w R

Jak zrównoleglić obliczanie pierwiastków?

Podzielone dane są wysyłane do klastra złożonego z wielu rdzeni. Każda grupa liczb trafia do jednego rdzenia w celu obliczenia pierwiastka kwadratowego. Jeśli wszystkie rdzenie są zajęte, nowe grupy czekają na zwolnienie rdzenia.

Programowanie równoległe w R

Jak zrównoleglić obliczanie pierwiastków?

Pierwiastki kwadratowe są zbierane z każdego rdzenia i łączone w milion wyników.

Programowanie równoległe w R

Zrównoleglona operacja numeryczna

Pierwiastki kwadratowe z miliona liczb – równolegle

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
Programowanie równoległe w R

Wolniej niż oczekiwano

Schemat blokowy równoległego obliczania pierwiastków kwadratowych z liczb od 1 do miliona.

Programowanie równoległe w R

Wolniej niż oczekiwano

Wykonanie równoległe wymaga kilku dodatkowych kroków. Pierwszym jest podział danych.

Programowanie równoległe w R

Wolniej niż oczekiwano

Po podziale każda podgrupa danych musi zostać skopiowana do rdzeni klastra.

Programowanie równoległe w R

Wolniej niż oczekiwano

Po obliczeniach wyniki z każdego rdzenia są zbierane, aby uzyskać końcowy rezultat.

Programowanie równoległe w R

Wolniej niż oczekiwano

Część zasobów obliczeniowych jest zużywana na koordynację całego procesu.

Programowanie równoległe w R

Czy zatem powinniśmy zrównoleglać?

W przypadku wystarczająco złożonych zadań warto rozważyć:

Zalety

  • Szybsze niż sekwencyjne
  • Bardziej opłacalne w dłuższej perspektywie

 

Wady

  • Wymaga specjalistycznych umiejętności (ale Państwo są gotowi!)
  • Wysokie zużycie pamięci
Programowanie równoległe w R

Czas na ćwiczenia!

Programowanie równoległe w R

Preparing Video For Download...