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.
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
deploytool
depuis MATLAB pour générer un exécutable :
Exemple d'utilisation.
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
- Pour plus d'information tapez sous MATLAB
help mcc
ou consultez la documentation MATLAB en ligne - Télécharger MCR http://www.mathworks.fr/products/compiler/mcr/