Heim >Backend-Entwicklung >Python-Tutorial >Warum kann ich unter Ubuntu keine großen NumPy-Arrays zuweisen, obwohl ausreichend Speicher vorhanden ist?

Warum kann ich unter Ubuntu keine großen NumPy-Arrays zuweisen, obwohl ausreichend Speicher vorhanden ist?

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 04:33:15785Durchsuche

Why Can't I Allocate Large NumPy Arrays on Ubuntu Despite Sufficient Memory?

Probleme bei der Speicherzuweisung mit der Numpy-Array-Zuweisung unter Ubuntu

Bei der Zuweisung erheblichen Speichers zu Numpy-Arrays unter Ubuntu 18 können Benutzer auf ein Problem stoßen Fehler wie „Array konnte nicht mit Form und Datentyp zugewiesen werden.“ Dieses Problem tritt auf, obwohl ausreichend Arbeitsspeicher vorhanden ist, und wird unter MacOS nicht beobachtet.

Ursache

Das Problem ist auf den standardmäßigen Overcommit-Modus (0) unter Ubuntu zurückzuführen . In diesem Modus schränkt der Kernel die Speicherzuweisung ein, um eine Überbelegung physischer Seiten zu verhindern. Dies wird zu einem Problem, wenn Speicher für große Arrays wie das angegebene zugewiesen wird, das etwa 282 GB erfordert.

Lösung

Um das Array erfolgreich zuzuweisen, können Sie Folgendes tun Ändern Sie den Overcommit-Modus auf 1. Dadurch wird effektiv der Modus „Immer Overcommit“ aktiviert, der die Zuweisung unabhängig davon ermöglicht, ob der physische Speicher vorhanden ist ausreichend.

Um den Overcommit-Modus als Root auf 1 festzulegen, führen Sie den folgenden Befehl aus:

$ echo 1 > /proc/sys/vm/overcommit_memory

Überlegungen zu Sparse Arrays

Dies Mit der Lösung können Sie Speicherplatz für Arrays zuweisen, die dünn besetzt oder größtenteils leer sind. Es ist jedoch wichtig zu beachten, dass Sie explizit in das Array schreiben sollten, um physische Seiten zuzuweisen, auf denen Daten vorhanden sind. Dies kann für eine effiziente Speichernutzung von entscheidender Bedeutung sein.

Das obige ist der detaillierte Inhalt vonWarum kann ich unter Ubuntu keine großen NumPy-Arrays zuweisen, obwohl ausreichend Speicher vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn