Я работаю над выполнением некоторых вычислений с использованием parallel :: mclapply для распараллеливания процесса. У меня высокопроизводительный вычислительный сервер (HP C) с 64 ГБ памяти и 28-ядерным процессором. Скорость выполнения кода сильно возросла после распараллеливания, но много памяти и процессорных ядер теряются. Как я могу сделать это более эффективным?
Вот пример кода:
data_sub <- do.call(rbind, mclapply(ds,predict_function,mc.cores=28))
Функция Предиката содержит небольшую функцию для создания методов snaive, naive или Arima, которая будет определена до того, как logi c достигнет вышеуказанной строки.
Вот что я часто вижу в журнале:
Первая строка показывает, что на работу потрачено 51 гигабайт ОЗУ и использовал менее половины выделенного ЦП. Третья строка указывает, что та же программа запускается с теми же данными, но использует больше выделенной памяти, несмотря на недостаточную загрузку ядер ЦП.
В моей голове сейчас три вопроса: как HP C выделяет память для каждой работы ?? Могу ли я разделить память и ядра в моей R-программе для параллельного запуска двух функций? Скажем, запустить метод snaive в 14 ядрах и выделить Ариме оставшиеся 14? Как я могу заставить свою работу использовать всю память и ядра процессора, чтобы сделать это быстрее?
Заранее спасибо