MATLAB
Scientific computing and visualisation.
Interactive usage
After connecting to Bessemer, start an interactive session with the srun --pty bash –i
command.
The latest version of MATLAB (currently 2022a) is made available by running:
module load MATLAB/2022a
Alternatively, you can load earlier MATLAB versions by running:
module load MATLAB/2018b
module load MATLAB/2019a
module load MATLAB/2020a
module load MATLAB/2020b
module load MATLAB/2021a
module load MATLAB/2021b
module load MATLAB/2022a
You can then run MATLAB by entering matlab &
.
Serial (one CPU) batch usage
Here, we assume that you wish to run the program helloworld.m
on the system:
function helloworld
disp('Hello World!')
end
First, you need to write a batch submission file.
We assume you’ll call this my_job.slurm
:
#!/bin/bash
#SBATCH --mem=16000 # Request 16 GB of real memory
module load MATLAB/2022a
matlab -nodesktop -nosplash -r helloworld
Ensure that helloworld.m
and my_job.slurm
are both in your current working directory,
then submit your job to the batch system:
sbatch my_job.slurm
Note that we are running the script helloworld.m
but we drop the .m
in the call to MATLAB.
That is, we do -r helloworld
rather than -r helloworld.m
.
The output will be written to the job text file when the job finishes.
Parallel MATLAB
Parallel MATLAB using multiple nodes is restricted to a maximum of 40 cores.
Here is an example using 4 cores on a single node.
Create a Slurm submission script called parallel_example.slurm
containing:
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --mem=16000
#SBATCH --ntasks-per-node=4
#SBATCH --time=00:05:00
#SBATCH --job-name=matlab_par_test
module load MATLAB/2022a
matlab -nodisplay -nosplash -r "parallel_example($SLURM_NTASKS)"
And create a MATLAB script called parallel_example.m
containing:
function exit_code = parallel_example(n_cores)
tic
pool = parpool(n_cores)
n = 200;
A = 500;
max_eigenvals = zeros(n);
parfor i = 1:n
max_eigenvals(i) = max(abs(eig(rand(A))));
end
time=toc;
fprintf('Wall clock duration: %d\n', time);
hdf5write('out.h5', '/maxeigen', max_eigenvals);
exit_code = 0;
end
Then submit this as a batch job using:
sbatch parallel_example.slurm
The MATLAB script, parallel_example.m
,
creates 200 square (500 x 500) matrices comprised of random values,
calculates the eigenvalues of each
and records the maximum eigenvalue for each matrix in the array max_eigenvals
.
Installation note for Administrators:
MATLAB 2018b was installed using Easybuild in the following directory:
/usr/local/packages/live/eb/MATLAB/2018b
The 2018b modulefile is /usr/local/modulefiles/live/eb/all/MATLAB/2018b
.
MATLAB 2019a was installed using Easybuild in the following directory:
/usr/local/packages/live/eb/MATLAB/2019a
The 2019a modulefile is /usr/local/modulefiles/live/eb/all/MATLAB/2019a
.
MATLAB 2020a was installed using the MATLAB installer GUI in the following directory:
/usr/local/packages/live/noeb/MATLAB/2020a/binary/
The 2020a modulefile is /usr/local/modulefiles/live/noeb/MATLAB/2020a/binary
.
MATLAB 2020b was installed using the MATLAB installer GUI in the following directory:
/usr/local/packages/live/noeb/MATLAB/2020b/binary/
The 2020b modulefile is /usr/local/modulefiles/live/noeb/MATLAB/2020b/binary
.
MATLAB 2021a was installed using the MATLAB installer GUI in the following directory:
/usr/local/packages/live/noeb/MATLAB/2021a/binary/
The 2021a modulefile is /usr/local/modulefiles/live/noeb/MATLAB/2021a/binary
.
MATLAB 2021b was installed using the MATLAB installer GUI in the following directory:
/usr/local/packages/live/noeb/MATLAB/2021b/binary/
The 2021b modulefile is /usr/local/modulefiles/live/noeb/MATLAB/2021b/binary
.
MATLAB 2022a was installed using the MATLAB installer GUI in the following directory:
/usr/local/packages/live/noeb/MATLAB/2022a/binary/
The 2022a modulefile is /usr/local/modulefiles/live/noeb/MATLAB/2022a/binary
.