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 :

ouverture de fichiers


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut ouverture de fichiers
    Bonjour, dans mon prgm je dois ouvrir N fichiers. A votre avis (et pourquoi) que vaut-il mieux que je fasse ?

    1e méthode : j'ouvre tous les fichiers dès le début et ensuite j'écris dedans puis je les ferme

    2e méthode : je fais une boucle, j'ouvre le 1e, j'écris dedans, je le ferme et je passe au suivant.

    Bien sûr à chaque fois je test si fopen==NULL

    Mon nombre de fichiers varie entre 2 et 1000. Est-ce que je perds plus de temps avec la 2e méthode qu'avec la 1e ?

    Merci.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par salseropom
    Mon nombre de fichiers varie entre 2 et 1000. Est-ce que je perds plus de temps avec la 2e méthode qu'avec la 1e ?
    Je ne pense pas que tu perds plus de temps avec l'une ou l'autre car dans tous les cas tu ouvrira le même nombre de fichiers donc je pencherais plutot pour une ouverture de fichier à chaque tour de boucle !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    La 2eme méthode est mieux !

    Bien sûr à chaque fois je test si fopen==NULL
    Bien entendu !

    Mon nombre de fichiers varie entre 2 et 1000. Est-ce que je perds plus de temps avec la 2e méthode qu'avec la 1e ?
    Non, logiquement tu devrais en gagner (pas beaucoup) avec la méthode 2, car il faut penser au niveau du matériel et logiciel, dans la méthode 1 tu ouvres un flux vers 1000 fichiers, donc concrètement ton programme commence à buffériser tous les début de fichiers, et ton disque dur doit déplacer ta tête de lecture partout, donc il y a beaucoup de donnée stocké en mémoire au départ et ton disque dur travaille beaucoup, si tu lis et écrits au même endroit, la tête de lecture du disque dur devrait logiquement moins bouger et donc être plus efficace.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Les deux methodes sont assez equivalentes en terme de rapidite, puisque le nombre de fopen()/ecriture/fclose() est le meme dans les deux. L'utilisation memoire sera legerement plus importante avec la methode 1 (besoin d'un tableau de pointeurs sur FILE), mais de nos jours, c'est sans importance.
    Le seul probleme avec la premiere methode est que le nombre de flux qu'un processus peut ouvrir est limite par le systeme, un probleme que tu as rencontre dans ton post "Trop de fopen". La seconde methode coutourne se probleme en n'ouvrant qu'un seul a la fois. La premiere methode, par contre, est peut-etre plus facilement parallelisable, meme si les operations d'I/O sont toujours problematiques sur ce point.

    Citation Envoyé par Ti-R
    ton disque dur travaille beaucoup, si tu lis et écrits au même endroit, la tête de lecture du disque dur devrait logiquement moins bouger et donc être plus efficace.
    C'est difficile d'etre formel. Les disques durs actuels ont des caches importants et l'ecriture elle-meme est optimisee.

  5. #5
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Citation Envoyé par DaZumba
    C'est difficile d'etre formel. Les disques durs actuels ont des caches importants et l'ecriture elle-meme est optimisee.
    C'est vrai que sur 2 fichiers on ne verra pas la différence, et sur 1000 fichiers la différence sera faible mais je pense perceptible.

    Mais même si le cache est important sur les disques dur (bien que la taille soit assez faible 16mo maxi), sur 1000 fichiers qu'on à pas encore accédé, ils ne peuvent être mis en cache. L'écriture est optimisé il est vrai, mais autant essayer de palier les problèmes avant qu’ils n’arrivent, et ne pas se reposer entièrement sur le côté technique du matériel en espèrent que le côté logiciel n’influera pas les performances matériels.

    C'est juste le point que je voulais souligner

  6. #6
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Perso, je préfèrais la 2ième méthode (1 fichier par boucle):
    - si tu plante au milieu, tu as déja tes i fichiers
    - moins de FileHandles a avoir (plus facile)
    - je ne vois pourquoi la première méthode serais plus rapide, si tu dois ouvrir N fichiers une fois, c'est pareil non ? (ok, juste le temps de latence entre l'ouverture et l'écriture, mais c'est au scheduler de s'occuper de ça).

    Si t'as le courrage, essaie les deux, et donne-nous les stats

    Citation Envoyé par Ti-R
    ton disque dur travaille beaucoup, si tu lis et écrits au même endroit, la tête de lecture du disque dur devrait logiquement moins bouger et donc être plus efficace.
    Je ne vois pas pourquoi il écrirait au même endroit, vu que les fichiers sont différents

    Rq: pour les perfs, y'a aussi le scheduler d'IO, et pas uniquement le cache du disque...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    OK, merci de vos remarques. Je vais donc opter pour la 2e méthode. D[r]eadLock, je lance les deux versions et j'afficherai ensuite mes temps de calcul.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Re,
    voilà qui est fait, avec la 1e méthode le temps de calcul est de 485 s et avec la seconde il est de 490 s (test effectué sur 5 simulations)

    Merci de vos remarques.

  9. #9
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Combien de fichiers ?
    Comment cela a été mesuré ?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, j'ouvre 7 fichiers (car N = 5). J'ai lancé 5 fois mon prgm (pour les deux versions) et j'ai fait la moyenne du temps écoulé (à l'aide de difftime)
    Mais je voulais juste avoir une idée de la différence de temps, meme si 5 simulations n'est pas très représentatif.

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par salseropom
    meme si 5 simulations n'est pas très représentatif.
    Surtout sur seulement 5 fichiers Il faudrais au moins le faire à assez grande échelle genre une centaine de fichiers Mais là encore le temps peut varier suivant ce qu'il y'a à écrire dans chaque fichiers !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    chaque fichier possède le même nombre de ligne et de colonnes.
    Le temps de calcul devient vite grand lorsque j'augmente N (nombre de domaines). Il faut ensuite que j'aille sur un cluster et utiliser MPI. Le hic : je ne suis pas tout seul sur le cluster.
    Donc j'ai préféré utiliser peu de domaines (N = 5) et le faire sur ma machine en parallèle sur mes 4 processeurs avec les pthreads.

  13. #13
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Oui 5 c'est trop peu, et surtout, il faudrait faire des mesures sans calculs en parallèle !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  2. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 16h47
  3. Ouverture de fichier
    Par Ricou.13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2003, 08h59
  4. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

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