Чи варто паралелізувати?

Паралельне програмування в R

Nabeel Imam

Data Scientist

Збудуймо будівлю

   

Будуємо поверх на попередньому: послідовно

 

Встановлюємо вікна в готову конструкцію: паралельно

Будівництво будівлі. Поверхи зводять лише послідовно, а вікна можна встановлювати паралельно.

Паралельне програмування в R

Шкала «послідовно — паралельно»

Поширені обчислювальні задачі розміщено на шкалі: на одному кінці — послідовні, на іншому — паралельні. Створення нових змінних ближче до паралельних, а кумулятивна сума — до послідовних.

Паралельне програмування в R

Класична числова операція

Обчислення квадратних коренів з мільйона чисел

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
Паралельне програмування в R

Як паралелізувати квадратний корінь?

Блок-схема паралельного обчислення квадратних коренів. Цілі числа від одного до мільйона поділено на п'ять груп по 200 000.

Паралельне програмування в R

Як паралелізувати квадратний корінь?

Поділені дані надсилаються в кластер з кількох ядер. Кожну групу чисел відправляють на окреме ядро для обчислення квадратних коренів. Якщо всі ядра зайняті, нові групи чекають звільнення ядра.

Паралельне програмування в R

Як паралелізувати квадратний корінь?

Квадратні корені збираються з кожного ядра та об'єднуються, утворюючи мільйон значень.

Паралельне програмування в R

Паралелізована числова операція

Квадратні корені з мільйона чисел у паралелі

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
Паралельне програмування в R

Не так швидко, як очікували

Блок-схема паралельного обчислення квадратних коренів для чисел від одного до мільйона.

Паралельне програмування в R

Не так швидко, як очікували

Паралельне виконання має додаткові кроки. Перший — поділ даних.

Паралельне програмування в R

Не так швидко, як очікували

Після поділу кожен піднабір потрібно скопіювати на ядра в кластері.

Паралельне програмування в R

Не так швидко, як очікували

Після обчислень результати з кожного ядра потрібно зібрати для формування фінального виходу.

Паралельне програмування в R

Не так швидко, як очікували

Частину ресурсів витрачають на оркестрацію всього процесу.

Паралельне програмування в R

То чи варто паралелізувати?

Для достатньо складної задачі зважайте на:

Переваги

  • Швидше за послідовне
  • Довгостроково вигідніше

 

Недоліки

  • Потрібні спеціальні навички програмування (але у вас усе готово!)
  • Високе споживання пам'яті
Паралельне програмування в R

Давайте потренуємось!

Паралельне програмування в R

Preparing Video For Download...