# MATLAB/Parallel

MATLAB's Parallel Computing Toolbox lets you run suitably-written programs in parallel. Several cores calculate different parts of a problem at the same time to reduce the time-to-solution.

For suitable MATLAB programs (such as those containing `parfor` loops), using the Parallel Computing Toolbox requires two steps:

- use a parpool in your MATLAB program and
- request multiple cores from Euler's LSF batch scheduler.

### Use a parpool

A trivial parallel program (`simulation.m`) is shown below:

euler = parcluster('local'); squares = zeros(10,1); pool = parpool(euler,4); parfor i = 1:10 squares(i) = i^2; end disp(squares) pool.delete()

Note that the *local* parpool is limited to 12 cores in releases up to R2016a (8.7/9.0). From release R2016b (9.1) on, you can use all the cores of Euler nodes (effectively 24).

Older versions of MATLAB used a matlabpool instead of a parpool.

### Submit a Parallel Job

Pass the number of cores (e.g., 4) to bsub's `-n` argument. This should match the size of the pool requested in your MATLAB script.

bsub -n 4 -W "1:00" -R "rusage[mem=2048]" matlab -nodisplay -singleCompThread -r simulation

Note that you must *not* use the `-nojvm` argument but you *should* include the `-singleCompThread` argument. MATLAB is quite memory-hungry, so request at least 2 GB of memory.

### Troubleshooting Parallel Jobs

Using parallel pools often results in hard-to-diagnose errors. Many of these errors are related to running several pools at the same time, which is not what MATLAB expects. If you encounter persistent problems starting pools, try to perform one of these commands. Before running them, make sure that you do not have a MATLAB processes running.

- Remove the
`matlab_metadat.mat`file in your current working directory. - Remove the
`$HOME/.matlab/local_cluster_jobs`directory. - Remove the entire
`$HOME/.matlab`directory.**Warning**: Your MATLAB settings on Euler will be lost.