MATLAB Answers

How can I run a function in parallel and return the compiled output of the function?

1 view (last 30 days)
Anthony
Anthony on 16 Jun 2016
Edited: Anthony on 1 Jul 2016
I have a long cell array (thousands) of full file paths, and a function that has been written to pull data from each file path. Normally, I would just send the cell array of file paths to this function, and it would return the data. Because the size of my cell array is so large, this can take a long time, sometimes a couple hours or more. I was wondering if there is any way to have MATLAB call this function in parallel with the file paths sent in groups, and return the results in the same way as without the parallel function processing?
I'll try to give an example to better explain what I want to do.
Current method:
filepaths = {'filepath1','filepath2','filepath3',.....}
results = datapullfunction(filepaths)
Desired method:
filepaths = {'filepath1','filepath2','filepath3',.....}
--send 1/12th of filepaths to datapullfunction 12 times in parallel (I have a 12 core processor) and have it return the same results as the current method--
_____________
Currently I'm trying to use batch:
c = parcluster();
j = batch(c,'datapullfunction',1,filepaths);
results = fetchOutputs(j)
but results returns an error saying my input to datapullfunction "is not a recognized option." I know that it is a recognized option because if I send datapullfunction(filepaths) it works just fine.
Thanks!

  0 Comments

Sign in to comment.

Accepted Answer

sam0037
sam0037 on 24 Jun 2016
Hi,
One way to achieve this would be to create a set of jobs and submit to your parallel cluster for execution. Refer to the link below to know more about running independent jobs on a cluster:

  3 Comments

Anthony
Anthony on 1 Jul 2016
All of the examples only use a function with a single input, my function takes 4 inputs -> myfunction(cellarray, cellarray, constant, cellarray) I'm having a hard time determining what the syntax would be with createTask using multiple inputs. Do you know how to do this?
Walter Roberson
Walter Roberson on 1 Jul 2016
{inputargs} A row cell array specifying the input arguments to be passed to the function F. Each element in the cell array will be passed as a separate input argument. If this is a cell array of cell arrays, a task is created for each cell array.
Anthony
Anthony on 1 Jul 2016
Success! Thank you both! Using this parallel method sped up my code over 4 times the original speed, using a 6 physical core processor.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!