Run Parallel Language in MATLAB
The following parallel language functionality is available in MATLAB®:
You do not need Parallel Computing Toolbox™ to run code using this functionality.
Run Parallel Language in Serial
Some syntaxes for parallel language functionality have automatic parallel support. Functionality with automatic parallel support automatically uses default parallel resources if you have Parallel Computing Toolbox. If you do not have Parallel Computing Toolbox, this parallel language functionality runs in serial. For more information about automatic parallel support, see Run MATLAB Functions with Automatic Parallel Support (Parallel Computing Toolbox).
The following parallel language functionality has automatic parallel support:
To run functions in the background, use parallel language syntaxes with backgroundPool
instead. Code that you write using
backgroundPool
can automatically scale to use more parallel
resources if you have Parallel Computing Toolbox. For more information, see backgroundPool
.
Serial parfor
The following syntaxes run in parallel when you have Parallel Computing Toolbox, and otherwise run in serial:
parfor loopvar = initval:endval;
statements
; endparfor (loopvar = initval:endval, M); statements; end
When a parfor
-loop runs in serial, the
iterations run in reverse order. For more information, see parfor
and parfor
(Parallel Computing Toolbox).
Serial parfeval
and parfevalOnAll
The following syntaxes run in parallel when you use Parallel Computing Toolbox, and otherwise run in serial:
parfeval(fcn,n,X1,...Xm)
parfevalOnAll(fcn,n,X1,...Xm)
When a Future
object runs in serial, MATLAB runs the function fcn
associated with it using
deferred execution. The function runs when MATLAB becomes idle, blocking MATLAB until the function finishes running. Examples of functionality
that causes MATLAB to be temporarily idle include:
Use Parallel Language Without a Pool
DataQueue
and PollableDataQueue
When you create a DataQueue
or PollableDataQueue
object, the object is not directly associated
with the background pool or a parallel pool. You can therefore use a
DataQueue
or PollableDataQueue
object
without any pool.
The following code updates a plot on each iteration of a
parfor
-loop. If you have Parallel Computing Toolbox, the parfor
-loop runs using a parallel pool. If
you do not have Parallel Computing Toolbox, the code runs in
serial.
x = 1:1000 line = plot(x,NaN(size(x))); q = parallel.pool.DataQueue; afterEach(q,@(data)updatePlot(line,data)); parfor i = 1:numel(x) % Simulate some work pause(rand) y(i) = x(i)^2; send(q,[i y(i)]) end function updatePlot(line,data) line.XData(data(1)) = data(1); line.YData(data(1)) = data(2); drawnow end
Constant
When you create a Constant
object, the object is not directly associated with the
background pool or a parallel pool. You can therefore use a
Constant
object without any pool.
The following code creates a Constant
object in your current
MATLAB session. You can write to a temporary file using
c.Value
and fprintf
.
If you have Parallel Computing Toolbox, the parfor
-loop runs using a parallel pool. If
you use a parallel pool, the Constant
is available on each
worker in the parallel pool. Otherwise, the Constant
object is
created only in your current MATLAB
session.
c = parallel.pool.Constant(@() fopen(tempfile(pwd),'wt'),@fclose); parfor i = 1:10 y(i) = i^2; fprintf(c.Value,"%03d %f\n",i,y(i)); end
You can use the following syntaxes without Parallel Computing Toolbox:
parallel.pool.Constant(X)
parallel.pool.Constant(fcn)
parallel.pool.Constant(fcn,cleanupFcn)