Diagonalización paralela de la matriz exacta con Python

¿Alguien está al tanto de una versión implementada (tal vez utilizando scipy / numpy) de diagonalización de matriz exacta paralela (equivalentemente, encontrar el sistema electrónico)? Si ayuda, mis matrices son simétricas y escasas. Odiaría pasar un día reinventando la rueda.

EDITAR:

Mis matrices son al menos 10,000×10,000 (pero, preferiblemente, al menos 20 veces más grandes). Por ahora, solo tengo acceso a una máquina Intel de 4 núcleos (con hyperthreading, por lo tanto, 2 procesos por núcleo), ~ 3.0Ghz cada uno con 12 GB de RAM. Más tarde, es posible que tenga acceso a un nodo de 128 núcleos de ~ 3.6 Ghz / núcleo con 256 GB de RAM, por lo que una sola máquina / múltiples núcleos debería hacerlo (para mis otras tareas paralelas, he estado usando multiprocessing ). Preferiría que los algoritmos se escalasen bien.

Necesito una diagonalización exacta, por scipy.sparse rutinas scipy.sparse no son buenas para mí (lo intenté, no funcionó bien). He estado usando numpy.linalg.eigh (solo veo un solo núcleo haciendo todos los cálculos).

Alternativamente (a la pregunta original): ¿hay un recurso en línea donde pueda encontrar más información sobre la comstackción de SciPy para asegurar una ejecución paralela?

Para el hallazgo de valores propios / vectores propios de matriz dispersa simétrica, puede usar scipy.sparse.linalg.eigsh . Utiliza ARPACK detrás de escena, y hay implementaciones paralelas de ARPACK. AFAIK, SciPy se puede comstackr con uno si su instalación de scipy usa la versión en serie.

Sin embargo, esta no es una buena respuesta, si necesita todos los valores propios y vectores propios para la matriz, ya que la versión dispersa utiliza el algoritmo de Lanczos.

Si su matriz no es abrumadoramente grande, entonces use numpy.linalg.eigh . Utiliza LAPACK o BLAS y puede usar código paralelo internamente.

Si terminas rodando el tuyo, ten en cuenta que SciPy / NumPy hace todo el trabajo pesado con diferentes paquetes de álgebra lineal altamente optimizados, no en Python puro. Debido a esto, el rendimiento y el grado de paralelismo dependen en gran medida de las bibliotecas con las que se comstack la instalación de SciPy / NumPy.

(Su pregunta no revela si solo desea que el código paralelo se ejecute en varios procesadores o en varias computadoras. Además, el tamaño de su matriz tiene un gran impacto en el mejor método. Por lo tanto, esta respuesta puede ser completamente diferente. -marca.)