Bonjour,
Matlab tire-t-il partie par défaut, pour augmenter la vitesse de calcul, de la présence de plusieurs de coeurs ?
Merci
Bonjour,
Matlab tire-t-il partie par défaut, pour augmenter la vitesse de calcul, de la présence de plusieurs de coeurs ?
Merci
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)
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 ?
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)
Merci beaucoup !
Comment savoir si un script est parallélisable ?
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)
Ok!
Je crains que mon script ne s'y prête pas vraiment.
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)
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)
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.
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 :
Avec cette toolbox, on ne cherche pas à paralléliser les fonctions MATLAB mais à paralléliser leurs appels.Envoyé par www.mathworks.fr/products/parallel-computing/
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 :
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 for 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 parfor n = 1... A(n) = <fonctionMATLAB>; end
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)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager