Как оптимизировать распределение памяти в Python с большими массивами numpy? - PullRequest
0 голосов
/ 09 февраля 2019

Я использую numpy (1.15.4) и h5py (2.9.0) следующим образом:

import numpy as np
import h5py
import sys

Ns, N, L, Nz = (40, 80, 3240, 160)
largeArray = np.zeros((Ns,N, L, Nz), dtype=complex)

for ids in range(Ns):
    for n in range(N):
        for l in range(L):
            #calling a bunch of numerical operations with pybind11 
            #and storing the results into a largeArray
            largeArray[ids, n, l]=ids+n+l*1j

f = h5py.File('myFile.hdf5', 'w')
f.create_dataset('largeArray', data=largeArray)
print('content:', largeArray.nbytes)
print('size:', sys.getsizeof(largeArray))

Большой кусок данных должен быть выделен 26,5 ГБ, и система сообщает148 ГБ памяти.Я предполагаю, что диспетчер памяти обменивает данные в памяти с жестким диском, правильно?Я использую pybind11, чтобы обернуть числовые операции, и я начал разбивать данные на куски в самом внешнем цикле (ids), чтобы хранить данные с mpi и h5py в параллельно , но в какой-то момент у меня заканчивается хранилище.Есть идеи, что может съесть всю память?

...