Matlab
L'utilisation de MATLAB sur le cluster est réservée aux utilisateurs disposant d'une licence valide.
C'est le cas des utilisateurs de l'Université de Lille qui possède une licence "Campus-wide".
Il existe plusieurs manières d'utiliser MATLAB sur le cluster.
Mode "classique" : sbatch + matlab -batch
Job sequentiel
Le dossier /share/doc/submission/matlab/R2025b contient un exemple simple pour un job MATLAB.
Le sous-dossier my_matlab_dir contient une fonction myAdder, utilisée dans le script test_script.m:
addpath('my_matlab_dir');
% Generate two random integers between 1 and 100
num1 = randi([1, 100]);
num2 = randi([1, 100]);
% Add the two integers
result = myAdder(num1, num2)
% Print the result
fprintf('The sum of %d and %d is %d.\n', num1, num2, result);
Le script job.slurm suivant permet de soumettre un job qui exécute ce programme MATLAB sur un nœud de calcul.
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --time=00:30:00
#SBATCH --job-name=Matlab
#SBATCH --mem=4G
# Load Matlab module
module load matlab/R2025b
# Run Matlab with -batch option
# see https://fr.mathworks.com/help/matlab/ref/matlablinux.html
matlab -batch test_script
La soumission du job se fait par : sbatch job.slurm
Job parallèle (multi-core / thread pool)
Dans le script MATLAB on peut utiliser les fonctionnalités de calcul parallèle MATLAB (parpool, parfor, parfeval, spmd, parallélisation implicite, etc).
Par exemple, si le test_script.m contient
tic
parpool("Threads")
n = 200;
A = 500;
a = zeros(n);
parfor i = 1:n
a(i) = max(abs(eig(rand(A))));
end
toc
les itérations de la boucle parfor seront executées par tous les threads disponibles au sein du job slurm.
Si l'en-tête du job.slurm contient
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=10
une sortie possible est:
Starting parallel pool (parpool) using the 'Threads' profile ...
Connected to parallel pool with 10 workers.
ans =
ThreadPool with properties:
NumWorkers: 10
Busy: false
FileStore: [1x1 parallel.FileStore]
ValueStore: [1x1 parallel.ValueStore]
Elapsed time is 11.940512 seconds.
Parallel pool using the 'Threads' profile is shutting down.
Job parallèle (multi-nœud / process pool)
À la place de parpool("Threads") il est possible d'utiliser parpool("Processes").
Sur un seul nœud de calcul il est souvent préférable d'utiliser des threads (moins d'overhead, chaque "Process" devra créer une instance de MATLAB...).
Par contre, pour utiliser plusieurs nœuds de calcul, l'utilisation du profil "Processes" devient indispensable.
Avec ce changement dans le script MATLAB et l'en-tête du job.slurm
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4
on obtient la sortie suivante. On peut noter que le temps d'exécution augmente, dû au coût de gestion plus élevé du ProcessPool.
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to parallel pool with 8 workers.
ans =
ProcessPool with properties:
Connected: true
NumWorkers: 8
Busy: false
Cluster: Processes (Local Cluster)
AttachedFiles: {}
AutoAddClientPath: true
FileStore: [1x1 parallel.FileStore]
ValueStore: [1x1 parallel.ValueStore]
IdleTimeout: 30 minutes (30 minutes remaining)
SpmdEnabled: true
Elapsed time is 41.454107 seconds.
Parallel pool using the 'Processes' profile is shutting down.
MATLAB Parallel Server
A compléter