2012-09-08 47 views
13

Estoy buscando una biblioteca para tratar con matrices dispersas en fortran 90/95. Solo necesito operaciones muy básicas como la multiplicación matriz-vector. ¿Qué sugieres que use?Fortran 90/95 biblioteca para matrices dispersas?

He buscado alrededor y una extensión de BLAS llamado "blas dispersos", documentado en el capítulo 3 de la especificación explosión foro técnico (?):

http://www.netlib.org/blas/blast-forum/,

parece ideal. De acuerdo con ese documento, debería haber una interfaz más fuerte para la biblioteca. Sin embargo, no he podido encontrar una implementación real de esta especificación en ningún lugar que haya podido descargar. Tengo la impresión de que la especificación de blas dispersas de Fortran 95 no se implementa realmente en ninguna parte. No como fuente abierta de todos modos.

también encontré una biblioteca llamada sparsekit:

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

Alguien tiene alguna experiencia con cualquiera de estos dos, o cualquier otra biblioteca de matriz dispersa para FORTRAN 90/95? Me gustaría obtener consejos sobre cuál usar, y también dónde obtenerlo (en el caso de sparsekit, el código fuente está disponible a través del enlace de arriba). ¿Hay algo así como un "estándar" para matrices dispersas, como BLAS es para las densas?

Saludos,

Arne

+0

F95, ya que es una revisión menor del lenguaje, a menudo va por debajo de F90. Ha pasado un tiempo desde que hice algo con matrices grandes, pero esta parece ser http://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html la versión F90. – Rook

+0

Gracias Idigas, pero no creo que sea eso. Me parece que lo que está enlazando es la biblioteca BLAS, y que "blas dispersa" no es parte de eso. Por ejemplo, debería haber una subrutina (de acuerdo con la especificación) llamada "duscr_begin" (o posiblemente "blas_duscr_begin"), que es el sub que usa para inicializar una matriz dispersa, que no he encontrado en ninguna parte de la biblioteca BLAS. Incluso descargué todos los archivos de http://www.netlib.org/sparse-blas/index.html, e hice "grep -i duscr_begin * .f" sin suerte. Encontré eso muy confuso. – arne

+0

Ah, podría ser. Solo lo miré precipitadamente la última vez. – Rook

Respuesta

12

OK, voy a responder parcialmente a mis propias preguntas:

dónde encontrar una aplicación f95 llena de Sparse BLAS fueron provistos por @alexurba arriba:

http://www.netlib.org/toms/818

Eso fue todo! Este script crea todo el código fuente en la carpeta que lo ejecuta (nunca antes había visto software proporcionado de esta manera).

Para hacer que el script INSTALL funcione, tuve que hacer algunos cambios: Las instrucciones de instalación le dicen que edite el script INSTALL y elija el "arco" apropiado. Sus opciones son: AIX, ALPHA, CRAY, HP, NAG, SGI y SUN. Ninguno de estos me pareció apropiado, ya que estoy usando Linux y el único compilador de Fortran que tengo en esta computadora es gfortran. No entendí del todo el propósito de esta opción, pero lo que sí funcionó fue la siguiente:

1) En INSTALL, crea un nuevo "arco" que llamé GNU configurando la variable SB_ARCH = 'GNU' . 2) En SOFTWARE/Makefile cambia FC = f90 a FC = gfortran, 3) En TESTER/copia el archivo Makefile.NAG a Makefile.GNU, cambia FC = f90 a FC = gfortran, y cambia todas las instancias de la palabra 'NAG 'a' GNU '. (Probablemente también quiera cambiar la opción FFLAGS en los Makefiles.)

Después de esto ejecuté INSTALL, y luego TESTER/test_all, y las pruebas escupieron "0.000 ..." como errores, lo cual asumo para decir que todo está funcionando.

Debo decir que he encontrado encontrar este código fuente inusualmente difícil. Afortunadamente, este hilo aparece bastante alto en google cuando se busca "biblioteca de matriz escasa fortran 90" ahora.

Mi solución final: Irónicamente, después de encontrar finalmente una implementación completa de Sparse BLAS he decidido que para mi problema es mejor utilizar un enfoque más directo, ya que todo lo que probablemente necesite es la multiplicación matriz-vector: qué representación escasa de matriz usar (Compressed Sparse Row (CSR) parece ser apropiada para mi problema), desenterrar la rutina de multiplicación matriz-vector correspondiente del código fuente BLAS disperso, ver cómo quiere que ingrese, y solo usar eso directamente en mi código.

+0

Estoy en el punto donde _y las pruebas escuchan "0.000 ..." como errores, lo cual supongo que significa que todo está funcionando_. Ahora, ¿cómo usar esta biblioteca (o bibliotecas?) ¿Dónde los necesito? ¿Qué archivos debo copiar en el directorio que contiene mis propios programas? –

Cuestiones relacionadas