¿Qué algoritmo usar para la inversión de matriz densa paralela en un máximo de 8 núcleos?

8

Necesito implementar una inversión de matriz densa en paralelo para un lenguaje que estoy usando que parece no tener una biblioteca existente para esto (específicamente IDL usando IDL Bridge para pasar mensajes). Estoy familiarizado con los métodos de programación paralela a través de la experiencia usando MPI en C ++, aunque principalmente para los métodos paralelos FFT y N-body. Tengo poca experiencia o conocimiento de métodos computacionales, seriales o paralelos, para álgebra lineal.

Lo que estoy buscando es una descripción clara de pseudocódigo de un algoritmo de inversión de matriz paralela estable y robusto que sea apropiado para un pequeño número de núcleos, ya que la máquina que ejecuta la tarea IDL (actualmente en serie) tiene 8 núcleos. En la práctica, probablemente usaré solo 4 para mantener los núcleos libres para otras tareas.

Favorecería la simplicidad sobre el rendimiento de vanguardia si hay una variedad de algoritmos bien conocidos para esta tarea.

Bogdanovist
fuente
1
Supongo que te refieres a matrices densas . Seguramente puede hacer que IDL use una implementación roscada de LAPACK (por ejemplo, MKL o incluso ATLAS), LD_PRELOADsi es necesario.
Jed Brown
Sí, gracias, busco un algoritmo de matriz densa. Lo he aclarado ahora en la pregunta. Investigaré las implementaciones de LAPACK enhebradas como sugieres. Eso sería preferible si es posible. Gracias por la anotación.
Bogdanovist
IDL ha tenido bibliotecas de álgebra lineal multiproceso durante al menos los últimos 3 o 4 años. Creo que LA_INVERT se ejecutará multiproceso en cualquier versión reciente de IDL. Tenga en cuenta que hay un interruptor de configuración que controla cuántos subprocesos están disponibles (y probablemente esté configurado en subproceso único de forma predeterminada)
Brian Borchers
Gracias Brian Revisé la documentación de IDL7 e IDL8 y ninguno sugiere que LA_INVERT use el grupo de subprocesos. También lo probé cuando configuré IDL para invertir grandes matrices por un tiempo, solo se usa 1 de los 8 núcleos (según el monitor de mi sistema). Verifiqué la configuración de! CPU y TPOOL_NTHREADS es igual a HW_NCPU, lo que de acuerdo con la documentación significa que las rutinas enhebradas deberían poder usar tantos núcleos como estén físicamente disponibles. También he intentado reducir TPOOL_MIN_ELTS para aplicar múltiples subprocesos en LA_INVERT sin suerte. ¿Alguna idea más?
Bogdanovist
¿Qué tan grandes son tus matrices? IDL no utilizará subprocesos múltiples a menos que las matrices sean lo suficientemente grandes. Si tiene matrices que son demasiado pequeñas (digamos menos que N = 1000), entonces no habrá ventajas de rendimiento al usar multiproceso e IDL no usará las rutinas multiproceso. También hay ajustes de configuración para este límite. No he usado IDL en varios años, pero estoy realmente sorprendido de que esto no funcione para usted. Sugeriría preguntar en un foro específico de IDL. El comp.lang.idl = pvwave usenet gr es un buen lugar para buscar.
Brian Borchers

Respuestas:

5

En lugar de rodar el suyo, le sugiero que eche un vistazo a las implementaciones paralelas robustas y eficientes existentes, como PLASMA .

Si solo está buscando algoritmos para implementarse, la mayoría de las rutinas se documentan en exceso en la sección "Documentación" de ese sitio.

Pedro
fuente