Run Parallel Language in MATLAB - MATLAB & Simulink (original) (raw)
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 usingbackgroundPool
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`_; end
parfor (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:
- Using pause
- Using fetchOutputs or fetchNext to get results from a
Future
object - Using wait to wait for a
Future
object to finish - Using afterEach or afterAll to run a function after a
Future
object finishes
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 aDataQueue
or PollableDataQueue
object without any pool.
The following code updates a plot on each iteration of aparfor
-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 aConstant
object without any pool.
The following code creates a Constant
object in your current MATLAB session. You can write to a temporary file usingc.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)