A concrete example of a parfor loop in Matlab that outperforms the for loop

for-loop, matlab, parallel-processing, performance

Solution

I use the following code (once per Matlab session) in order to use `parfor`:

pools = matlabpool('size');
cpus = feature('numCores');
if pools ~= (cpus - 1)
    if pools > 0
        matlabpool('close');
    end
    matlabpool('open', cpus - 1);
end

This leaves 1 core for other processes. Note, the `feature()` command is undocumented.

Problem

I am still somewhat new to parallel computing in Matlab. I have used OpenMP in C successfully, but could not get better performance in Matlab. First, since I'm machine at a university that I am new to, I verified that the machine I am on has the Parallel Computing Toolbox by typing `ver` in the command prompt and it displayed: `Parallel Computing Toolbox Version 5.2 (R2011b)`. Note that the machine has 4 cores I tried simple examples of using `parfor` vs. `for`, but `for` always won, though this might be because of the overhead cost. I was doing simple things like the example here: MATLAB parfor is slower than for -- what is wrong? Before trying to apply parfor to my bigger more complicated program (I need to compute 500 evaluations of a function and each evaluation takes about a minute, so parallelizing will help here), I would very much like to see a concrete example where `parfor` beats `for`. . Examples are abundant for OpenMP, but did not find a simple example that I can copy and paste that shows `parfor` is better than `for`

Original source

Related problems