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