Jakie problemy korzystają z obliczeń równoległych

Wydajny kod w R

Colin Gillespie

Jumping Rivers & Newcastle University

Gotowanie

Dodatkowa para rąk

Za dużo kucharzy

Za dużo kucharzy psuje zupę

Wydajny kod w R

Działanie równoległe

  • Nie każda analiza może wykorzystać wiele rdzeni
    • Wiele algorytmów statystycznych działa tylko na jednym rdzeniu

Gdzie więc pomogą obliczenia równoległe?

Wydajny kod w R

Symulacje Monte Carlo

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • Maszyna 8-rdzeniowa
    • Jedna symulacja na rdzeń
    • Wyniki łączone na końcu
  • Embarrassingly parallel
Wydajny kod w R

Nie wszystko działa równolegle

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
x[8] = x[7] = ... x[2] = x[1] = 1
  • Czy można to uruchomić równolegle?
    • NIE
      • Kolejność ewaluacji w obliczeniach równoległych nie jest przewidywalna
      • Wynik będzie błędny, bo x[3] może zostać obliczone przed x[2]
Wydajny kod w R

Zasada ogólna

Czy pętlę można uruchomić w obu kierunkach?

for(i in 1:8)
    sim[i] <- monte_carlo_simulation()

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • Obie pętle dają ten sam wynik
  • Można je uruchomić równolegle
Wydajny kod w R

Zasada ogólna

Czy pętlę można uruchomić w obu kierunkach?

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
for(i in 8:2)
    x[i] <- x[i-1]
  • Pętle dają różne wyniki
    • Pierwsza: x[8] = x[7] = ... = 1
    • Druga: x[8] = x[7] = 7
  • Nie można użyć obliczeń równoległych

Pamiętaj: Jeśli pętlę można uruchomić wstecz, prawdopodobnie można użyć obliczeń równoległych.

Wydajny kod w R

Czas na ćwiczenia!

Wydajny kod w R

Preparing Video For Download...