Bonjour,
J'ai besoin d'ecrire un programme qui lit un fichier texte contenant entre 50 et 500 Mo de nombre entier (sous forme texte) dans un tableau a 3 dimensions (mais je peux survivre avec une seule dimension) et ensuite faire certains calculs dessus.
La taille maximum theorique en C avec des entiers 32 bits serait a peu pres de 3-400 Mo, malheureusement, j'atteins des tailles de 9-10 Go simplement avec des tableaux 2 dimensions (trop de reference anonyme a d'autre petits tableaux ?).
J'ai essaye avec des tableaux une dimension aussi, et la taille memoire totale est toujours de 4 a 5 fois plus que la taille minimum possible (entre 1 et 2 Go contre 3-400Mo).
Je voudrais savoir si l'un d'entre vous connait un module qui permette de gerer des gros tableaux d'entiers (de l'ordre de la 100aine de million d'entrees) sans faire exploser la machine ... (et je n'ai vraiment pas envie de passer au C).
J'ai essaye Math:Matrix, mais la representation memoire des tableaux est la meme que le perl standard, je ne suis pas plus avance.
Merci d'avance,
Charlie.
# bd ?
Posté par briaeros007 . Évalué à 3.
Quelque soit la direction que tu prend : bonne chance.
ps : peut être que les stocker en binaire dans un fichier, et les lire avec "unpack" pourrait suffire, si c'est juste un accés séquentiel dont tu as besoin.
pps : dans tous les cas, essayer de décomposer tes opérations en plus petits blocs ne peut qu'être bénéfique, par exemple tu pourra paralléliser beaucoup plus facilement.
[^] # Re: bd ?
Posté par arthurr (site web personnel) . Évalué à 2.
# BerkeleyDB ou fichiers
Posté par Benoit . Évalué à 2.
Sinon, beaucoup plus pédestre, tu stocke le tout dans un fichier et tu remplace l'accès direct à la mémoire par des accesseurs en lecture/écriture (certes moins pratiques).
Si l'accès aux données n'est pas si aléatoire que ça, mais plutôt séquentiel, je te conseille de mapper tout ou partie du fichier en mémoire (use Sys::Mmap).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.