Utilisation du compilateur Matlab

La toolbox Compiler permet de transformer un calcul Matlab en un exécutable autonome sous Linux, Windows ou MacOSX. L’exécutable obtenu n’utilise aucune licence. Cette solution est très pratique pour la diffusion des applications sur des machines ne disposant pas de MATLAB.

L’exécutable généré peut utiliser toutes les toolbox accessibles au mésocentre

Pour pouvoir compiler avec MATLAB, le programme principal doit être présenté sous forme d'une fonction

Prenons la fonction MATLAB magicsquare comme exemple :

function m = magicsquare(n)
%MAGICSQUARE generates a magic square matrix of the size specified
%    by the input parameter n.
 
% Copyright 2003-2006 The MathWorks, Inc.
 
if ischar(n)
    n=str2num(n);
end
m = magic(n)

Compilation du programme :

charger Matlab

$ module load matlab 

Compiler le programme

$ mcc -m magicsquare.m

On obtient, dans le répertoire courant, un exécutable magicsquare et un fichier shell run_magicsquare.sh qui sera utilisé pour lancer l'exécution.

Exécution du programme :

./run_magicsquare.sh 
------------------------------------------
Usage:
./run_magicsquare.sh <deployedMCRroot> args

Ou <deployedMCRroot> est le répertoire d'installation de MATLAB. ie $MATLAB_HOME et args sont les arguments du programme (la fonction).

./run_magicsquare.sh $MATLAB_HOME 2
 
m =
 
     1     3
     4     2

L'exécutable sera exécuté sur le cluster lumière comme n'importe quel programme sans consommer des jetons Matlab.

Voici un exemple de script SGE possible :

#!/bin/bash -l
 
#$ -V
#$ -N test_matlab
#$ -cwd
#$ -o $JOB_NAME.$JOB_ID.out
 
 
export HOME=$WORK    ## important
 
module load matlab # on en a besoin uniquement pour specifier $MATLAB_HOME    
 
 
./run_magicsquare.sh $MATLAB_HOME 2

Il est également possible d'utiliser l'outil deploytool depuis MATLAB pour générer un exécutable : Exemple d'utilisation.

Dans ce cas, il est important de penser ensuite à libérer la Toolbox Compiler pour les collègues en fermant la fenêtre Deployment Tool !

Déploiement des applications

Il est possible d'exécuter les applications compilées avec Matlab Compiler sur des machines ne disposant pas de MATLAB. Pour cela, ces machines doivent disposer de MCR (Matlab Compiler Runtime). Vous pouvez nous contacter pour vous fournir la version linux disponible au mésocentre.

Limitations

Le compilateur MATLAB ne peut pas compiler :

  • un script MATLAB, il faut que ce soit une fonction MATLAB, souvent il suffit de rajouter function f=nomfonction en première ligne.
  • Si le programme contient uniquement une fonction, il faut ajouter exit juste avant le end→ sinon le programme ne s'arrête jamais (BUG).
  • un code contenant eval, input.
  • un code qui utilise les objets MATLAB.

Documentation