2
votes

How to call a function with simple inputs in several MATLAB sessions automatically?

The manual way to do it would be:

  • Open three sessions
  • Call magic(t) where t is 1, 2 or 3 respectively

So, my question is: How can I do this all programatically?

In case it is relevant, I do not want to use the parallel processing toolbox.


Note that I don't think a parfor loop can do what I want. First of all that would require the parallel processing toolbox, and secondly I want to be able to debug as soon as one of these operations fails, without bothering the other sessions.

2

2 Answers

2
votes

First of all a way must be found to open sessions programatically. Based on this and this it is found you can do it as follows (works on windows as well):

% Opening 3 matlab sessions
for t = 1:3
!matlab &
end

Besides simply opening them, a simple command can also be given

!matlab -r "magic(5)" &

Now, to finally combine this just a small trick remains:

for t = 1:3
   str = ['!matlab -r "magic(' num2str(t) ')" &'];
   eval(str)
end

Note that if you want to use more complicated inputs you can simply save them in a struct and call them with this index by using a wrapper script as called function.

1
votes

You could try Multicore, which uses several instances of Matlab to do what parfor does by passing information via a common directory. If you can rewrite your code loop to call a function that returns values then Multicore might do what you are looking for.

http://www.mathworks.com/matlabcentral/fileexchange/13775-multicore-parallel-processing-on-multiple-cores