2017-08-22 15 views
2

doParallel's vignetteに続いて、doParallel::registerDoParallel()を使用し、options(cores = N)を使用します。Nは、foreachで使用するコアの数です。パッケージのオプション "コア" doParallelはWindowsでは役に立たない?

coresオプションを変更すると、foreachによって使用されるコアの数が自動的に変更されることをforeach::getDoParWorkers()で確認できます。

しかし、Windowsの10(Rおよびパッケージの最新バージョン)には、このオプションは(doParallel::registerDoParallel()を呼び出すとき3で初期化されます)foreach::getDoParWorkers()の値を変更しません、その値の変更などの任意の効果を持っていないようです。

再現例:

doParallel::registerDoParallel() 
options(cores = 1) 
foreach::getDoParWorkers() 
options(cores = 2) 
foreach::getDoParWorkers() 
options(cores = 4) 
foreach::getDoParWorkers() 

が、それはバグですか? Windowsでは動作しませんか?

編集:私は並列バックエンドを別々に登録する方法を知っています。目標はdoParallel::registerDoParallel()(パッケージのロード時に)一度登録してから、使用するコアの数を変更するオプションを使用することです。これがWindows上でも動作するようにする理由です。

答えて

3

パッケージdoParallelのメンテナからの回答、リッチキャラウェイ:たとえば

Windowsがどのようなパラレル(およびdoParallel)パッケージでフォークをサポートしていません。に "cores"引数を使用します。したがって、Windowsでは、すべての "コア"引数が1に設定されます。Windows上でdoParallelを使用して複数のコアを使用するには、makeClusterを使用して複数のワーカークラスタclを作成し、次にregisterDoParallel(cl)を作成します。

これはバグではなく、Windows以外の機能です。これは残念です。

1

paralleldoParallelパッケージの両方を使用して設定する必要があります。

  • 最初のクラスタ
  • レジスタを作成し、クラスタを停止し、新しいプロセスを作成することについてどのようなこと

    library(parallel) 
    library(doParallel) 
    cluster <- makeCluster(3) 
    registerDoParallel(cluster) 
    foreach::getDoParWorkers() 
    [1] 3 
    
+0

申し訳ありませんが、これは私の質問には答えません。明確にするために私の編集をご覧ください。 –

0

と並列に行います?

stops<-function(cl,n){ 
stopCluster(cl) 
cl<-makeCluster(n) 
doParallel::registerDoParallel(cl) 

} 
関連する問題