У меня есть 4-ядерный Mac с 8 потоками. Насколько я понимаю mclapply()
, он должен использовать 8 потоков в качестве процессоров, но когда я запускаю свой скрипт, я вижу, что работают только 4 потока. В моем примере я использую вложенный список, потому что в моей реальной работе у меня есть 6-уровневый вложенный список, выполнение которого займет несколько дней. Я буду запускать свой скрипт на 24-ядерном Linux, поэтому я пытаюсь понять, как лучше всего использовать свои ресурсы.
library(zoo)
x = replicate(150000, rnorm(24))
list1 <- list(elem1 <- x, elem2 <- x)
nested_list <- list(elem1 = list1, elem2 = list1)
mclapply(nested_list, FUN = function(x){
lapply(x, FUN = function(y){
rollmean(y, 7)
})
})
Когда я отслеживаю свои процессоры во время выполнения этого скрипта, я вижу это;
Ядра с четными номерами, похоже, вообще не работают, а ядро 1, похоже, способно на большее.
Разве mclapply()
не так просто заменить lapply()
? Фактические функции, которые я использую, взяты из конкретных пакетов, которые мне нужно использовать, поэтому я не могу изменить функции, чтобы они были более эффективными (т.е. использовать dplyr
функций вместо base
функций). Пожалуйста, посоветуйте, как я могу использовать ресурсы более эффективно.