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

C++ Discussion :

multithreading et performance


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut multithreading et performance
    une simple question

    Je doit traiter de l'information qui est storer a l'interieur de 2000 a 4000 fichier d'ont la taille varie de 100Ko a 2Go dans mon cas chaque fichiers sera considerer comme un object. Presentement le temps de pris pour executer le travaille est en moyenne 2 heurs mais peut ateindre 6 heurs dans las cas les plus extremes, j'aimerais ameliorer le temps de traitement

    pour ce qui est de la construction des object :

    bienque ce ne sois pas la la principal action qui qui affecte le temps d'excution est-ce que de cree plusieur thread pour lire les fichier pourait ameliorer les performances

    Merci

  2. #2
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Selon moi je dirais non ... voir meme cela ralentirais ton programme car chaque processus liraient des données éparpillés sur le disque dur au lieu de lire les données d'une manière "relativement" linéaire... A moin que tu fasse 2 thread qui lisent chacune sur un disque dur différent...

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Je verais plutot un thread qui lis les données et un autre qui les traite. Comment procèdes-tu pour lire les fichiers ? Tes traitements sont couteux ?

  4. #4
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Tu vas accélérer les perfs en passant en multithread si ta machine possède plusieurs processeurs.

    Le plus important pour toi, sera je pense, la lecture de tes fichiers. Les accès disques sont des facteurs de vitesse très limitant.

    Il est souvent conseillé de lire tes fichiers textes par (gros) blocks et non pas caractère par caractère. Ainsi, le cache du disque peut fonctionner de manière optimale.

  5. #5
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    j'appuis la réponse d'Aurélien : un thread lecteur qui peut se permettre d'être bloqué pendant les latences de lecture sur disque dur; et un thread qui travaille les données déja lu.
    Et une structure de donnée globale au milieu.
    C'est un cas typique du pattern lecteur-écrivain, me semble-t-il.
    En tout cas le sujet est interressant.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Pour améliorer les perfs :

    separer (en termes de thread) lecture/traitement/ecriture.
    ensuite si la machine est multiproc separer le traitement en threads.

    Eventuellement (surtout si les fichiers ne sont pas sur le meme (controlleur IDE de) disque faire des threads differents pour les differents fichiers ->

    l'idée est davoir un algo producteur consomateur

    les threads lecteurs de fichier lisent pour remplir un tampon (grand de préférence) et posent quand le tampon est plein...

    les threads de traitement vident le tampon et envoient leur resultat dans un nouveau tampon et posent soit quand le tampon de sortie est plein soit quand le tampon d'entrée est vide

    les threads d'ecriture ecrivent sur fichier les contenu de leur tampon et posent quand il est vide...

    Si le traitement est vraiement consomateur de temps il n'est pas ralenti par les operations de lecture-ecriture

    Si le traitement n'est pas le facteur limitant tu ne gagneras pas grand-chose...

  7. #7
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    Avant toute chose, il faut étudier le phénomène et comprendre ce qui est long, pour pouvoir cibler au mieux l'optimisation.
    Si tu passes ton temps à optimiser un truc qui ne fait pas perdre de temps, ça ne sert à rien.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    +1
    D'abord identifier ce qui est lent : lecture et/ou traitements.

  9. #9
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    J'ai boucoup de travailles a faire pour tenter d'optimiser cette app.
    La principale cause de la lanteur est directement a la quantiter fenomenal de donnees a traiter, l'optimisation des boucles dans le traitement feras probablement la plus grande difference au niveau du temps d'execution.
    De plus certain section son ecrit en perl <<Ya probablement quelque nanoseconde a recuperer de ce coter>>

    nez en moin la 1erre tache que l'app effectue est de construire ces object a partide de fichier je veux m'assure de ne pas perdre de temp d'execution pour ces operation

    Merci

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Il faut détecter les goulots d'étranglement dans ton programme afin de trouver ce qu'il faut optimiser. Sinon tu vas perdre ton temps à faire des trucs qui ne font pas beaucoup gagner.

Discussions similaires

  1. Proxy thread queue multithread probleme performance
    Par G4uthier dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 16/08/2011, 10h12
  2. Réponses: 16
    Dernier message: 01/10/2010, 13h47
  3. Informations performances multithreading
    Par comtention dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 29/01/2010, 14h53
  4. Réponses: 17
    Dernier message: 01/06/2009, 03h32
  5. Multithread performant pour du calcul
    Par RenaudM dans le forum Langage
    Réponses: 13
    Dernier message: 22/11/2008, 13h26

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