Система:
ОС - Windows 7
Оперативная память — 8 ГБ
Процессор - Intel i7
Версия R — Всегда обновляйте ее
Проблема:
R использует только 13% (т.е. 1 из 8 ядер) моего процессора Intel i7. Я хочу задействовать несколько ядер для более быстрого выполнения моего кода. Но, к сожалению, не в состоянии.
Попытки:
Начал использовать пакеты Parallel, Snow, Snowfall, даже настроил их на использование 8 ядер, но, к сожалению, я не использую ни одну из функций применения, чтобы использовать предоставляемые ими пользовательские функции (например, mcapply, sflapply).
for (i in 1:number.of.accounts){
if (is.na(s$rev2012[i]) == "FALSE" && is.na(s$rev2013[i]) == "TRUE"){
loss = rbind(loss, s[i,])
}
x = x + 1
}
Фрейм данных «s» в приведенном выше коде содержит около 56 000 строк с 14 столбцами. «rev» означает доход. Что я пытаюсь сделать, так это то, что если в 2012 году будет выручка, а в 2013 году нет, то мы «потеряли» этого клиента. Я использую «x», чтобы вести подсчет скорости.
Этот фрагмент кода требует много времени для запуска, и я еще не дал ему закончить. Когда я прерываю, я вижу, что не так уж много продвинулось.
Любая помощь в разблокировке всех ядер для запуска этого фрагмента кода была бы действительно здоровой.
Спасибо!
foreach
для параллельных вычислений в Windows. Однако ускорение, которого можно достичь за счет распараллеливания, крайне ограничено (количеством процессоров). Если вы перепишете свой код с векторизованным подходом вместо циклаfor
, вы можете ожидать ускорения на порядки. - person Roland   schedule 13.03.2014loss <- s[!is.na(s$rev2012) & is.na(s$rev2013),]
. Это не распараллеливает его, а вместо этого использует векторизованную форму, для которой оптимизирован R. - person shadow   schedule 13.03.2014foreach
? Невозможно найти помощь для него. тень, спасибо за ваш код. Я пробую это сейчас. Обновлю, если увижу улучшения. Я все еще ищу разблокировку своих ядер конкретно. - person Pragith   schedule 13.03.2014