Skip to content


MATLAB is a multi-paradigm numerical computing environment and programming language. A proprietary programming language developed by MathWorks, MATLAB allows matrix manipulations, plotting of functions and data, implementation of algorithms, creation of user interfaces, and interfacing with programs written in other languages.

MATLAB is available as a module on Apocrita. QMUL has a site licence for MATLAB.


To run the latest installed version of MATLAB, simply load the matlab module:

module load matlab

Once the module is loaded, MATLAB can be run either as an interactive job or as a batch job, via the scheduler.

MATLAB Resource Usage

Much of the core MATLAB functionality is multi-threaded and can make use of multiple processor cores.

This includes simple element-wise functions (=+=, .* etc.) which operate on individual elements in a matrix - and more complex algorithms such as FFT.

Running without the JVM

When running without the MATLAB GUI, the MATLAB Java API and without parfor, the JVM can be disabled via the -nojvm option, this will make MATLAB start faster, and use less memory.

VideoReader / VideoWriter Functions

If you want to make use of the VideoReader or VideoWriter functions you will need to load the gstreamer module as well as the MATLAB module before starting MATLAB.

Example Jobs

Interactive MATLAB

Interactive MATLAB sessions can be run in text-only mode or using the full MATLAB GUI. By default the matlab command will try to start the MATLAB GUI using X-Windows, if X is not available, then a text-only session will be started.


To run the MATLAB desktop GUI:

  • log in to the cluster with X-Windows forwarding enabled
  • start an X-Windows session on a node on the cluster using qsh.
  • from this xterm session:
    • load the appropriate MATLAB module: module load matlab
    • start the MATLAB GUI using the matlab command

To start an X-Windows terminal on a node with 4 cores and 4G of RAM:

qsh -pe smp 4 -l h_vmem=1G

module load matlab


Although the GUI appears on the local machine, the session is running on the cluster and can only access files on the cluster.

Text Only

To run a text-only MATLAB session:

  • start a session on a node on the cluster using qlogin
  • load the appropriate MATLAB module e.g. module load matlab
  • start MATLAB using matlab -nodisplay

To start a text-only session on a node with 8 cores and 16GB of RAM.

qlogin -pe smp 8 -l h_vmem=2G

module load matlab
matlab -nodisplay

Specific JVM

If you require MATLAB to use a specific version of the Java, you can set the environment variable MATLAB_JAVA to path of the desired Java version.

Non-Interactive MATLAB

Non-interactive jobs are submitted via the Grid Engine queuing system using the qsub command, and should use the MATLAB -nodisplay option as they do not use the MATLAB desktop.

Array jobs

The SGE_TASK_ID can be accessed via str2num(getenv('SGE_TASK_ID'));

#$ -cwd
#$ -j y
#$ -pe smp 4
#$ -l h_rt=1:0:0
#$ -l h_vmem=2G

module load matlab
matlab -nodisplay -nojvm < ./example.m

Parallel Toolbox

Parallel jobs making use of the MATLAB parallel toolbox can be run in the smp parallel environment. Running with the parallel toolbox allows the launch of a local scheduler and utilisation of MATLAB parfor functionality on a single host.

Parallel Example Job Script
#$ -cwd
#$ -j y
#$ -pe smp 16
#$ -l h_rt=4:0:0
#$ -l h_vmem=2G

module load matlab

matlab -nodisplay < ./matlabparallel.m
Parallel Example MATLAB script
pool = parpool('local', i);

parfor j = 1:i
    fprintf('Im iteration %d\\n', j);


GPU job

This is an example of a MATLAB job requesting 1 GPU and the matching number of slots. Note that MATLAB uses CUDA so CUDA_VISIBLE_DEVICES needs to be set correctly, more information is available on the Using GPUs page.

#$ -cwd
#$ -j y
#$ -pe smp 16
#$ -l h_rt=4:0:0
#$ -l h_vmem=7.5G  # 7.5 * 16 = 120G
#$ -l gpu=1

module load matlab

matlab -nodisplay < ./example.m

Memory request

Note that the memory is slightly less than half a node so it fits alongside the OS and a second job, see the Using GPUs page for more information.