Какой самый простой способ распараллелить векторизованную функцию в R?

У меня очень большой список X и векторизованная функция f . Я хочу вычислить f (X) , но это займет много времени, если я сделаю это с одним ядром. У меня есть (доступ) 48-ядерный сервер. Как проще всего распараллелить вычисление f (X) ? Следующее не правильный ответ:

library(foreach)
library(doMC)
registerDoMC()

foreach(x=X, .combine=c) %dopar% f(x)

Приведенный выше код действительно распараллеливает вычисление f (X) , но это будет сделано путем применения f отдельно к каждому элементу X . Это игнорирует векторизованный характер f и, вероятно, сделает вещи медленнее в результате, а не быстрее. Вместо того, чтобы применять f поэлементно к X , я хочу разбить X на фрагменты разумного размера и применить к ним f .

Итак, следует ли мне вручную разделить X на 48 подсписок одинакового размера и , затем применить f к каждому параллельно, а затем вручную сложить результат ? Или есть пакет, предназначенный для этого?

Если кому-то интересно, мой конкретный вариант использования здесь .

15
задан Ryan C. Thompson 6 April 2011 в 19:19
поделиться