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 :

Lecture fichier plat


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut Lecture fichier plat
    Bonjour,

    Je souhaite me renseigner sur la lecture de data directement sur le disque.
    Le but n'est pas de lire classiquement mais d'utiliser tout ce qui est possible pour améliorer les performances de ce genre de système car les fichiers que je veux lire dépasse la RAM que j'ai a ma disposition.

    J'ai fouiller un peu et j'ai vu que l'on peut faire du swapping. Peut-on charger des morceaux du fichier en RAM et les stocker temporairement sur le disque pour pouvoir y accéder plus facilement ensuite?

    Je crois avoir vu aussi une histoire d'adressage physique. Ce qui correspondrai a avoir directement l'adresse des données sur le disque pour pouvoir y accéder encore plus rapidement, c'est possible?

    Si il y a d'autre chose intéressante je suis totalement preneur.

    Merci de votre aide.

    Cordialement

  2. #2
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 583
    Points : 1 615
    Points
    1 615
    Par défaut
    Salut. Je n'ai pas la réponse à ton soucis mais ça m'm’intéresse aussi.
    Je pense qu'il est important pour ta question de préciser l'OS que tu utilises.
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    Oui c'est vrai. Je suis principalement intéressé pour Windows 7 et 8.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    En gros, si j'ai bien compris, tu as un gros fichier que tu veux lire le plus rapidement possible ?

    Dans la hierarchie des performances mémoires, on Cache>RAM>Disque. Il faut comprendre que ce qui va pénaliser les performances, ce sont les accès au disque dur, il faut donc en faire le moins possible.

    L’idéal, c'est de placer tout le contenu fichier en RAM. Sauf que tu dis que tu ne peux pas. La solution, c'est donc de lire la partie du fichier dont tu as besoin (car on a très rarement besoin de TOUT le contenu d'un fichier), de placer ca en RAM et de bosser dessus.

    Le mot clé c'est memory mapped file. Et google donne des réponses
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    Merci pour le mot-clef!!

    Oui, l'idée est de prendre des bouts du fichier pour travailler dessus mais il va y avoir beaucoup de permutations entre la RAM et le disque car c'est pour être appliqué à de gros algo.

    Je vais poursuivre mes recherches a partir des infos que tu m'a déjà passé.

    Je n'hésiterai pas à mettre ce que je trouve ici.

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut !

    Les choix techniques que tu feras vont aussi dépendre du type d'application : as-tu des grosses données d'entrées et une sortie petite ? Une sortie très grosse elle aussi ? As-tu besoin de toutes les données pour calculer le résultat ou peux-tu calculer ses composantes indépendamment ?
    Find me on github

  7. #7
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    Salut,

    Je dois pouvoir accepter de grosses données (par exemple un tableau de double de plusieurs giga octets). Les sorties peuvent êtres de tous types. Les plus petites possibles dans l'idéal mais ça sera rarement le cas.
    Durant le calcul j'aurai aussi besoin de gros bloc mémoire pour des calculs intermédiaires et pouvant dépasser la ram disponible.
    L'idée est d'appliquer le schéma a plusieurs algorithmes qui peuvent, ou non, traiter des parties des données en entrée indépendamment.

  8. #8
    Membre régulier
    Inscrit en
    Avril 2013
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 93
    Points : 77
    Points
    77
    Par défaut
    J'ai commencé à regarder ce que donnait les fichiers mappé mais je crois que je me suis trompé.
    J'utilise CreateFileMapping et consort pour stocker des données pendant le processus de l'algorithme pour pouvoir y accéder plus tard (la 2nde phase de l'algo).
    Pour des petits jeux tout marche bien et le gain de perf par rapport aux E/S standard est très intéressant.
    Sauf que je croyais que les données était mises sur le disque comme si j'écrivait dans un fichier .txt et apparemment c'est pas ça et on les garde en RAM. Du coup, je crash dès que j'approche les 600 Mo.

    Quelqu'un pourrait m'éclairer s'il vous plaît?

    Du coup, je continue mes recherches pour pouvoir stocker des données sur le disque tout en minimisant le temps d'entrée/sortie.
    Il doit y avoir quelque chose de plus intéressant que les méthodes fournit par fstream.

    Merci de votre aide

Discussions similaires

  1. lecture fichier plat TXT sans espace dans excel
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/06/2011, 18h31
  2. [Batch] Lecture fichier plat : IncorrectTokenCountException
    Par yvera dans le forum Spring
    Réponses: 3
    Dernier message: 10/06/2010, 15h53
  3. Réponses: 2
    Dernier message: 16/11/2009, 14h23
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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