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 :

Multicoeurs et vitesse de calcul


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 98
    Points : 37
    Points
    37
    Par défaut Multicoeurs et vitesse de calcul
    Bonjour,

    Matlab tire-t-il partie par défaut, pour augmenter la vitesse de calcul, de la présence de plusieurs de coeurs ?

    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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Oui dans les versions récentes de MATLAB et pour certaines fonctions seulement.

    On trouve par exemple des informations dans la documentation de la version R2009a => http://www.mathworks.fr/help/release...brdo29n-1.html
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 98
    Points : 37
    Points
    37
    Par défaut
    Merci pour ta réponse.

    Je remarque que le script qui m'occupe actuellement n'investit qu'un seul des huit processeurs présents sur la machine que j'utilise.

    Y a-t-il un moyen d'optimiser la chose ?

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Comme décrit dans le lien que j'ai donné dans mon précédent message, le moyen le plus simple consiste à utiliser la Parallel Computing Toolbox (tu peux toujours télécharger une version d'évaluation)

    Une autre solution consiste à passer par des fichiers MEX écrit en C pour utiliser soit les capacités propres de ce langage soit via les calculs sur processeur graphique (GPGPU).
    Voir ici et ici pour plus d'informations.

    Encore faut-il bien entendu que ton algorithme soit parallélisable...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 98
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup !

    Comment savoir si un script est parallélisable ?

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Il "suffit" d'étudier l'indépendance des tâches et/ou des données.

    Un exemple simple est la multiplication terme à terme de 2 vecteurs.
    La multiplication des deux premiers termes est indépendante de celle des deux suivants. Et ainsi de suite. Les calculs des différentes multiplications peuvent donc être lancés en parallèle.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 98
    Points : 37
    Points
    37
    Par défaut
    Ok!

    Je crains que mon script ne s'y prête pas vraiment.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Dans ce cas, il existe d'autres possibilités d'optimisation :

    • vectorisation
    • fichiers MEX


    Utilise le profiler de MATLAB pour déterminer les lignes de code les plus gourmandes en temps de calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    profile on
    <ton code>
    profile viewer
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 98
    Points : 37
    Points
    37
    Par défaut
    En voici le résultat :


  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    D'après ta capture d'écran, les fonctions gourmandes sont des fonctions de la Signal Processing Toolbox.

    Donc à part l'option de les recoder toi-même, je ne vois pas comment améliorer le temps d'exécution de ton code. Sauf en utilisant une machine plus puissante
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 98
    Points : 37
    Points
    37
    Par défaut
    Merci pour ta réponse.

    Es-tu sûr que ces fonctions ne sont parallélisables ?
    La machine en question semble déjà très puissante.

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Je ne suis pas un spécialiste de la parallélisation mais je vais essayer de résumer

    Il y a 2 types de calcul parallèle sous MATLAB : implicite et explicite

    Avec le type implicite, l’utilisateur ne gère (quasiment) rien. Certaines fonctions de MATLAB sont optimisées pour tirer parti des capacités des processeur multicœurs .
    Ce sont principalement les fonctions qui réalisent des opérations terme à terme (comme la multiplication donc je parlais précédemment) et des fonctions pour l'algèbre linéaire (bibliothèque BLAS...).

    Pour le type explicite, il faut acquérir la Parallel Computing Toolbox.
    C'est à l'utilisateur de savoir si son algorithme est parallélisable ou non.

    Cette toolbox ne sert pas uniquement pour les processeurs multicœurs :

    Citation Envoyé par www.mathworks.fr/products/parallel-computing/
    Parallel Computing Toolbox vous 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.
    Avec cette toolbox, on ne cherche pas à paralléliser les fonctions MATLAB mais à paralléliser leurs appels.
    Pour faire simple, on remplace les traditionnelles boucle FOR-END par des boucle PARFOR-END.

    Par exemple, si ton code fait appel à une fonction MATLAB non parallélisable dans une boucle FOR-END comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for n = 1...
       A(n) = <fonctionMATLAB>;
    end
    Si les éléments de A sont indépendants les uns des autres, tu pourras tirer profit de cette toolbox en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    parfor n = 1...
       A(n) = <fonctionMATLAB>;
    end
    C'est un petit résumé certainement réducteur des capacités de cette Toolbox et du calcul parallèle en général mais n'étant pas spécialiste, j'ai bien peur de dire des bêtises si je continue

    Consulte la plaquette d'information de cette Toolbox, et contacte le support MathWorks, ils sauront sans doute mieux t'informer pour ton besoin spécifique.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. Gestion mémoire et vitesse de calculs
    Par moidibe dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2010, 13h08
  2. vitesse de calcul décroissante (différence fini)
    Par acx01b dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/01/2010, 17h49
  3. [MySQL] Vitesse de calcul MySQL Vs PHP
    Par Tacos dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/01/2010, 00h30
  4. probleme avec la vitesse du calcul
    Par kroma23 dans le forum Débuter
    Réponses: 6
    Dernier message: 23/10/2008, 19h17
  5. imbrication de tables dérivées et vitesse de calcul
    Par tinomulot dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/09/2008, 16h15

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