3

各スレッドの結果を 1 つの共通ファイルに保存する R の並列プロセスがあります。ただし、データの重複があるため、そうすると問題が発生します。私はデータフレームに集約し、最後にすべてのデータを一度に書き込むことができますが、データが巨大であるため、システムのメモリが不足したり、何か他のことが起こったりしてもデータが失われないようにしたいと考えています. 1 つのファイルに書き込み、ファイルがロックされていること、またはデータが非同期に書き込まれていることを確認するにはどうすればよいですか。念のため Windows でコードを実行しておりdoSNOW、並列化に使用しています。

メインコードはこちら

HedgedPortfolio <- data.frame()
cl<-makeCluster(6) 
registerDoSNOW(cl)
no<-length(X)
HedgedPortfolio<-foreach(i=1:no,.combine='rbind') %dopar%
{
  HedgeMain(as.Date(X[i]),InitPnlRecon)
}

stopCluster(cl)
HedgeMain<-function(X,InitPnlRecon)
{    
    OptimizedPort<-.............some computation                               
    write.table(OptimizedPort,file="C:/OptimizedAll.opt",     
                quote=FALSE,append=TRUE,sep=";",
                col.names = FALSE,row.names = FALSE)
    OptimizedPort
}
4

2 に答える 2

1

write.*Rやcat関数は、単一の宛先ファイルを使用するために必要なファイルロック機能を提供するとは思いません。このような機能をサポートするデータベースにアクセスするか、複数のファイルを使用する必要があります。ノードが終了した場合の復元力の追加要件から、これを密結合プロセスとしてではなく、分散バッチプロセスとして実行する必要があるように思われます。ハイパフォーマンスコンピューティングタスクビューには「リソースマネージャーとバッチスケジューラ」セクションがあり、このタスクに適用できるパッケージがいくつかあります。特にバッチバッチジョブです。

R-HelpとHPC-SIGについて、関連する可能性のある最近の議論がありました。スレッドはここから始まります:

https://stat.ethz.ch/pipermail/r-help/2012-September/324748.html

一部のスレッドでは、個別のCPUワーカーがディスクファイルの途中で特定のポイントにアクセスする方法について説明しています。「適切なデータ」を上書きしていないことを正しく確認するには、独自のコーディングが必要です。

于 2012-09-15T15:52:24.370 に答える