Пакет parallel — parApply

Эффективный код на R

Colin Gillespie

Jumping Rivers & Newcastle University

Пакет parallel

  • Входит в состав R с 2011 года
    library("parallel")
    
    • Кроссплатформенный: работает на Windows, Linux, Mac
    • Содержит параллельные версии стандартных функций
Эффективный код на R

Функция apply()

  • apply() аналогичен циклу for

    • Функция применяется к каждой строке/столбцу матрицы
  • Матрица из 10 столбцов и 10 000 строк:

m <- matrix(rnorm(100000), ncol = 10)
  • apply удобнее, чем цикл for
res <- apply(m, 1, median)
Эффективный код на R

Переход к параллельным вычислениям

  • Загрузите пакет
    • Укажите количество ядер
    • Создайте объект-кластер
    • Замените на parApply()
    • Остановите кластер!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
Эффективный код на R

Неприятная сторона

Как говорится: чем быстрее спешишь, тем больше опаздываешь.

  • Иногда параллельное выполнение медленнее из-за накладных расходов на взаимодействие потоков

# Serial version
apply(m, 1, median)

# Parallel version parApply(cl, m, 1, median)
  • Выполните бенчмарк обоих решений
Эффективный код на R

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

Эффективный код на R

Preparing Video For Download...