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

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

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

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

5 ответов

R может использовать несколько ядер только с помощью дополнительных пакетов и только для некоторых типов операций. Эти опции подробно обсуждаются в представлении задач высокопроизводительных вычислений в CRAN

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

Самый простой способ воспользоваться мультипроцессором - это multicore пакет, который включает функцию mclapply(). mclapply() - это многоядерная версия lapply (). Таким образом, любой процесс, который может использовать lapply (), может быть легко преобразован в процесс mclapply (). Тем не менее, многоядерный не работает в Windows. Я написал пост в блоге об этом в прошлом году, который может быть полезным. Созданный пакет Revolution Analytics, doSMP, НЕ является многопоточной версией R. По сути, это многоядерная версия для Windows.

Если ваша работа смущающе параллельна, неплохо бы освоиться с типом структурирования lapply (). Это позволит вам легко перейти в mclapply () и даже распределенные вычисления, используя ту же абстракцию.

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

[РЕДАКТИРОВАТЬ]

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

На этот вопрос вы всегда получите очень короткие ответы. Самым простым решением для меня, по моему мнению, является пакет снегопада на основе снега. То есть на одном компьютере Windows с несколькими ядрами. Смотрите также здесь статью Knaus и др. Для простого примера. Snowfall - это обертка вокруг пакета snow, позволяющая настроить многоядерный процессор с помощью нескольких команд. Это определенно меньше хлопот, чем большинство других пакетов (я не пробовал все из них).

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

Прочтите также это обсуждение sfApply и пользовательских функций.

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

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

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

https://mran.revolutionanalytics.com/rro/

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

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

Революция Здесь вы найдете лекцию о параллелизации в R. Лекция на самом деле очень хорошая, но, как я уже сказал, большинство советов касаются Linux.

И этот поток здесь, в Stackru, будет обсуждать некоторую реализацию в Windows.

Посылка future делает работу в Rс использованием параллельной и распределенной обработки. Больше информации здесь. Если вы хотите применить функцию к элементам параллельно, future.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)

Другие вопросы по тегам