Я бы хотел использовать несколько процессоров при вычислении в R. До сих пор я пробовал подход . Я знаю, что он может вернуть нужные мне значения, однако мне интересно, могу ли я как-то изменить общие переменные напрямую.Как изменить общие переменные из% dopar% block?
Это пример того, что я хотел бы достичь - переменная result
должна иметь возрастающую диагональ. Обратите внимание, что это иллюстративный пример - на самом деле мне нужно вычислить около десятка матриц переменных размеров, и синтаксический анализ вывода foreach
будет очень сложным. Вычисление занимает около часа, что вряд ли отлаживается.
library("doParallel")
library("foreach")
cluster <- makeCluster(4)
registerDoParallel(cluster)
result = matrix(nrow=5, ncol=5)
foreach (i = 1:5) %dopar% {
result[[i, i]] <<- i
}
Не могли бы вы предложить какой оператор/функция/пакет, я должен использовать для того, чтобы добиться такого поведения, то есть изменение общих переменных из некоторого параллельного блока кода? Предположим, что нет столкновений и/или условий гонки.
И разве вы не знаете о каком-либо другом подходе? Например. не использовать '% dopar%' вообще? В любом случае спасибо за быстрый ответ :) – petrbel
https://cran.r-project.org/web/views/HighPerformanceComputing.html показывает множество опций, как выполнять параллельные вычисления в R. Мои два предложения: 1. чтение/запись данных из базы данных и тем самым получить доступ к тем же данным во всех кластерных узлах 2. использовать Hadoop/Spark – Tobi