Vous devez utiliser un tableau de 10^10 entiers de 4 octets comme table de correspondance. Le chargement en RAM prend 40 Go, ce qui n'est pas faisable. Vous n'avez jamais besoin d'écrire dans ce tableau après son initialisation. Vous devez lire des valeurs entières individuelles à partir d'emplacements aléatoires de ce tableau simultanément à partir de plusieurs threads d'un même processus. Vous avez la garantie d'être sur une plate-forme 64 bits. Quelle est la mise en œuvre la plus rapide de cette table de consultation? En utilisant des fonctions de lecture de fichiers régulières ou par ex. Boost fichier mappé en mémoire?Table de correspondance basée sur les fichiers
Répondre
Il semble que vous devriez faire des lectures explicites.
Le mappage de mémoire tire sa vitesse d'apporter de gros morceaux de pages à la fois (je crois que Windows fait 256KiB, pas sûr sur les autres plateformes) et vous permet de les ré-accéder sans pénalité après la première fois. Si vous lisez simplement des entiers à partir d'emplacements aléatoires, vous lirez 256 Ko pour seulement 4 octets sur une page, et peut-être même jamais y accéder à nouveau. Quel gâchis! Considérez également que vous avez également paginé beaucoup de données peut-être utiles à partir d'autres applications et le cache du système de fichiers.
Depuis qu'une fois le fichier est créé, vous avez seulement besoin d'y accéder en lecture seule, je ne pense pas que vous voulez le coût d'un fichier mappé en mémoire, Boost ou autrement. Cela serait plus utile si vous aviez plusieurs processus qui voulaient accéder simultanément aux mêmes données. Dans votre cas, vous n'avez que des threads en lecture seule, donc un simple fichier 40g devrait être le plus simple et le plus rapide.
- 1. Table de correspondance basée sur les fichiers
- 2. Scala: Correspondance basée sur l'expression
- 3. redirection basée sur l'URL de correspondance
- 4. correspondance regex basée sur la valeur précédente
- 5. table basée sur l'invite
- 6. Correspondance de modèle basée sur la signature de fonction
- 7. Correspondance SQL la plus proche basée sur la liste prédéfinie
- 8. Génération de correspondance basée sur un modèle utilisant Java
- 9. Apache se dégonfle sur les fichiers condition de correspondance
- 10. noms de table requête basée sur les informations de colonne
- 11. Une table de correspondance pour les prédicats?
- 12. moteur de base de données basée sur les fichiers
- 13. Filtrage de la table basée sur rowname
- 14. Création d'une table basée sur les entrées de données php
- 15. échecs de table basée sur les vues xcode
- 16. Base de données basée sur les fichiers pour C++
- 17. Recoder la variable basée sur la correspondance partielle dans R
- 18. Pandas fillna avec une table de correspondance
- 19. Requête d'une table basée sur une condition
- 20. Supprimer d'une table basée sur la date
- 21. Mise à jour Table parent basée sur les enregistrements enfant
- 22. Correspondance de deux fichiers audio
- 23. comment remplacer l'expression régulière basée sur les résultats de correspondance (par exemple, une fonction spéciale)?
- 24. Afficher les fichiers sur la table. ASP.NET
- 25. Transformation de l'ontologie basée sur les modèles
- 26. Sql créer une table basée sur une valeur de cellule
- 27. Rationalisation de l'édition de fichiers basée sur Powershell
- 28. MS Access: Comment remplir automatiquement à l'aide d'une table de correspondance basée sur la valeur d'un autre champ?
- 29. Quels sont les bons modules Perl pour la programmation basée sur les flux sur les fichiers?
- 30. Comment exclure une ligne basée sur une correspondance de chaîne partielle?
Qu'est-ce que ce tableau est supposé stocker/faire? –
Pour l'accès aléatoire, je suppose que les flux réguliers IO. La mémoire mappée n'aide pas beaucoup s'il n'y a pas de modèle d'accès et qu'elle ne rentre pas (principalement) dans la RAM (à ma connaissance). –
@Jim Fell: Le tableau est utilisé pour mapper la valeur d'indexation x à f (x), où f est une fonction très lente, donc il ne peut pas être utilisé au moment de l'exécution. – zeroes00