Jaki jest związek bibliotek BLAS, LAPACK i innych bibliotek algebry liniowej?

26

Szukałem bibliotek algebry liniowej C ++ w projekcie, nad którym pracowałem. Coś, czego wciąż nie mam pojęcia, to połączenie BLAS i LAPACK z innymi bibliotekami algebry liniowej.

Przeglądając ten artykuł na temat bibliotek algebry liniowej , zainteresowałem się tym, że:

  • niektóre biblioteki są niezależne od BLAS i LAPACK
  • niektóre wymagają BLAS i LAPACK
  • niektóre mają opcjonalne interfejsy do BLAS i LAPACK
  • i, jak rozumiem, możesz używać BLAS i LAPACK do bezpośredniego rozwiązywania problemów z algebrą liniową

Mogę sobie wyobrazić, że niektóre biblioteki to po prostu interfejsy C ++ do bibliotek BLAS i LAPACK napisanych w C i Fortran, a inne zaimplementowały własne procedury zastępcze, ale

  1. Jakie są konsekwencje opcjonalnych interfejsów dla BLAS i LAPACK? Co tracisz, rezygnując i co robią biblioteki?

  2. Czy którakolwiek z bibliotek zapewnia coś więcej niż tylko interfejs? Na przykład UMFPACK jest napisany w C i ma opcjonalne interfejsy do BLAS i LAPACK. Co może UMFPACK (lub inne biblioteki) zrobić, aby BLAS i LAPACK nie mogły same z siebie?

Neal Kruis
źródło

Odpowiedzi:

15

O ile mi wiadomo, Lapack jest jedyną publicznie dostępną implementacją wielu algorytmów (niesymetryczny gęsty eigensolver, pseudokwadratowy symetryczny eigensolver, szybki Jacobi SVD). Większość bibliotek, które nie polegają na BLAS + Lapack, zwykle obsługuje bardzo prymitywne operacje, takie jak mnożenie macierzy, rozkładanie jednostek LU i rozkład QR. Lapack zawiera jedne z najbardziej wyrafinowanych algorytmów obliczeń gęstej macierzy, które, jak sądzę, nie są wdrażane nigdzie indziej.

Aby odpowiedzieć na twoje pytania (przynajmniej częściowo),

  1. Rezygnując z BLAS / Lapack, zazwyczaj nie brakuje funkcji (chyba że opcjonalny interfejs został zaprojektowany w taki sposób, że nie ma implementacji zastępczej, co jest rzadkie). Jeśli chciałbyś wykonywać bardzo skomplikowane operacje, te inne biblioteki prawdopodobnie i tak nie implementują go. Ponieważ BLAS może być ściśle dostosowany do Twojej architektury, możesz przegapić ogromne przyspieszenia (różnica prędkości rzędu rzędów nie jest niespotykana).

  2. Wspominasz UMFPACK, który służy do rzadkiego rozkładania macierzy. BLAS / Lapack dotyczy wyłącznie gęstych matryc. UMFPACK na pewnym poziomie musi pracować nad gęstymi problemami średniej wielkości, co można zrobić za pomocą niestandardowych implementacji lub wywołując BLAS / Lapack. Tutaj różnica dotyczy tylko prędkości.

Jeśli szybkość ma duże znaczenie, spróbuj użyć biblioteki, która obsługuje opcjonalne wiązania BLAS / Lapack i użyj ich na końcu, gdy chcesz szybciej.

Victor Liu
źródło
3
  1. Dobre implementacje procedur BLAS i LAPACK (co najważniejsze BLAS) mogą być znacznie szybsze niż naiwne proste implementacje tych samych funkcji. Jednak wydajne implementacje zazwyczaj obejmują optymalizacje, które są bardzo specyficzne dla konkretnego komputera, na którym pracujesz. Nawet różne modele procesorów tego samego producenta (np. Procesory Intel x86-64) często wymagają bardzo różnych kodów, aby uzyskać dobrą wydajność. Dostarczając zoptymalizowane biblioteki BLAS / LAPACK do pakietu oprogramowania, zwykle można przyspieszyć kod w porównaniu do korzystania z niezoptymalizowanych procedur. Ponieważ jednak wielu zwykłych użytkowników może nie mieć specjalistycznej wiedzy na temat instalowania zoptymalizowanych procedur, często zapewnia się także możliwość korzystania z ogólnych niezoptymalizowanych procedur algebry liniowej.

  2. UMFPACK to biblioteka procedur algebry liniowej na rzadkich macierzach (matryce z wysokim odsetkiem wpisów 0). Może używać BLAS / LAPACK do obsługi gęstych macierzy (lub gęstych bloków w macierzach), które napotyka.

Brian Borchers
źródło
1

Wersja skrócona: są to biblioteki napisane przede wszystkim w języku Fortran, które są używane do operacji numerycznych w wielu językach - nawet niektóre programy C ze względu na ich szybkość i optymalizację; Są także jednymi z niewielu implementacji wielu algorytmów typu open source :)

Nie musisz używać bibliotek, chyba że mają zależności; iirc większość z nich jest dość niezależna i zawsze możesz pisać własne funkcje matematyczne, takie jak lepiej wektoryzowane dla architektury

Eiyrioü von Kauyf
źródło
1
Najbardziej zoptymalizowane procedury BLAS i LAPACK już dawno przestały pisać Fortran. Najszybsze procedury BLAS i LAPACK zazwyczaj nie są tymi pobieranymi z netlib. Dostawcy większości procesorów sprzedają lub dystrybuują zoptymalizowane wersje BLAS i LAPACK zaprojektowane specjalnie dla ich układów.
Bill Barth,
Przepraszam, mam na myśli te rozpowszechniane w sieci - ogólne; specyficzne dla układów nie są oczywiście tak przenośne: tzn. niektóre sztuczki wektorowe Intela nie działają tak dobrze na układach AMD, dlatego mają zastrzeżenie dotyczące biblioteki. I jestem pewien, że są one przemianowane pod inną nazwą, nie?
Eiyrioü von Kauyf,
@BillBarth BLAS zdecydowanie, ale czy jesteś pewien, że procedury LAPACK są również przepisywane? Afaik, o ile BLAS 3 jest bardzo wydajny (lub wielowątkowy), to wszystko jest dobre.
stali
1
Myślę o BLAS i LAPACK jako o nazwach funkcji i interfejsu. Istnieje wiele różnych implementacji (ACML, ESSL, MKL, ATLAS itp.).
Bill Barth
1
to są tylko interfejsy ... podobnie jak ATLAS nie są rzeczywistą biblioteką.
Eiyrioü von Kauyf