R, который автоматически использует несколько ядер?
===================================================

 Я заметил, что R использует только одно ядро при выполнении одной из моих программ, которая требует большого количества вычислений. Я хотел бы воспользоваться преимуществами моего многоядерного процессора, чтобы моя программа работала быстрее. Я еще не изучил этот вопрос подробно, но я был бы признателен за получение ваших комментариев, потому что у меня нет хороших знаний в области компьютерных наук, и мне трудно получить легко понятную информацию по этому вопросу.

  Существует ли пакет, который позволяет R автоматически использовать несколько ядер при необходимости?

  Я думаю, это не так просто.

 

R может использовать только несколько ядер с помощью дополнительных пакетов и только для некоторых типов операций. Параметры подробно обсуждаются в [Просмотр высокопроизводительных вычислений](https://cran.r-project.org/web/views/HighPerformanceComputing.html) на CRAN

  **Обновление:** От R версии 2.14.0 дополнительные пакеты необязательно требуются из-за включения пакета  **parallel** в качестве рекомендуемого пакета, поставляемого с R.  **parallel** включает функции из пакетов  **многоядерных** и  **снега**, в основном без изменений.

 

Самый простой способ использования мультипроцессоров - пакет `multicore`, который включает в себя функцию mclapply(). mclapply() - многоядерная версия lapply(). Таким образом, любой процесс, который может использовать lapply(), может быть легко преобразован в процесс mclapply(). Однако многоядерность не работает в Windows. Я написал сообщение в блоге об этом [в прошлом году](http://www.cerebralmastication.com/2010/02/using-the-r-multicore-package-in-linux-with-wild-and-passionate-abandon/), которое может быть полезно. Созданный пакет Revolution Analytics, [doSMP](http://www.r-statistics.com/2010/04/parallel-multicore-processing-with-r-on-windows/), НЕ является многопоточной версией R. Это фактически версия многоядерных версий Windows.

Если ваша работа [неловко параллельна](https://en.wikipedia.org/wiki/Embarrassingly_parallel), это хорошая идея, чтобы получить удобство в стиле структурирования lapply(). Это даст вам легкое segue в mclapply() и даже распределенные вычисления, используя ту же абстракцию.

Все становится намного сложнее для операций, которые не являются "смущающими параллелями".

[EDIT]

В качестве дополнительной заметки Rstudio становится все более популярным как передний конец для R. Я люблю Rstudio и использую его ежедневно. Однако следует отметить, что Rstudio не очень хорошо работает с Multicore (по крайней мере, с октября 2011 года... Я понимаю, что команда RStudio собирается это исправить). Это связано с тем, что Rstudio делает некоторые куски за кулисами, и эти вилки конфликтуют с попытками Multicore развить. Поэтому, если вам нужен Multicore, вы можете написать свой код в Rstuido, но запустите его в простой сессии Jane R.

 

По этому вопросу вы всегда получаете очень короткие ответы. Самое легкое решение по мне - это пакет [снегопад](http://www.imbi.uni-freiburg.de/parallel/), основанный на снегу. То есть, на одном компьютере Windows с несколькими ядрами. См. Также статью  [статьи Knaus и др.](https://journal.r-project.org/2009-1/RJournal_2009-1_Knaus+et+al.pdf) для простого примера. Снегопад - обертка вокруг снежного пакета и позволяет вам настроить многоядерную машину с несколькими командами. Это определенно меньше хлопот, чем большинство других пакетов (я не пробовал их всех).

В обозревателе действительно есть только несколько задач, которые можно распараллелить, по той простой причине, что вы должны иметь возможность разделить задачи перед многоядерным вычислением. семейство `apply`, очевидно, является логичным выбором для этого: множественные и  **независимые** вычисления, которые имеют решающее значение для многоядерного использования. Все остальное не всегда легко и многожидко.

Прочитайте также это обсуждение [sfApply и пользовательских функций](/questions/98673/scoping-problem-when-sfapply-is-used-within-function-package-snowfall-r).

 

Microsoft R Open включает многопоточные математические библиотеки для повышения производительности R.It работает в Windows/Unix/Mac для всех типов ОС. Он с открытым исходным кодом и может быть установлен в отдельный каталог, если у вас есть какая-либо существующая R (из CRAN). Вы можете использовать популярный IDE Rstudio также с этим. С самого начала R был разработан для использования только одного потока (процессора) за раз. Даже сегодня R работает таким образом, если не связан с многопоточными библиотеками BLAS/LAPACK.

Сегодня многоядерные машины предлагают параллельную вычислительную мощность. Чтобы воспользоваться этим, Microsoft R Open включает в себя многопоточные математические библиотеки.
Эти библиотеки позволяют так много общих операций R, таких как матричное размножение/обратное, матричное декомпозиция и некоторые более высокоуровневые матричные операции, для параллельного вычисления и использования всей вычислительной мощности, доступной для уменьшения времени вычислений.

Пожалуйста, проверьте приведенную ниже ссылку:

 <https://mran.revolutionanalytics.com/rro/#about-rro>

 <http://www.r-bloggers.com/using-microsoft-r-open-with-rstudio/>

 

Как сказал Дэвид Хеффернан, взгляните на Blog of Revolution Analytics. Но вы должны знать, что большинство пакетов для Linux. Итак, если вы используете окна, это будет намного сложнее.
В любом случае, взгляните на эти сайты:

 [Revolution](http://blog.revolutionanalytics.com/2010/08/taking-r-to-the-limit-parallelism-and-big-data.html). Здесь вы найдете лекцию о параллелизации в Р. Лекция на самом деле очень хорошая, но, как я уже сказал, большинство советов для Linux.

И эта тема здесь, в [fooobar.com/questions/98670/...](/questions/98670/r-package-that-automatically-uses-several-cores), будет оспаривать некоторую реализацию в Windows.

 

Пакет `future` делает работу в `R` чрезвычайно простой, используя параллельную и распределенную обработку. [Подробнее здесь](https://github.com/HenrikBengtsson/future). Если вы хотите применить функцию к элементам параллельно, пакет [`future.apply`](https://github.com/HenrikBengtsson/future.apply) предоставляет быстрый способ использования функций семейства "apply" (например, `apply()`, `lapply()` и `vapply()`) параллельно.

Пример:

```
library("future.apply")
library("stats")
x <- 1:10

# Single core
  y <- lapply(x, FUN = quantile, probs = 1:3/4)

# Multicore in parallel
  plan(multiprocess)
  y <- future_lapply(x, FUN = quantile, probs = 1:3/4)

```