Scipy разреженные параллельные итерационные решатели - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно решить довольно большие линейные системы (около 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 ядра).

Спасибо

...