Пакет 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

Погані новини

Як сказав Льюїс Керролл:

Чим більше я кваплюсь, тим більше відстаю.

  • Інколи паралельний запуск повільніший через обмін між потоками
# Послідовна версія
apply(m, 1, median)
# Паралельна версія
parApply(cl, m, 1, median)
  • Порівняйте швидкодію обох рішень
Ефективне програмування R

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

Ефективне програмування R

Preparing Video For Download...