Мне нужно решить довольно большие линейные системы (около 1e6 x 1e6, возможно, больше в будущем) в python.Матрица хранится в формате csr.Я попробовал scipy.sparse.linalg.spsolve, который является прямым решателем и неприменим из-за высокого потребления оперативной памяти.Я посмотрел на итеративные решатели scipy.sparse.linalg.bicgstab и scipy.sparse.linalg.gmres.Они способны к параллельным вычислениям?Когда я использую небольшие размеры, используется только одно ядро, когда я использую большее измерение (1e6), используются все 4 ядра.
Может кто-нибудь объяснить разницу?
Вот небольшой пример кода, который я использую:
import numpy as np
import scipy.sparse as sp
import scipy.sparse.linalg as sp_la
n = int(1e6)
A = sp.spdiags(np.random.rand(3, n), [-1, 0, 1], n, n)
b = np.random.rand(n, 1)
x = sp_la.gmres(A, b)
Я хочу запустить код в кластере с 48 процессорами и прямо сейчасЯ пробую код на своем ноутбуке (4 ядра).
Спасибо