UQAM - Université du Québec à Montréal Faculté des sciences
Laboratoire informatique des cycles supérieurs en mathématiques
UQAM  ›  Faculté des sciences  ›  Département de mathématiques  ›  LICSM ›  Calcul parallèle Matlab

Exécution de calculs parallèles MatLab sur les ordinateurs multicœurs, les GPU et les clusters d'ordinateurs

Le laboratoire dispose du module MatLab Parallel Computing qui permet de résoudre les problèmes nécessitant de longs temps de calculs et des volumes de données importants sur des ordinateurs multicœurs et multiprocesseurs, les GPUs, et sur des clusters d'ordinateurs. Les constructions utilisées dans le calcul parallèle (blocs de code et boucles For parallèles for, tableaux distribués, algorithmes numériques parallèles et fonctions de transmission de messages) vous permettent la mise en œuvre du parallélisme de données ou de temps de calcul.

Calcul parallèle local

Le module Parallel Computing fournit huit workers (moteurs de calcul MatLab) pour exécuter les applications localement sur un ordinateur multicœurs.

Calcul parallèle sur un cluster

Sans changer le code, vous pouvez exécuter la même application sur un cluster d'ordinateurs (avec MATLAB Distributed Computing Server). Le laboratoire informatique des cycles supérieurs en mathématique possède un cluster de 8 workers.

L'ordinateur en charge de la distribution des calculs du cluster du laboratoire se nomme Oberon; c'est le JobManagerHost.
Le programmateur (scheduler) d'Oberon se nom LICSM; c'est un programmateur de type JobManager.

Voici un exemple fourni par Alexandre Scott

Recherche de la ressource «jobmanager» dont le nom est LICSM et qui se trouve sur l'hôte oberon

le_manager=findResource('scheduler','type','jobmanager','name','LICSM',
'lookupURL','Oberon');

Créer un job parallèle sur la ressource trouvée précedemment. Le programmateur se chargera de déterminer le nombre de workers nécessaire.

myjob=createParallelJob(le_manager);

Répertoire et fichiers nécessaires à l'exécution de myjob.

set(myjob,'FileDependencies',{'Z:\code\code.m', 'Z:\code\BD'});
set(myjob,'PathDependencies',{'Z:\code'});

Création de la tâche. Le premier argument correspond au nom de la job parallèle. Dans l'exemple présent myjob. Le deuxième argument correspond au nom de la fonction à exécuter: code. Le troisième argument correspond au nombre de résultat attendu (output) à la fin de la tâche, et le dernier argument correspond aux arguments à passer à la fonction code. Ici {} signifie aucun argument.

createTask(myjob,@code,1,{});
submit(myjob);

Attendre que myjob soit fini.

waitForState(myjob,'finished');

Récupérer le résultat

output = getAllOutputArguments(myjob);

Éliminer la tache myjob et le résultat ans de la mémoire et de l'espace de travail.

destroy(myjob);
clear myjob ans;

Flèche Haut

Séparateur

Calcul parallèle avec GPUmat

Le module GPUmat permet au code Matlab de s'exécuter sur le GPU (Graphical Processing Unit) de la carte graphique NVIDIA GeForce GTX460 de 336 noyaux CUDA. GPUmat accélère les fonctions Matlab en utilisant l'architecture multi-processeurs du GPU.

Seuls 4 postes de travail du laboratoire ont une telle carte. Ces postes, situés au PK-5205, sont identifiés par les noms Elara, Japet, Naiade et Pan.

Contrairement au calcul parallèle local ou sur cluster, il faut modifier le code pour utiliser les fonctions spécifiques du module GPUmat.

Consultez le guide GPUmat_User_Guide_0.27.pdf ainsi que gpu-programming-in-matlab-91967v00.pdf pour connaître les fonctions spécifiques de ce module.

UQAM - Université du Québec à Montréal  ›  Mise à jour : 17 octobre 2011