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 :

Optimisation de lecture de lourds fichiers CSV


Sujet :

C++

  1. #21
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    A priori (donc je peux dire une c..rie), il y a peut être un 'bouchon' possible sur l'accès disque si les 8 threads tentent de lire/ecrire en même temps. Cet accès concurrent peut être un noeud d'étranglement qui minimise tes gains de passage en multithread. Cela dépend probablement du ratio temps d'accès au disque vs durée des calculs.
    C'est sur...
    Il n'y a qu'un bus connecté au disque dur. Alors 2 ou n threads ne vont pas accélérer la lecture ou l'écriture... Mais le partager !

  2. #22
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Vu la très faible complexité du calcul à effectuer, je ne suis pas sûr qu'il y ait un gain à le passer en multithread (ça risque même d'être pire). Les i/o me semblent le facteur limitant, et le coût de parallélisation risque d'être supérieur au coût du calcul lui-même.

    Personnellement, je ferais confiance aux flux C++ pour la mise en cache de la lecture, je ferais un test monothread (ça doit se coder assez rapidement) en faisant les calculs au fil de l'eau, en lisant les 8 fichiers en même temps, et ensuite je profilerai ça si jamais il s'avère que les perfs ne sont pas bonnes. En fonction des résultats du profilage, tu pourras aviser sur les axes d'amélioration (si 80% de ton temps sont des i/o, inutile de chercher à paralléliser).

    Sinon, en général on lit ligne par ligne en prenant comme séparateur ',' ou ';', mais c'est vrai que je ne sais pas ce qu'il se passe si '\n' est contenu dans une ligne, même entre guillemets.
    Tous les codes que j'ai vus faits comme ça ne gèrent pas correctement ce cas. D'un autre côté, si tu n'en as pas besoin . Mais bon, il ne faut pas oublier que getline fait de toute manière une lecture caractère par caractère derrière, donc niveau perfs ça ne doit pas changer énormément.

  3. #23
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Personnellement, je ferais confiance aux flux C++ pour la mise en cache de la lecture
    Est-ce que l'idée de Joel de passer par un mapping mémoire ne serait pas meilleur ? J'ai rarement entendu dire du bien sur les performances des flux (mais c'est peut être un malheureux 'on-dit').

  4. #24
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Est-ce que l'idée de Joel de passer par un mapping mémoire ne serait pas meilleur ? J'ai rarement entendu dire du bien sur les performances des flux (mais c'est peut être un malheureux 'on-dit').
    Probablement, je ne saurais pas trop dire. Mais il me semble qu'un des problème de l'op, c'était justement que le fichier ne tenait pas en mémoire (du moins, en prendrait trop à son goût). Et comme il ne fait que lire le fichier dans l'ordre, le gain ne me semble pas évident...

    Mon propos, c'est aussi de dire que j'ai l'impression qu'il se pose des objectifs largement supérieurs à son besoin réel, et qu'il devrait d'abord tester une solution simple mais non optimale, et ensuite l'instrumenter pour voir les points à améliorer (s'il y a besoin).

  5. #25
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    mais comme il ne veut pas tester...

  6. #26
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Mon propos, c'est aussi de dire que j'ai l'impression qu'il se pose des objectifs largement supérieurs à son besoin réel, et qu'il devrait d'abord tester une solution simple mais non optimale, et ensuite l'instrumenter pour voir les points à améliorer (s'il y a besoin).
    C'est en général très souvent une bonne idée !

  7. #27
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Probablement, je ne saurais pas trop dire. Mais il me semble qu'un des problème de l'op, c'était justement que le fichier ne tenait pas en mémoire (du moins, en prendrait trop à son goût). Et comme il ne fait que lire le fichier dans l'ordre, le gain ne me semble pas évident...
    Dans mes souvenirs, pour un mmap, le fichier n'est pas EN ENTIER dans la mémoire d'un block. Il reste paginée, etc...

  8. #28
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Dans mes souvenirs, pour un mmap, le fichier n'est pas EN ENTIER dans la mémoire d'un block. Il reste paginée, etc...
    Et si le problème est celui de l'espace d'adressage, on peut ne pas mapper tout le fichier.

    L'avantage du mmap par rapport à read, c'est que la destination va être correctement alignée pour éviter des copies. En gros avec read on a
    - lecture du périphérique vers des tampons internes
    - copie de ces tampons vers l'espace mémoire utilisateur
    mmap permet d'éviter la deuxième étape, le tampon interne peut être mappé directement en mémoire. Ça ne m'étonnerait pas que certains OS optimise les read en mappant directement les tampons en mémoire si la destination a une taille et un alignement convenable, mais même alors ça doit coûter plus qu'un mmap (pour commencer avec mmap l'écriture a la sémantique désirée, avec un read il faut faire du copy on write si on veut conserver le tampon ou alors agir pour éviter qu'il soit utilisé par un autre process ou le même).

Discussions similaires

  1. Optimisation de lecture de gros fichier
    Par uriotcea dans le forum Windows
    Réponses: 3
    Dernier message: 23/11/2006, 19h00
  2. Linges sautées dans "lecture" d'un fichier .csv
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2006, 20h02
  3. [Perf] Optimiser la lecture d'un fichier de taille > 2 m
    Par sacofan dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 22/07/2005, 13h25
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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