В случаях, когда требуются тяжелые вычисления, я использовал пакет doParallel
для распределения работы по нескольким ядрам. Случайный пример:
if (detectCores()-1 > 1) {
cl <- makeCluster(detectCores()-1)
registerDoParallel(cl)
tdm <- DocumentTermMatrix(corpus, control = list(dictionary = Terms(tdm), removePunctuation = TRUE, stopwords = TRUE, stemming = TRUE, removeNumbers = TRUE))
stopCluster(cl)
}
Но огромное большинство (вероятно, 99,5%) кода R, который я пишу, не заключено в дополнительный код которые явно распределяют работу по> 1 ядру.
Справедливо ли предположить, что этот код работает на 1 одном ядре? Или для ответа на это потребовалось бы вникать в каждую используемую библиотеку и ее функции (например, tidyverse
, data.table
и c)?
Примечание: кроме некоторых экспериментов по времени, я мало знаю о как R и оборудование взаимодействуют, поэтому, если мое понимание ошибочно (например, неправильные предположения), пожалуйста, укажите.
Предпосылки
Причина, по которой это представляет большой интерес, - помочь выбрать меньшее количество ядер на более высокая тактовая частота по сравнению с большим количеством ядер при более низкой тактовой частоте; al la последний MacBook. Было бы прискорбно платить больше за «лучшие» процессоры только для того, чтобы большинство повседневных задач R выполнялись медленнее из-за более низкой тактовой частоты (при условии, что они выполняются только на одном ядре).
введите описание изображения здесь