2016-11-05 3 views
0

Я выполняю файл Windows .exe 'в командной строке' cmd 'для различных входов через Matlab. Команды следующие.Параллельные вычисления с использованием 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 используя парформу?

(PS: Я попытался вручную выполнить несколько файлов .exe в командной строке cmd, и в командной строке возможно запустить несколько файлов .exe. Проблема заключается в том, как я пытаюсь сделать это в Matlab. методы.)

ответ

0

Вы сталкиваетесь с проблемами с Matlab, не зная, что на самом деле делает eval. Хотя вы знаете, что он поступает правильно, команда eval может выполнять что угодно. Существует небольшая документация по transparency issues using eval statements in parfor and spmd statements.

Переключение на использование инструкции feval должно решить вашу проблему, поскольку Matlab будет знать, что единственное, что входит в этот оператор, - это строка. Более конкретно, вы можете использовать команду system для непосредственного выполнения произвольной строки в командной строке cmd из matlab.

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

Вы правы. Я должен был использовать 'system' напрямую. Оно работает. Я использовал 'eval' из-за проблем, с которыми я столкнулся с командой' system' во время разработки. –

Смежные вопросы