Можно ли вычислить все собственные значения большой разреженной матрицы с использованием нескольких процессоров ?
Если да, то возможно ли это сделать без сохранения полной плотной матрицы в памяти? (используя только сохраненную разреженную матрицу)
Если да, то какой хороший ( быстрое и низкое использование памяти ) способ сделать это ?
Может numpy
или scipy
сделать это?
Моя матрица сложная , не эрмитово , как разреженный как единичная матрица и размерности N x N
, где N = BinomialCoefficient(L,Floor(L/2))
, где нам нужно взять L
как можно большего .
Например, при L = 20
, N = 184 756
он составляет 99,9995% разреженных, имея только N
ненулевых элементов. Таким образом, использование памяти разреженной матрицы составляет ~ 0,1 ГБ, но для плотной матрицы будет ~ 10 ТБ. С L = 30
, N = 155 117 520
и мы используем ~ 60GB (разреженный) и ~ 10EB (плотный). Поэтому невозможно хранить полную плотную матрицу в памяти.
У меня есть доступ к процессорам Intel® Gold 6148 Skylake @ 2,4 [ГГц] с объемом оперативной памяти до 752 [ГБ] каждый. Я мог бы использовать Python, C (ScaLAPACK, OpenBLAS, MAGMA, ELPA, MUMPS, SuperLU, SuiteSparse, PETS c, Lis, ...), C ++ (Armadillo, Eigen, BLitz ++, Trilinos, ... ), Matlab, R, Perl, Fortran, mpi4py, CUDA, Intel® Math Kernel Library и несколько других программ.
Я строю свою матрицу, используя Python (scipy.sparse
, numpy
и multiprocessing
). Я пытался использовать numpy.linalg.eigvals()
и scipy.linalg.eigvals()
, но кажется, что они используют только ядра одного процессора. Я мог бы углубиться в это, но я не смогу, если есть лучший способ решить мою матрицу.
Для любопытных моя матрица исходит из представления неэрмитова оператора на подмножестве состояний длина L
квант спин 1/2 цепочка с сильными взаимодействиями. Мне нужен полный спектр, потому что он позволяет мне изучать распределение уровней энергии в спектре для фиксированного набора квантовых чисел.
Я далеко не профессионал в области компьютерных наук, поэтому, если я пропустил некоторые основа c концепция, пожалуйста, будь добр.