2015-06-19 2 views
0

Я пытался сделать параллельный цикл, но я нашел R не может использовать все свои 8 ядер, он использует только 1 с этим кодом:не может использовать все ядра в R

library(parallel) 
library(foreach) 
library(doParallel) 
no_cores <- detectCores() - 1 
cl <- makeCluster(no_cores) 
registerDoParallel(cl, cores = no_cores) 

sum.of.squares <- foreach(i = 1:10e4, .combine = "+", .init = 0) %dopar% { 
    sqrt(i) 
} 

stopCluster(cl) 

Он использует только около 13-15% процессора. Зачем?

Использование Windows 8.1 с R 3.2.1.

+0

Что возвращает no_cores? – ddiez

+0

@ddiez 7. Для меня есть минус один ядро. – m0nhawk

+0

Обычная ваниль R не очень хороша при распараллеливании. Версия Revolution R использует все команды ядра * и * MMX для достижения 7x увеличения скорости на четырехъядерном процессоре i7 для 'svd' –

ответ

1

Использование R Revolution Open (RRO) 3,2

http://mran.revolutionanalytics.com/documents/rro/installation/

Он поставляется интегрирован с Intel MKL параллельных математических библиотек.

См. fuller comparison here.

+0

Я попробую, хотя это «сбой» «RStudio (и я не хочу искать новую IDE). – m0nhawk

+0

Я использую его с RStudio без проблем. –

+0

RStudio позволяет вам выбрать R-дистрибутив, который вы хотите, из опций/Общие. Я переключил свое на RRO и не имел проблем. Далеко лучше, чем у RRO. Что касается MKL - это команды SSE/AVX * и * оптимизированные алгоритмы, которые минимизируют ошибки с плавающей запятой. Умножение двух матриц 3x3 с помощью одной команды ЦП является приятным. И управление памятью при обработке большого набора данных как потока (например, декодирования) –

Смежные вопросы