2012-09-08 12 views
13

Poszukuję biblioteki do radzenia sobie z rzadkimi macierzami w Fortran 90/95. Potrzebuję tylko bardzo podstawowych operacji, takich jak mnożenie wektorów macierzy. Co sugerujesz, czego używam?Biblioteka Fortran 90/95 dla rzadkich macierzy?

Szukałem wokół i rozszerzenie Blas nazywane "rozrzedzone Blas", udokumentowane w rozdziale 3 specyfikacji technicznej wielkopiecowego forum (?):

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

wydaje się idealny. Zgodnie z tym dokumentem do biblioteki powinien należeć fortranowy interfejs. Jednak nie udało mi się znaleźć rzeczywistej implementacji tej specyfikacji w dowolnym miejscu, które udało mi się pobrać. Odnoszę wrażenie, że specyfikacja rzadkich blaszek z fortran 95 nie jest nigdzie wdrażana? W każdym razie nie jako open source.

Znalazłem też biblioteka nazywa sparsekit:

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

Ktoś ma jakieś doświadczenia z jednej z tych dwóch, lub innego rzadkiego biblioteki macierzy dla Fortran 90/95? Chciałbym doradzić, który z nich używać, a także gdzie go zdobyć (w przypadku sparsekit kod źródłowy jest dostępny za pośrednictwem powyższego linku). Czy istnieje coś takiego jak "standard" dla rzadkich macierzy, takich jak BLAS dla gęstych?

Cheers,

Arne

+0

F95, ponieważ jest to niewielka wersja języka, często przechodzi pod F90. Minęło trochę czasu, odkąd zrobiłem cokolwiek z dużymi matrycami, ale to wygląda na http://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html wersję F90. – Rook

+0

Dzięki Idigas, ale nie sądzę, że to jest to. Wydaje mi się, że to, do czego się podłączasz, to biblioteka BLAS, i że "nieliczne blizny" nie są tego częścią. Na przykład powinien istnieć podprogram (zgodnie ze specyfikacją) zwany "duscr_begin" (lub prawdopodobnie "blas_duscr_begin"), który jest podrzędnym użytkiem do zainicjowania rzadkiej macierzy, której nie znalazłem nigdzie w bibliotece BLAS. Pobrałem nawet wszystkie pliki z http://www.netlib.org/sparse-blas/index.html i zrobiłem "grep -i duscr_begin * .f" bez żadnego szczęścia. Znalazłem to bardzo mylące. – arne

+0

Ach, może być. Patrzyłem na to pośpiesznie po raz ostatni. – Rook

Odpowiedz

12

OK, będę częściowo odpowiedzieć na moje własne pytania:

Gdzie znaleźć pełną implementację F95 sparse BLAS została dostarczona przez @alexurba powyżej:

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

To było to! Ten skrypt tworzy cały kod źródłowy w folderze, w którym go uruchamiasz (nigdy wcześniej nie widziałem oprogramowania dostarczonego w ten sposób).

Aby skrypt INSTALL działał, musiałem wprowadzić pewne zmiany: Instrukcja instalacji nakazuje edytować skrypt INSTALL i wybrać odpowiedni "arch". Do wyboru masz: AIX, ALPHA, CRAY, HP, NAG, SGI i SUN. Żadne z nich nie wydawało mi się odpowiednie, ponieważ używam Linuksa, a jedynym kompilatorem fortranu, jaki mam na tym komputerze, jest gfortran. Nie bardzo rozumiałem cel tej opcji, ale to, co zrobiłem, było następujące:

1) W INSTALU, nadaj nowy "łuk" Nazwałem GNU, ustawiając zmienną SB_ARCH = 'GNU' . 2) W SOFTWARE/Makefile zmień FC = f90 na FC = gfortran, 3) W TESTER/skopiuj plik Makefile.NAG do Makefile.GNU, zmień FC = f90 na FC = gfortran i zmień wszystkie wystąpienia słowa "NAG "do" GNU ". (Prawdopodobnie będziesz chciał również zmienić opcję FFLAGS w plikach Makefile.)

Po tym uruchomiłem INSTALL, a następnie TESTER/test_all, a testy wypluwają "0.000 ..." jako błędy, które zakładam to znaczy, że wszystko działa.

Muszę powiedzieć, że znalezienie tego kodu źródłowego było niezwykle trudne. Na szczęście wątek ten pojawia się dość wysoko w google podczas wyszukiwania "biblioteki fortran 90 rzadkich macierzy" teraz.

Moje ostateczne rozwiązanie: Jak na ironię, po znalezieniu pełnej implementacji Sparse BLAS, zdecydowałem, że dla mojego problemu lepiej jest użyć bardziej bezpośredniego podejścia, ponieważ wszystko, czego prawdopodobnie potrzebuję, to mnożenie macierzowo-wektorowe: jaka rzadka reprezentacja macierzy do użycia (Skompresowany Rzadki Rząd (CSR) wydaje się być odpowiednia dla mojego problemu), wykopcie odpowiednią macierz-wektorową procedurę mnożenia z kodu źródłowego Sparse BLAS, zobacz, jak to chce wprowadzić, i po prostu użyj tego bezpośrednio w moim kodzie.

+0

Jestem w punkcie, w którym _i testy wypluwają "0.000 ..." jako błędy, które zakładam, że wszystko działa. Teraz, jak korzystać z tej biblioteki (lub bibliotek?), Gdzie ich potrzebuję? Jakie pliki należy skopiować do katalogu zawierającego moje własne programy? –

Powiązane problemy