2016-11-05 162 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 

所有輸入文件存在並且彼此獨立。但是,如果我嘗試使用「PARFOR」並行執行如下,

parfor 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. 

是否有執行EVAL以正確的方式使用parfor? (PS:我試着在cmd提示符下手動執行幾個.exe文件,並且在命令提示符下同時運行多個.exe文件是可行的。問題是我嘗試在Matlab中執行它的方式,請建議更好方法)。

回答

0

您遇到的問題與Matlab不知道eval實際上在做什麼。雖然你知道它做的是正確的事,但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'。 –