Maison >développement back-end >Tutoriel Python >Pourquoi ne puis-je pas allouer de grands tableaux NumPy sur Ubuntu et comment puis-je y remédier ?
Contraintes d'allocation de mémoire dans Numpy pour les grands tableaux
Face à une erreur lors de la tentative d'allocation d'un grand tableau numpy sur Ubuntu 18, "Impossible de allouer un tableau avec une forme et un type de données", ce problème n'est pas rencontré sur MacOS. La raison derrière cette disparité réside dans le mode de gestion des surcharges du système.
Gestion des surcharges et allocation de mémoire
Le mode de gestion des surcharges détermine la manière dont le système gère les demandes d'allocation de mémoire. Dans le mode par défaut (0), le noyau vérifie s'il y a suffisamment de mémoire physique pour s'engager dans la demande d'allocation. Dans le cas contraire, il refuse l'attribution. En mode overcommit 1, le noyau autorise toujours les allocations, quelle que soit la mémoire physique disponible.
Résolution
Pour résoudre ce problème sur Ubuntu, vous devez activer le mode overcommit 1. En tant que root, exécutez la commande suivante :
$ echo 1 > /proc/sys/vm/overcommit_memory
Cela changera le mode de gestion du surengagement en 1, permettant l'allocation du grand tableau numpy.
Tableaux clairsemés et mémoire virtuelle
Le mode de surcommission 1 peut être utile pour les tableaux clairsemés, où seule une petite partie de la mémoire allouée est réellement utilisée. En effet, le système n'engage de mémoire physique que sur les pages sur lesquelles il est explicitement écrit, conservant ainsi la mémoire physique.
Avertissement
Il est important de noter qu'en mode de surcommission 1 autorise des allocations importantes, cela peut conduire à une instabilité potentielle du système si la mémoire allouée dépasse la mémoire physique disponible. Utilisez le mode de surcommission 1 avec prudence et surveillez de près l'utilisation de la mémoire de votre système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!