Write Portable Parallel Code - MATLAB & Simulink (original) (raw)

You can write portable parallel code that automatically uses parallel resources if you use Parallel Computing Toolbox™, and that will still run if you do not have Parallel Computing Toolbox.

This topic covers how to:

Run Parallel Code in Serial Without Parallel Computing Toolbox

You can run the following parallel language features in serial without Parallel Computing Toolbox:

To write portable parallel code designed to use parallel pools or clusters if you have Parallel Computing Toolbox, use parallel language syntaxes with automatic parallel support. These syntaxes run in serial if you do not have Parallel Computing Toolbox.

To write portable parallel code that automatically runs in serial if you do not have Parallel Computing Toolbox, do not specify a pool argument for these language features.

As a best practice, specify the pool argument for Parallel Computing Toolbox functionality only if you need to specify an environment to run your code. If you do not specify a pool argument for parallel functionality, the functionality runs:

If you do not have a parallel pool open and automatic pool creation is enabled, you open a pool using the default cluster profile. For more information on setting your default cluster profile, see Discover Clusters and Use Cluster Profiles.

Use parfeval without a pool to asynchronously runmagic(3) and return one output. The function runs in serial if you do not have Parallel Computing Toolbox.

Use a parfor-loop without a pool to runmagic with different matrix sizes. The loop runs in serial if you do not have Parallel Computing Toolbox.

parfor i = 1:10 A{i} = magic(i); end

For information about parallel language syntaxes that run in serial without Parallel Computing Toolbox, see Run Parallel Language in Serial.

Automatically Scale Up with backgroundPool

If you have Parallel Computing Toolbox, your code that uses backgroundPool automatically scales up to use more available cores.

For more information about your calculations in the background automatically scaling up, see Run MATLAB Functions in Thread-Based Environment.

Run parfor-loop on the Background Pool

You can use parforOptions to run aparfor-loop on the background pool.

Note

When you run a parfor-loop using the background pool, MATLAB® suspends execution until the loop is finished. As the code still runs in the background, you can use only functionality that is supported in a thread-based environment.

When you run multiple functions in the background usingparfeval and backgroundPool, your code scales up to use more available cores. Use parfeval to run rand in the background 20 times.

for i = 1:20
f(i) = parfeval(backgroundPool,@rand,1); end

To run a parfor-loop in the background, specifybackgroundPool as the pool argument forparforOptions, then use the result as theopts arguments for parfor.

parfor (loopVal = initVal:endVal, parforOptions(backgroundPool)) statements end

Write Custom Portable Parallel Code

If you write portable parallel code that can automatically use parallel resources if you have Parallel Computing Toolbox, you create portable parallel code with the following limitations:

The selectPool function below returns either the background pool or a parallel pool. You can use selectPool as the pool argument with parallel language features such as parfeval and parforOptions. If you have Parallel Computing Toolbox and have automatic parallel pool creation enabled, the function returns a parallel pool. Otherwise, it returns the background pool.

function pool = selectPool if canUseParallelPool pool = gcp; else pool = backgroundPool; end end