2

私は、時間のかかる計算集約型バックテストを並列に実行する必要があります。 バックテストには平均8時間かかっており、30回実行する必要があります。それらはすべて異なる入力で同じ関数を呼び出します。これまでに見つけられたのは、foreachパッケージを使用するコードの一部です。R:並列化されたバックテストを実行する

require(foreach) 
require(parallel) 
require(doParallel) 

cores = detectCores() #32 
cl<-makeCluster(cores) #register cores 
registerDoParallel(cl, cores = cores) 

foreach (j=1:2) %dopar% { 

    if(j == 1) 
    { 
     get_backtestRUN(inputA) 
    } 

    if(j == 2) 
    { 
     get_backtestRUN(inputB) 
    } 
} 

私の最初の質問は、より汎用的であり、私は上記のパッケージは私の問題を解決するための最良の方法であるかどうかを知りたいです。

2番目の質問は、ローカルマシンで8つのバックテストを並行して実行できるため、追加のコンピューティングパワーの使用に関連しています。オンラインオプションがたくさんあります。このリンクは、かなり明確に私の質問に答える

答えて

1

あなたの助けと時間を

おかげで、:重要な部分の下に

https://www.r-bloggers.com/how-to-go-parallel-in-r-basics-tips/

foreachのパッケージの背後にある考え方は、作成することです。 'ループとラップル関数の標準のハイブリッド'とその使いやすさは、かなり人気がありました。セットアップは、あなたが以下のようにクラスタを「登録」必要がある、若干異なります。

registerDoParallel(no_cores) 

しかし、その後、あなたが覚えておく必要があります:あなたが最後の2行を変更することができ

library(foreach) 
library(doParallel) 

cl<-makeCluster(no_cores) 
registerDoParallel(cl) 

注意STOPCLUSTER()の代わりに、端部で行う:

stopImplicitCluster() 

foreachの機能は、適切なフォーマに結果を組み合わせることができparSapplyのより制御されたバージョンであるとみなすことができますt。最後はただ、デフォルトであり、任意の微調整することなく達成することができることを

foreach(exponent = 2:4, 
     .combine = c) %dopar% 
    base^exponent 

foreach(exponent = 2:4, 
     .combine = rbind) %dopar% 
    base^exponent 

     [,1] 
result.1 4 
result.2 8 
result.3 16 

foreach(exponent = 2:4, 
     .combine = list, 
     .multicombine = TRUE) %dopar% 
    base^exponent 

[[1]] 
[1] 4 

[[2]] 
[1] 8 

[[3]] 
[1] 16 

注:.combine引数を指定することにより、我々は結果を結合する方法を選択することができ、以下のベクトル、行列、およびリストの例です。 foreach(指数= 2:4)%ドーパル%。この例では、ネストされたリストを避けるために必要な.multicombine引数に注目する価値があります。リスト(list(result.1、result.2)、result.3):

foreach(exponent = 2:4, 
     .combine = list) %dopar% 
    base^exponent 
[[1]] 
[[1]][[1]] 
[1] 4 

[[1]][[2]] 
[1] 8 


[[2]] 
[1] 16 
+0

潜在的な解決策へのリンクは常に歓迎しますが、リンクの周りにコンテキストを追加する](// meta.stackoverflow.com/a/8259)あなたの仲間のユーザーは、それが何であるか、なぜそれがあるのか​​をいくつか考えています。ターゲットサイトに到達できない場合や、永続的にオフラインになる場合は、常に重要なリンクの最も関連性の高い部分を引用してください。外部サイトへのリンク以上のものがあることを考慮に入れてください。なぜ、どのように答えが削除されますか?(// stackoverflow.com/help/deleted-answers)という理由が考えられます。 – FrankerZ

+0

私の答えを完了しました。私は自分自身の質問に答えています。 – Fredkho

関連する問題