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