Я запускаю простую программу на Python, которая занимает много часов, чтобы создать большой (102 000 x 102 000) массив float32 (A).Общий объем памяти, занимаемый массивом, составляет ~ 40 ГБ, и я использую его на виртуальной машине Amazon EC2 (с Ubuntu) с 130 ГБ ОЗУ.Другие пользовательские процессы не выполняются, и я могу использовать top, чтобы увидеть, что на самом деле программа использует только около 56 ГБ на этапе создания массива (не спрашивайте меня, почему он использует даже так много), последовательно оставляяоколо 68 ГБ бесплатно, даже после учета системных процессов.Пока все хорошо.
Но почти финальная строка в программе -
A = np.sqrt(A)
, и в этот момент программа вылетает с ошибкой памяти.Я не понимаю, почему это происходит, даже учитывая необходимость во временном массиве того же размера (это все равно должно оставить около 28 ГБ бесплатно).Единственное, о чем я могу думать, - это то, что np.sqrt () может внутренне использовать float64 для чистого пространства.Есть ли другое возможное объяснение?
Мой единственный обходной путь сейчас состоит в том, чтобы вычислять квадратный корень поэлементно для циклов for.