У меня очень большой список 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
к каждому параллельно, а затем вручную сложить результат ? Или есть пакет, предназначенный для этого?
Если кому-то интересно, мой конкретный вариант использования здесь .