Стоит ли распараллеливать?

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

Как распараллелить вычисление корней?

Схема параллельного вычисления квадратных корней. Целые числа от 1 до миллиона разбиваются на пять групп по 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

Не так быстро, как ожидалось

Схема параллельного вычисления квадратных корней чисел от 1 до миллиона.

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

Не так быстро, как ожидалось

Параллельное выполнение включает ряд дополнительных шагов. Первый — разбиение данных.

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

Не так быстро, как ожидалось

После разбиения каждая подгруппа данных копируется на ядра кластера.

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

Не так быстро, как ожидалось

После вычислений результаты с каждого ядра собираются для получения итогового результата.

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

Не так быстро, как ожидалось

Часть вычислительных ресурсов расходуется на координацию всего процесса.

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

Итак, стоит ли распараллеливать?

Для достаточно сложной задачи учитывайте:

Плюсы

  • Быстрее последовательного выполнения
  • Экономически эффективнее в долгосрочной перспективе

 

Минусы

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

Давайте потренируемся!

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

Preparing Video For Download...