Fortran 90/95-Bibliothek für dünnbesetzte Matrizen?
Ich bin auf der Suche nach einer Bibliothek für den Umgang mit sparse-Matrizen in fortran 90/95. Ich brauche nur sehr grundlegende Operationen wie matrix-Vektor-Multiplikation. Was schlagen Sie vor, den ich verwenden?
Den ich gesucht habe um und eine Erweiterung(?) zu BLAS genannt "sparse blas", dokumentiert in Kapitel 3 des blast-technisches forum-Spezifikation:
http://www.netlib.org/blas/blast-forum/,
ideal zu sein scheint. Laut diesem Dokument sollte ein fortran-95-Schnittstelle zur Bibliothek. Ich habe jedoch nicht in der Lage zu finden eine tatsächliche Umsetzung dieser Spezifikation überall dort, wo ich war in der Lage zum download. Irgendwie hab ich immer den Eindruck, dass die fortran-95 sparse-blas-Spezifikation ist nicht wirklich überall implementiert? Nicht als open source sowieso.
Fand ich auch eine Bibliothek namens sparsekit:
http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html
Jemand irgendwelche Erfahrungen mit einem von diesen beiden, oder jede andere sparse-matrix-Bibliothek für fortran 90/95? Ich möchte Ratschläge, die man zu verwenden, und auch wo man es bekommt (im Fall von sparsekit der source-code ist verfügbar unter dem obigen link). Gibt es etwas wie einen "standard" für sparse-Matrizen, wie BLAS ist für die dicht sind?
Cheers,
Arne
- F95, es wird eine kleine überarbeitung der Sprache, geht oft unter F90. Es ist schon eine Weile her, seit ich getan habe, nichts mit großen Matrizen, aber das scheint zu sein people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html die F90-version.
- Dank Idigas, aber ich glaube nicht, das ist es. Es scheint mir, was Sie verlinken ist der BLAS-Bibliothek, und das "sparse blas" ist nicht Teil davon. Sollte es zum Beispiel eine Unterroutine (entsprechend der Spezifikation) als "duscr_begin" (oder vielleicht "blas_duscr_begin"), die die sub-verwenden Sie zum initialisieren einer sparse-matrix, die ich habe nicht gefunden, überall in der BLAS-Bibliothek. Ich auch runtergeladen, alle Dateien von netlib.org/sparse-blas/index.html, und hat "grep-i duscr_begin *.f" ohne Glück. Ich fand das sehr verwirrend.
- Ah, könnte sein. Ich nur sah es hastig letzten Zeit.
- Eigentlich denke ich, die F90-Schnittstelle der sparse-BLAS ist genau auf der Seite, die Sie verlinkt wird. Laden Sie einfach das shell-script-Paket von: http://www.netlib.org/toms/818 und führen Sie es durch /bin/sh. Die *.f90-Dateien werden dann erstellt. Lassen Sie mich wissen, wenn Sie haben keine Bourne-shell zur Verfügung (wenn Sie z.B. unter Windows funktioniert).
- physics.jacobs-university.de/theine/research/splas
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich werde teilweise Antwort auf meine eigenen Fragen:
Wo finden Sie eine vollständige f95 Umsetzung der Sparse-BLAS wurde zur Verfügung gestellt von @alexurba oben:
http://www.netlib.org/toms/818
Dass war es! Dieses Skript erstellt alle source-code in dem Ordner, den Sie Sie ausführen (habe ich noch nie gesehen-software zur Verfügung gestellt, die in dieser Weise vor).
Machen das INSTALL-Skript arbeiten, die ich brauchte, zu tun einige änderungen: Die Installationsanweisungen sagen Sie zum Bearbeiten der INSTALL-Skript und wählen Sie den passenden "Bogen". Ihre Auswahlmöglichkeiten sind: AIX, ALPHA, CRAY, HP, NAG, SGI und SUN. Keiner von diesen schien angemessen für mich, wie ich bin, linux zu verwenden, und die einzige fortran compiler habe ich auf diesem computer ist gfortran. Ich habe nicht ganz verstanden den Zweck dieser option, aber was ich Tat, funktionierte, war die folgende:
1) INSTALLIEREN, stellen Sie einen neuen "Bogen", rief ich, GNU, durch die Einstellung der Variablen SB_ARCH='GNU'. 2) In der SOFTWARE - /Makefile ändern FC = f90 FC = gfortran, 3) In-TESTER/kopieren Sie die Datei Makefile.NAG auf Makefile.GNU, ändern FC = f90 FC = gfortran, und ändern Sie alle Instanzen der das Wort 'NÖRGLER' zu 'GNU'. (Sie werden wahrscheinlich auch wollen, ändern Sie die FFLAGS option in den Makefiles.)
Nach diesem lief ich INSTALLIEREN, und dann TESTER/test_all, und die tests ausspucken "0.000..." als Fehler, welche ich davon aus, dass alles funktioniert.
Muss ich sagen fand ich finden Sie diesen Quellcode ungewöhnlich schwierig. Zum Glück ist dieser thread kommt sehr hoch auf google bei der Suche "fortran 90 sparse matrix library" nun.
Meine endgültige Lösung: Ironisch, nachdem Sie endlich eine vollständige Umsetzung der Sparse-BLAS ich habe mich entschlossen, für mein problem, es ist besser, einen direkteren Ansatz, da alle werde ich wohl brauchen, ist die matrix-Vektor-Multiplikation: herausfinden, was sparse-matrix-Darstellung zu verwenden (Compressed Sparse Row (CSR) scheint geeignet zu sein für mein problem), Graben, die entsprechenden matrix-Vektor-Multiplikation routine aus dem Sparse-BLAS-source-code, sehen, wie er es will-Eingang, und einfach direkt in meinem code.