2016-11-05 18 views
0

Matlabを通じてさまざまな入力を求める 'cmd'プロンプトでWindowsの '.exe'ファイルを実行しています。コマンドは次のとおりです。Matlabを使用した並列計算

for i = 1:n 
     filename = sprintf('input_%d.dat',i); 
     string = sprintf('!sfbox.exe %s', filename); 
     eval(string) 
    end 

すべての入力ファイルは存在し、互いに独立しています。私はエラーを取得しますが、コードは

Explanation 

    MATLAB runs parfor loops on multiple MATLAB workers that have 
    multiple workspaces. The indicated function might not access the 
    correct workspace; therefore, its usage is invalid. 

を停止することなく連続的に実行

parfor i = 1:n 
     filename = sprintf('input_%d.dat',i); 
     string = sprintf('!sfbox.exe %s', filename); 
     eval(string) 
    end 

、次のように「のparfor」を使用して、実行を並列化しようとした場合でも、evalのを実行するための正しい方法はありますparforを使って?

(PS:cmdプロンプトでいくつかの.exeファイルを手動で実行しようとしましたが、コマンドプロンプトで複数の.exeファイルを同時に実行することができます)問題はMatlabでやってみる方法です。メソッド)。

答えて

0

実際にevalが何をしているのかわからないMatlabの問題が発生しています。あなたが正しいことをしていることを知っている間、evalコマンドは何かを実行している可能性があります。 transparency issues using eval statements in parfor and spmd statementsに関する少しの資料があります。

fevalステートメントを使用するように切り替えると、問題が解決するはずです.Matlabはそのステートメントに入るのは文字列だけであることを知っています。より直接的には、systemコマンドを使用して、matlabのcmdプロンプトで任意の文字列を直接実行することができます。

parfor i = 1:n 
    filename = sprintf('input_%d.dat',i); 
    string = sprintf('sfbox.exe %s', filename); 
    system(string); 
end 
+0

あなたは正しいです。私は 'system'を直接使っていたはずです。できます。開発中の 'system'コマンドで直面した問題のために私は' eval'を使用していました。 –