РЕВОЛЮЦИЯ для R - PullRequest
       30

РЕВОЛЮЦИЯ для R

5 голосов
/ 17 ноября 2009

со времени последнего выпуска Ubuntu (karmic koala), я заметил, что внутренний пакет R объявляет при запуске пакет REvolution . Кажется, это библиотека для высокопроизводительных матричных вычислений. И, кажется, действительно работает, по-видимому. Например, для транспонирования матрицы с REvolution:

> system.time(t(matrix(rnorm(10000000),ncol=1000)))
   user  system elapsed 
  1.280   0.150   1.556 

И без REvolution:

> system.time(t(matrix(rnorm(10000000),ncol=1000)))
   user  system elapsed 
  1.320   0.170   1.725 

Кто-нибудь этим пользуется? Это действительно работает? Какие конкретные виды расчетов улучшаются и как? Любой недостаток?

Спасибо: -)

Ответы [ 3 ]

11 голосов
/ 17 ноября 2009

Да, на многоядерном компьютере библиотеки Intel MKL, реализующие BLAS - и предоставляемые пакетом revolution-mkl и включенные пакетом r-revolution-revobase, будут работать параллельно для задач линейной алгебры, и вы должны увидеть отличие от базового варианта использования только пакетов libblas *.

Тем не менее, ваш пример выше не так важен, я часто делаю что-то вроде

 mean(replicate(N, system.time( someStuffHere() )["elapsed"]), trim=0.05)

для вычисления усеченного среднего по ряду повторений.

Что еще более важно, обратите внимание, что ваш пример включает в себя ничьи ГСЧ в моменты времени, которые i) дорогой и ii) инвариантный к используемому методу, поэтому вы должны сгенерировать его вне system.time().

Помимо MKL, revolution-r также включает в себя некоторые из созданных REvolution пакетов из CRAN, которые можно использовать для параллельного выполнения.

(Отказ от ответственности: я помог REvo собрать все это для Ubuntu 9.10)

4 голосов
/ 18 ноября 2009

Просто чтобы повторить то, что Дирк упомянул о сроках - в вашем случае создание матрицы занимает почти все время. Посмотрите, что происходит (в моей системе, где у меня нет REvolution), когда я дергаю его за пределы функции синхронизации:

> system.time(t(matrix(rnorm(10000000),ncol=1000)))
   user  system elapsed 
  2.256   0.317   2.576 

> mt <- matrix(rnorm(10000000),ncol=1000)
> system.time(t(mt))
   user  system elapsed 
  0.137   0.070   0.204 

Другими словами, более 90% времени уходит на создание матрицы, а 10% - на ее транспонирование.

4 голосов
/ 17 ноября 2009

См. сообщение в блоге от REvolution для получения дополнительной информации. REvolution R 3.0 должен быть на 100% совместим с R-2.9.2 из CRAN . В основном они используют многопоточные, высокопроизводительные библиотеки линейной алгебры и оптимизирующие компиляторы. Улучшения REvolution включают в себя:

  • высокопроизводительные математические библиотеки, оптимизированные для использования кеш-памяти процессора, векторных инструкций и многопоточности ( Intel Math Kernel Library - MKL ) и
  • оптимизация компиляторов и библиотек времени выполнения.

На веб-странице REvolution есть несколько тестов: Производительность REvolution R и Простые тесты .

Хотя они внесли несколько интересных расширений в сообщество R по лицензии OSS ( foreach , итераторы , doSNOW и doMC ), расширение MKL является проприетарным.

Лично я перешел на (CRAN) R 2.10.0, чтобы использовать новейшие функции R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...