-
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
-
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. :)
-
Oui c'est vrai. Je suis principalement intéressé pour Windows 7 et 8.
-
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
-
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.
-
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 ?
-
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.
-
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