|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 92 ![]() |
Bonjour,
Matlab tire-t-il partie par défaut, pour augmenter la vitesse de calcul, de la présence de plusieurs de coeurs ? Merci |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : novembre 2006 Messages : 12 919 ![]() |
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
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • 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) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 92 ![]() |
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 ? |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : novembre 2006 Messages : 12 919 ![]() |
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...
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • 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) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 92 ![]() |
Merci beaucoup !
Comment savoir si un script est parallélisable ? |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : novembre 2006 Messages : 12 919 ![]() |
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.
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • 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) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 92 ![]() |
Ok!
Je crains que mon script ne s'y prête pas vraiment. |
|
|
00
|
|
|
#8 | ||
![]() ![]() Inscription : novembre 2006 Messages : 12 919 ![]() |
Dans ce cas, il existe d'autres possibilités d'optimisation :
Utilise le profiler de MATLAB pour déterminer les lignes de code les plus gourmandes en temps de calcul : Code :
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • 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) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
||
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 92 ![]() |
En voici le résultat :
|
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : novembre 2006 Messages : 12 919 ![]() |
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
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • 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) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 92 ![]() |
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. |
|
|
00
|
|
|
#12 | |||||
![]() ![]() Inscription : novembre 2006 Messages : 12 919 ![]() |
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:
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 :
Code :
![]() 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.
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • 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) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com