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 :

Comment diminuer le temps de calcul


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Mai 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Mai 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment diminuer le temps de calcul
    Bonjour,

    Je suis élève ingénieur actuellement en stage et dans le cadre de mon projet je dois traiter de larges quantités de données.
    Mon maitre de stage m'a tout de suite conseillé de travailler avec des MEX pour gagner en temps de calcul mais après deux semaines d'optimisations, j'en suis à effectuer un traitement de 5h sur un fichier de données d'une minute alors que je dois pouvoir traiter 50 minutes d'un coup en un temps raisonnable pour pouvoir avancer dans mon travail.
    J'ai essayé d'avoir une gestion intelligente de la mémoire et ait essayé d’appeler des fonctions optimisées comme le quicksort dans mes algorithmes mais je commence à avoir du mal à gagner en temps de calcul.
    Cela étant dit, je dispose d'un dual core, d'un GPU et de 32go de RAM.
    N'utilisant que 12% du CPU en moyenne lors de mon traitement, je pense pouvoir gagner en temps de calcul en parallélisant mes algorithmes mais cela voudrait dire que je dois repenser mes algorithmes qui ne sont pour l'instant pas vraiment intéressants à paralléliser. D'autant que je ne sais pas vraiment vers quelles librairies me tourner, n'ayant jamais fait l'exercice.
    Il me reste également la possibilité d'utiliser le GPU, mais je crois savoir que c'est encore plus délicat que le multithreads avec les MEX...

    Qu'en pensez-vous ?

    Merci par avance,

    Pastek

  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
    Citation Envoyé par paS_Tek Voir le message
    N'utilisant que 12% du CPU en moyenne lors de mon traitement, je pense pouvoir gagner en temps de calcul en parallélisant mes algorithmes mais cela voudrait dire que je dois repenser mes algorithmes qui ne sont pour l'instant pas vraiment intéressants à paralléliser. D'autant que je ne sais pas vraiment vers quelles librairies me tourner, n'ayant jamais fait l'exercice.
    Il me reste également la possibilité d'utiliser le GPU, mais je crois savoir que c'est encore plus délicat que le multithreads avec les MEX...
    La programmation parallèle n'a rien de magique. Il ne suffit pas d'ajouter quelques commandes. Il faut identifier les zones du code qui consomment du temps de calcul (avec le profiler de MATLAB) et parfois/souvent en repenser l’algorithme depuis le début (comme tu semble l'avoir compris).

    Le choix de l'implémentation dépend également du matériel disponible (processeurs multicœurs, cluster, GPU NVIDIA/AMD…). Avec MATLAB, il y a aussi la possibilité d'utiliser la Parrallel Computing Toolbox. MAis encore une fois, rien de magique. Il faut tester et évaluer au cas par cas (ou par famille de problème).

    Tu mentionnes que ton code traite un fichier. N'est-ce pas (en partie) un problème de temps d'accès en lecture/écriture ?
    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
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Ton problème, c'est ces 12%. Si ton code était optimisé, tu serais à 50% (1 des deux coeurs serait à fond). Tu peux donc tripler ta vitesse de calcul rien qu'en réglant tes problèmes d'E/S.
    Ta première étape est donc de gagner ce facteur 3.
    La deuxième étape serait de vérifier si tu as fait les bons choix fondamentaux à la base de ton projet. Un vélo, même optimisé, reste un vélo.
    Je ne mettrais le multithreading qu'en dernière intention dans ta course à la performance. C'est du boulot, et tu ne peux pas en espérer plus qu'un gain entre +50% et +80% si tu n'as que deux coeurs sous le capot.
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

Discussions similaires

  1. Réponses: 16
    Dernier message: 26/12/2013, 15h52
  2. Réponses: 8
    Dernier message: 24/11/2011, 19h54
  3. Réponses: 8
    Dernier message: 29/03/2011, 20h23
  4. Réponses: 1
    Dernier message: 24/01/2005, 06h55
  5. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12

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