conversión de álgebra lineal gsl para su uso en scalapack u otra biblioteca de matrices paralelas

StackOverflow https://stackoverflow.com/questions/9386113

  •  28-10-2019
  •  | 
  •  

Pregunta

Tengo un código profundamente incrustado con la aritmética de matrices de la Biblioteca Científica GNU (GSL), el cálculo principal de este código es resolver un gran sistema de ecuaciones lineales que lleva mucho tiempo en serie y con funciones GSL y BLAS, ¿verdad?¿una forma de paralelizar este cálculo o convertirlo para usarlo en una biblioteca ya paralela como ScaLAPACK?

¿Fue útil?

Solución

Si su matriz es dispersa , es decir, contiene muchas entradas cero, puede implementar fácilmente muchos paquetes de álgebra matricial dispersa sin demasiados problemas. Desafortunadamente, esto requerirá que almacene sus matrices en un formato escaso que, que yo sepa, gsl no lo hace. Una vez que tenga su matriz almacenada en un formato escaso, debería poder manejar sistemas grandes sin demasiados problemas, incluso en aplicaciones en serie.

Sugiero usar UMFPACK porque requiere la menor cantidad de trabajo para implementar, ya que no requiere que coloques tus datos en sus estructuras.

Una nota sobre el paralelismo: Si su código es actualmente serial, ir a un solucionador paralelo NO es trivial. Es posible que sea sencillo implementar un paquete de varios subprocesos, pero no tengo mucha experiencia con programas de subprocesos. Además, los solucionadores directos verdaderamente paralelos (memoria distribuida) no son tan eficientes, ya que cada procesador necesita su propia copia de la matriz completa, y es mejor utilizar métodos iterativos.

Sería útil un poco más de detalle: ¿Cuánto tiempo es mucho tiempo? ¿Necesita la inversa por alguna razón o simplemente está resolviendo un sistema de ecuaciones?

Otros consejos

¿Has probado Intel MKL?Incluye sus propias versiones paralelas de funciones blas.La última vez que lo intenté, son bastante rápidos.Pero también sería más fácil responder si proporcionara información sobre el tamaño de la matriz, pero siempre que esté ejecutando x64, muchas CPU / núcleos y con mucha RAM, bueno, entonces realmente no importa.

Otra opción es nVidia CUDA.Su interfaz es similar a Blas, pero en realidad es más lenta que MKL, aún más rápida que la serial.Puede ser que lo probé en una tarjeta antigua, pero necesitas al menos 200 unidades de flujo de GPU para llamarlo útil.

EDITAR: Las matrices de esos tamaños están más allá de mi experiencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top