Параллельная обработка в R с 64-битным на Windows 7 - пакет doSMP - PullRequest
4 голосов
/ 27 ноября 2010

Я установил R (64-разрядную) версию 2.11.1 в Windows 7, а также пакеты doSMP и revoIPC из "REvolution foreach bundle windows" для параллельной обработки.Затем я загрузил библиотеку doSMP в R и получил следующие сообщения от R

> library(doSMP)
Loading required package: revoIPC
Error: package 'revoIPC' is not installed for 'arch=x64'

Как обойти эту проблему?Кажется, что doSMP работает на 32-битном дистрибутиве R, но не на 64-битном.

Я также протестировал следующую программу

------------------------------------------------------
require(doSMP)
workers <- startWorkers(4) # My computer has 2 cores
registerDoSMP(workers)

# create a function to run in each itteration of the loop
check <-function(n) {
 for(i in 1:1000)
 {
  sme <- matrix(rnorm(100), 10,10)
  solve(sme)
 }
}


times <- 10 # times to run the loop

# comparing the running time for each loop
system.time(x <- foreach(j=1:times ) %dopar% check(j))  #  2.56 seconds  (notice that the first run would be slower, because of R's lazy loading)
system.time(for(j in 1:times ) x <- check(j))  #  4.82 seconds

# stop workers
---------------------------------------------------------------------------

И получил следующие сообщения от R

> workers <- startWorkers(4) # My computer has 2 cores
Error: could not find function "startWorkers"
> registerDoSMP(workers)
Error: could not find function "registerDoSMP"

Большое спасибо за вашу помощь.

Тони

Ответы [ 3 ]

1 голос
/ 02 марта 2013

Это было исправлено давно и прекрасно работает в последней 64-битной сборке Revolution R v6.1.

Пример ниже взят из Параллельная многоядерная обработка с R (onWindows) и прекрасно работает на моей машине, на которой установлен Revolution R v6.1 x64 в Windows 7 x64.

require(doSMP)
workers <- startWorkers(2) # My computer has 2 cores
registerDoSMP(workers)

# create a function to run in each itteration of the loop
check <-function(n) {
    for(i in 1:1000)
    {
        sme <- matrix(rnorm(100), 10,10)
        solve(sme)
    }
}


times <- 10 # times to run the loop

# comparing the running time for each loop
system.time(x <- foreach(j=1:times ) %dopar% check(j))  #  2.56 seconds  (notice that the first run would be slower, because of R's lazy loading)
system.time(for(j in 1:times ) x <- check(j))  #  4.82 seconds

# stop workers
stopWorkers(workers)

Обратите внимание, что пакет doSMP встроен в базовую сборку Revolution.R, поэтому вам не нужно устанавливать его из CRAN (по этой причине вы не найдете его в списке пакетов).Все, что вам нужно сделать, это загрузить его с require(SMP).На аналогичном замечании пакет parallel также встроен во все версии R начиная с v2.14.0, загрузите его с require(parallel).

Более важные примечания к этому примеру см. В полной статье Параллельная многоядерная обработка с R (в Windows) .

1 голос
/ 27 ноября 2010

Сообщение об ошибке

Loading required package: revoIPC
Error: package 'revoIPC' is not installed for 'arch=x64'

довольно явно: вы используете 64-битную версию R, но у вас нет всех подкомпонентов, необходимых для загрузки doSMP, в частности пакет revoIPC отсутствует.

Если вы являетесь клиентом Revo, свяжитесь с ними. Если нет, то, возможно, вам нужно рассмотреть различные параллельные вычислительные решения для R.

0 голосов
/ 02 марта 2013

В папке установки Revolution R находится красивый PDF-документ в папке Start..All Programs..Revolution R..Documentation..foreach and iterators - User's Guide.Документ описывает, как распараллелить задачу в R при запуске Windows.Вот темы, которые он охватывает:

Parallelizing Loops
1.1 Using foreach
1.2 Parallel Backends
1.2.1 Using the doMC parallel backend
1.2.2 Using the doParallel parallel backend 
1.2.3 The doSMP parallel backend
1.2.4 Getting information about the parallel backend 
1.3 Nesting Calls to foreach 
1.4 Using Iterators
1.4.1 Some Special Iterators
1.4.2 Writing Iterators
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...