2012-04-13 20 views
2

現在、私は時間のかかるMATLAB関数を複数回繰り返して並列実行する必要があるプロジェクトに取り組んでいます。この質問の目的のために、関数をmyfuncとしましょう。MATLABでparforループを使用してセグメンテーションフォールトを処理する

myfuncはMEXファイルを使用し、3時間ごとに1回のランダムセグメンテーション違反が発生します。セグメンテーションフォールトを診断することはできません。なぜなら、私がコードを作成しなかった独自のAPIに由来するからです。しかし、私はそれがMEXファイル内で発生することを知っていますし、変更可能な設定に決定的に関連していないことも知っています。

私はセグメンテーション違反を回避したいと思っています。私は理想的には、MATLABでparfor関数を使い続けたいと思っています。私の考えは今、次のようにのparforループ内のtryキャッチループを使用することです:

%create an output cell to store nreps of output from 'myfunc' 
    output = cell(1,nreps) 

    %create a vector to keep track of how many runs finish successfully without the error 
    successfulrun = zeros(1,nreps); 

    % run myfunc in parallel 
    parfor i = 1:nreps 
     try 
     output{i} 
     successfulrun(i) = true 
     end 
    end 

    %rerun experiments that did not end up successfully 
    while sum(successulruns) < nreps 

     %count number of experiments to rerun and initialize variables to hold those results 
     reps_to_rerun = find(successfulruns == 0); 
     nreps_to_rerun = sum(reps_to_rerun); 
     newoutput = cell(1,nreps_to_rerun); 
     newsuccessfulrun = zeros(1,nreps_to_rerun) 

     %rerun experiments 
     parfor i = 1:nreps_to_rerun 
     try 
      newoutput{i}; 
      newsuccessfulrun = true; 
     end 
     end 

    %transfer contents to larger loop 
    for i = 1:nreps_to_rerun 

     rerun_index = reps_to_rerun(i); 
     successfulrun(rerun_index) = newsuccessfulrun(i) 

     if newsuccessfulrun(i) 
      output{i} = newoutput{i}; 
     end 
    end 
end 

私の質問は以下のとおりです。

  1. それも、このようなより多くの繰り返しを実行するために継続的に保つためにOKでしょうMEXファイルにセグメント違反がありましたか?または私はメモリをクリアするか、matlabpoolを再起動する必要がありますか?私はセグメンテーション違反がCであったので、これは問題ではないはずです。

  2. parforループを "中断する"方法はありますか?

+0

とSegfaultはMATLABをクラッシュ、またはあなただけのTRために行うべき、コードを停止し、あなたに継続しようとするオプションを提供しますかyを押してデータを保存します。例外はありません。不正なメモリアクセスを修正する以外の方法はありません。 – angainor

答えて

0

parforループが連続して実行されていないため、これを中断することはできません。このような理由から、のparforループはネストすることができない1あなたはスペースが不足している場合

、あなたはJVMのメモリ割り当て制限を増やす必要があります^^2

作品を引用:。。

  1. https://docs.google.com/viewer?a=v&q=cache:MinlgB0S8fsJ:its2.unc.edu/divisions/rc/training/scientific/short_courses/ParallelGPUMATLAB.pptx+&hl=en&gl=us&pid=bl&srcid=ADGEEShtEaahOf7u01kO0vT-Asy8itHNzuo4xocdoM5kiAuSCWlHZlKKb-W3Lvftpd6HJJAeyp6Lt-ofaBVH1uG049DFuAzdiu4ElNCtiTeFfYYbSGsJN5JF4S-AKjmWnmIpWIRNHHnR&sig=AHIEtbRU7F2iX9rPnaZBXux3ewL42VCIZQ
  2. http://www.mathworks.com/help/distcomp/parfor.html
関連する問題