Outils pour utilisateurs

Outils du site


logiciels:matlab

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
logiciels:matlab [2015/02/23 10:01]
montap01 [Travailler avec slurm]
logiciels:matlab [2023/10/16 12:21] (Version actuelle)
montap01
Ligne 9: Ligne 9:
     * 2008a     * 2008a
     * R2014a     * R2014a
 +    * R2017b
 +    * R2019b
  
-==== Toolbox ==== +<note warning> 
-Matlab fonctionne avec des extensions appelées //toolbox//Les toolbox nécessitent des licences additionnelles+CALI ne dispose pas de licences Matlab. Vous devrez donc utiliser des licences flottantes de votre laboratoire pour pouvoir exécuter ce logiciel
- +</note>
-Toolbox disponibles sur CALI :  +
- +
-  MATLAB                                              +
-  Image Processing Toolbox                           +
-  Optimization Toolbox                                 +
-  Partial Differential Equation Toolbox                +
-  Signal Processing Toolbox                           +
-  System Identification Toolbox                      +
  
 ===== Utilisation ===== ===== Utilisation =====
Ligne 29: Ligne 22:
 Par exemple :  Par exemple : 
   module load matlab/R2014a   module load matlab/R2014a
 +  
 +==== Indiquer votre gestionnaire de licences ====
 +Pré-requis : 
 +  - Votre laboratoire doit disposer d'un //gestionnaire de licences flottantes//
 +  - Vous devez connaître le //nom DNS// de ce gestionnaire de licences, et le //numéro de port// utilisé
 +  - L'accès réseau au gestionnaire doit être ouvert depuis CALI
 +
 +Une fois ces conditions remplies, positionnez une variable d'environnement dans votre terminal connecté à CALI : 
 +<file bash>
 +export MLM_LICENSE_FILE <PORT>@<NOM_SERVEUR_LICENCES>
 +</file>
 +en remplaçant ''<PORT>'' par le numéro de port réseau, et ''<NOM_SERVEUR_LICENCES>'' par le nom DNS (ou l'adresse IP) de votre serveur de licences.
 +
 +
 ==== Travailler avec slurm en mode séquentiel ==== ==== Travailler avec slurm en mode séquentiel ====
  
Ligne 43: Ligne 50:
 % Produit matriciel % Produit matriciel
 AB=A*B; AB=A*B;
 +
 +disp(sprintf('Somme de tous les elements de AB : %12.5f', sum(AB(:))));
  
 % Sauvegarde du resultat dans "out.mat" % Sauvegarde du resultat dans "out.mat"
Ligne 49: Ligne 58:
   - Préparation du job slurm (fichier ''matmul.sbatch'') <file>   - Préparation du job slurm (fichier ''matmul.sbatch'') <file>
 #!/bin/bash  #!/bin/bash 
 +#
 #SBATCH --partition=rapide #SBATCH --partition=rapide
-#SBATCH --qos=rapide 
 #SBATCH --ntasks=1 #SBATCH --ntasks=1
 +#SBATCH --mem-per-cpu=1000
 +#SBATCH --time=00:30:00
  
 module load matlab module load matlab
Ligne 60: Ligne 71:
 </code> </code>
  
-:!: Notez deux éléments importants +:!: Notez que 
   * l'option ''-singleCompThread'' demande à matlab de n'utiliser qu'un seul //thread//, car nous avons demandé dans les réservation slurm une seule CPU   * l'option ''-singleCompThread'' demande à matlab de n'utiliser qu'un seul //thread//, car nous avons demandé dans les réservation slurm une seule CPU
   * la commande ''exit'' est nécessaire dans les commandes matlab pour quitter le logiciel à la fin de l'exécution de matmul. En l'absence de cette commande, matlab resterait  en attente de commande, sans "rendre la main"   * la commande ''exit'' est nécessaire dans les commandes matlab pour quitter le logiciel à la fin de l'exécution de matmul. En l'absence de cette commande, matlab resterait  en attente de commande, sans "rendre la main"
 +  * la quantité de mémoire demandée, et le temps prévisionnel d'exécution, sont à adapter pour votre script. N'oubliez pas que slurm tuera le job si la consommation de mémoire ou la durée excédent ce qui est demandé
 +  * vous devez choisir la partition en fonction de vos besoins (voir l'article sur [[:slurm:les-bases | les base de slurm]])
 +
 +==== Execution sous slurm en multi-threadé ====
 +Sans l'option ''-singleCompThread'', matlab utilisera tous les coeurs disponibles sur la machine. On peut également utiliser la commande (**obsolète**) ''maxNumCompThreads'' pour limiter le nombre de threads matlab.
 +
 +Il faut alors que votre réservation //slurm// corresponde au nombre de threads utilisés par matlab.
 +
 +  * Solution 1 : vous réservez un noeud entier et vous laissez matlab utiliser tous les threads
 +  * Solution 2 : vous indiquez dans slurm une réservation de N coeurs et vous faites appel à la fonction matlab ''maxNumCompThreads'' pour limiter le nombre de thread matlab
 +
 +Pour reprendre l'exemple précédent : 
 +  - Script ''matmul.m'' <file>
 +cpus=str2num(getenv('SLURM_CPUS_PER_TASK'))
 +maxNumCompThreads(cpus);
 +disp(sprintf('Max number of threads : %d', maxNumCompThreads));
 +
 +% Creation de deux matrices aleatoires 100x100
 +A=rand(100);
 +B=rand(100);
 +
 +% Produit matriciel
 +AB=A*B;
 +
 +disp(sprintf('Somme de tous les elements de AB : %12.5f', sum(AB(:))));
 +
 +% Sauvegarde du resultat dans "out.mat"
 +save out.mat AB;
 +</file>
 +  - Script ''matmul.sbatch'' <file>
 +#!/bin/bash 
 +#SBATCH --partition=rapide
 +#SBATCH --ntasks=1
 +#SBATCH --cpus-per-task=4
 +#SBATCH --mem-per-cpu=1000
 +#SBATCH --time=00:30:00
 +
 +module load matlab
 +echo "Nombre de cpu : $SLURM_CPUS_PER_TASK" 
 +matlab -nojvm -nosplash -nodisplay -r "matmul, exit"
 +</file>
logiciels/matlab.1424682112.txt.gz · Dernière modification: 2015/02/23 10:01 de montap01