Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster -> FAQ MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 08h40   #1
Invité régulier
 
Inscription : mars 2011
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 92
Points : 7
Points : 7
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
recherche888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h37   #2
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 900
Points : 15 900
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
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 13h50   #3
Invité régulier
 
Inscription : mars 2011
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 92
Points : 7
Points : 7
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 ?
recherche888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h11   #4
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 900
Points : 15 900
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
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h13   #5
Invité régulier
 
Inscription : mars 2011
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 92
Points : 7
Points : 7
Merci beaucoup !

Comment savoir si un script est parallélisable ?
recherche888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h16   #6
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 900
Points : 15 900
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
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h20   #7
Invité régulier
 
Inscription : mars 2011
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 92
Points : 7
Points : 7
Ok!

Je crains que mon script ne s'y prête pas vraiment.
recherche888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h23   #8
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 900
Points : 15 900
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 :
1
2
3
profile on
<ton code>
profile viewer
__________________
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
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h39   #9
Invité régulier
 
Inscription : mars 2011
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 92
Points : 7
Points : 7
En voici le résultat :

recherche888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 20h39   #10
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 900
Points : 15 900
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
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 22h02   #11
Invité régulier
 
Inscription : mars 2011
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 92
Points : 7
Points : 7
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.
recherche888 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 09h57   #12
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 900
Points : 15 900
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 :
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 :
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.
__________________
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
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h07.


 
 
 
 
Partenaires

Hébergement Web