File Exchange Pick of the Week

Our best user submissions

Time Parallel FOR (PARFOR) Loops

Sean's pick this week is Par Tic Toc by Sarah Wait Zaranek.

I run a fair number of computationally expensive operations and often use parallel for (parfor) loops to speed them up. This utility interested me mainly because it shows how work is distributed across the workers and provides worker utilization rates.

First, I will make sure a parallel pool is open using gcp() or "Get Current Pool". This opens the headless MATLAB processes that a parfor loop distributes iterations to.

pool = gcp
pool = 

 Pool with properties: 

            Connected: true
           NumWorkers: 2
              Cluster: local
        AttachedFiles: {}
          IdleTimeout: 90 minute(s) (89 minutes remaining)
          SpmdEnabled: true

We'll do a simple example with a loop that has a random pause. The pause is a proxy for an operation that takes a varying and unpredicable amount of time.

n = 50;
p = Par(n); % Build the Par timer
parfor ii = 1:n
    Par.tic; % start timer
    pause(randi(5)) % Pause for up to five seconds
    p(ii) = Par.toc; % measure elapsed time
end
stop(p); % all done
plot(p);

The parfor loop has done a good job distributing the calculations between the two workers. The more highly utilized worker only has one additional iteration that the other.

There are a few other neat tricks in here as well that I found from looking through the code.

  1. If you right click on the axes with each iteration's time, it gives you context menu to select the scale.
  2. Since the Par class inherits from handle, you get those visible methods. Sarah hides those from methods() by making their signature hidden.
  3. Sarah has also provided a full set of documentation on the capabilities of this utiltiy as well as examples.

Comments

Give it a try and let us know what you think here or leave a comment for Sarah.




Published with MATLAB® R2014a

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.