IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Code MATLAB compilé en C/C++


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut Code MATLAB compilé en C/C++
    Bnjour, j'ai mon code Matlab qui demande beaucoup de temps pour son execution, pour cela je veux le transformer en C/C++ pour ameliorer le temps d'execution. J'ai reflechis à utiliser la commande mcc pour cela.
    Est ce quelcun a travaillé avec cette commande ou a rencontré un problème comme celci.
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Le code MATLAB ne sera pas "compilé" en code C (ou C++.)

    Pour obtenir du code C (ou C++) il faut tout recoder dans ce langage.

    L'outil Compiler permet seulement d'englober du code écrit en MATLAB dans un fichier en C (ou autre). Le code obtenu n'est pas plus rapide (voir la : Une application compilée est-elle plus rapide ?)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Merci. Maintenent je veux savoir comment faire pour ameliorer le temps d'execution du code Matlab en utilisant C/C++.
    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Es-tu sûr d'avoir bien optimisé ton code sous MATLAB ?

    Si tu penses que le code MATLAB ne peut plus être optimisé, il va falloir générer des fichiers MEX.

    Voir encore la : Les fichiers MEX

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Moi je simule suos matlab. pour ce faire je dois utiliser plus de réalisations, et comme mon programme utilise plusieurs fonctions, ceci rend l'execution plus lente. J'ai cherché comment rendre le temps de simulation plus court, mais je n'ai pas abouti à ceci.
    Merci de m'aider

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par boundrey Voir le message
    Merci de m'aider
    Pour ceci, il faudrait que tu nous montres les bouts de code que tu souhaites optimiser.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Par exemple, pour un code Matlab de la courbe de probabilité d'erreur binaire (existe sur le net), vous savez qu'apartir d'un traux d'erreur de 10^(-7) l'execution prend du temps.
    Comment utiliser C/C++ pour rendre la simulation plus rapide.

  8. #8
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    Comme t'as dit Dut il te faut passer par les C-MEX files si tu veux absoluement utiliser du code C/C++ dans MATLAB. Maintenant ce n'est pas dit que tu ailles plus vite en convertissant ton algo en C. Une idée serait de commencer par lire cette note :How do I increase the speed or performance of MATLAB? . Cette note te renverra entre autres sur la note 1109 , qui donne les techniques de vectorisation qui permettent d'accelerer son code.

  9. #9
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Hello,

    De mon experience meme lorsque le code est relativement bien vectorise la conversion en mex ameliore generalement la vitesse d'execution. De plus tout code n'est pas vectorisable...

    Bien sur lors de la conversion en MEX il est sage d'utiliser des librairies optimisees et fiables pour les operations basiques (algebre lineaire par exemple: je pense a BLAS sur lequel matlab est base).

    Comme mentionne le compilateur matlab mcc actuel n'ameliore pas la vitesse d'execution (ou pire, ralentit dans certain cas). Il se peut que les anciens compilateurs matlab 6.5 ameliorent un peu la vitesse: a l'epoque du code C etait genere des fichiers matlab, puis compile, ceci dit ce n etait pas genial non plus, et suivant comment, porter du code matlab7->matlab6 peut etre une operation tres penible.

    Bonne chance,

    Salutations,

    Gregoire

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Je vous remercie, vous tous de vos reponses claires, et j'espere bien que vous avez compris mon prblème.
    J'ai posé ma question car c'est une chose qui est posée pour moi actuellement et je dois avoir une solution pour ce problème (temps d'execution).
    J'ai lu que c'est possible en utilisant C/C++ cad compiler le code Matlab en C, mais selon vous ceci n'ameliore pas le temps d'execution. Maintenent si je traduits tous mes codes Matlab en C (chose difficile) est ce que le temps d'execution s'ameliore ou non?
    La question posée maintenent quelle strategie adopte moi pour sortir de ce problème???

    Mes remerciements à vous tous.
    Boundrey

  11. #11
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Citation Envoyé par boundrey Voir le message
    Je vous remercie, vous tous de vos reponses claires, et j'espere bien que vous avez compris mon prblème.
    J'ai posé ma question car c'est une chose qui est posée pour moi actuellement et je dois avoir une solution pour ce problème (temps d'execution).
    J'ai lu que c'est possible en utilisant C/C++ cad compiler le code Matlab en C, mais selon vous ceci n'ameliore pas le temps d'execution. Maintenent si je traduits tous mes codes Matlab en C (chose difficile) est ce que le temps d'execution s'ameliore ou non?
    La question posée maintenent quelle strategie adopte moi pour sortir de ce problème???

    Mes remerciements à vous tous.
    Boundrey

    1. Le matlab compiler 4 ne transforme pas le code en C. Pour utiliser le matlab compiler il faut avec une license de la toolbox correspondante.
    2. Traduire ton programme en C ameliorera probablement la performance (en general), mais il peut-etre peux-tu aussi reformuler ton programme matlab (ie vectoriser, comme l'a dit Dut) pour ameliorer sufisemment les performences.
    3. Je sais aussi qu'il est possible de convertir un sous-ensemble des instructions matlab en code ansi-c avec une toolbox de simulink (embedded something), je n'ai pas d'experience a ce sujet, peut-etre d-autres personnes auront un feedback.

    Salutations,

    Gregoire

  12. #12
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    bon on se répète depuis le début (optimisation, vectorisation...)!!!
    boundrey quel est ta version MATLAB pour commencer?
    as tu regardé le M-lint par exemple pour voir où ton code passe du temps... ?

    bref faut lire la note que j'ai mise au dessus et l'appliquer, il n'y a rien de plus simple.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Merci, je vais esseyer de vectoriser le plus possible mes codes (déjà fait), et esseyer de suivre vos conseils.
    Moi j'utilise la version Matlab 7.0.1.
    Comment regarder M-lint ?
    J'ai lu votre note consernant l'optimisation par la vectorisation.
    Comme je vous ai dit mes programmes passeront par des boucle inévitables comme par exemple le calcul itératf et le calcul de taux d'erreur binaire en fonction de SNR (sont des parties de mon prog).
    Mes remerciements à vous.

  14. #14
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    Citation Envoyé par boundrey Voir le message
    Comment regarder M-lint ?
    comme ceci

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 62
    Par défaut
    De part mon expérience, environ 5 ou 6 ans de MEX-files, systèmatiquement dés que j'ai un code matlab stabilisé, je le mex. Même, vectorisé à mort, sauf si le code ne fait appel qu' à des opérations d'algèbre matricielle, un mex file ira au minimum 2 à 3 fois plus vite. J'ai observé des gains d'un facteur 30 à 40 même sur des codes vectorisés (et je connais tous les trucs ...)... Il est clair, qu'il faut pas programmer comme un porc en C non plus .... mais avec un minimum de règles, les gains sont vraiment importants.

    Armer-vous d'un bon compilateur C, l'intel compiler est vraiment très performant avec les bons flags même sur processeur AMD, de patience car mexer prend bcp de temps ... mais vous serez content du résultat....

    Une petite URL assez instructive aussi :

    http://ioalinux1.epfl.ch/~mleutene/M...exWrapper.html



    SeBy

Discussions similaires

  1. [Compiler] performance d'un code MATLAB compilé
    Par pierrot74 dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/10/2010, 16h02
  2. Transcrire une fonction mathématique en code Matlab
    Par casper84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/03/2007, 17h04
  3. erreur code à la compilation
    Par kankeba dans le forum Delphi
    Réponses: 2
    Dernier message: 06/03/2007, 23h19
  4. Utilisation du code MATLAB dans environnement .NET
    Par SOPRA-Eherve dans le forum MATLAB
    Réponses: 5
    Dernier message: 28/11/2006, 12h43
  5. DCT & code matlab
    Par meera dans le forum Images
    Réponses: 3
    Dernier message: 19/07/2006, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo