Czy istnieje implementacja BLAS na poziomie odniesienia w C / C ++?

11

Implementacja BLAS w netlib jest doskonałym źródłem informacji, ponieważ jest w większości niezoptymalizowana i dobrze udokumentowana (np. Zgemm ). Jest jednak w Fortran 77, co czyni go nieco niedostępnym dla osób z bardziej nowoczesnym wykształceniem programistycznym. Czy istnieje implementacja BLAS na poziomie odniesienia, taka jak netlib, w C / C ++?

Max Hutchinson
źródło

Odpowiedzi:

10

Czy spojrzałeś na implementację Biblioteki Naukowej GNU ? Uważam, że kod źródłowy jest wystarczająco czytelny, a procedury są dobrze udokumentowane.

Juan M. Bello-Rivas
źródło
Dla mnie wygląda dobrze. Dokumentacja jest trochę brakuje, ale nazwy zmiennych są wybierane na tyle dobrze, że myślę, że są jasne. Prawdopodobnie poprzedzę komentarz otwierający procedury BLAS netlib. Z czym dokładnie masz problem? Czy masz alternatywę?
Max Hutchinson
6

Godną uwagi implementacją BLAS w języku C jest ATLAS. Wśród przydatnych funkcji:

  1. Procedury algebry zaimplementowane zarówno jako proste C, jak i wysoce zoptymalizowane wersje wspomagane przez asembler dla wielu architektur i wariantów.
  2. System kompilacji zawiera „auto-tuner”, który kompiluje wiele wariantów biblioteki ATLAS w celu ustalenia, który z nich będzie najszybszy na danym komputerze.

http://math-atlas.sourceforge.net/

dąb
źródło
Spojrzałem na ATLAS, ale mi tego brakowało. Ścieżka do implementacji odwołania to „src / blas / reference”, z „ref” wstawionym między znakiem typu a nazwą procedury i dołączonymi argumentami znaków.
Max Hutchinson
3

Netlib produkuje również CLAPACK , który zawiera BLAS, ale jest to po prostu kod fortran przebiegający przez f2c i dlatego jest nieco niezgrabny (np. Zgemm ).

Max Hutchinson
źródło
1

Aby uzyskać wysokowydajną implementację, która jest nie tylko jedną z najbardziej wydajnych (lepszych niż 85% wartości szczytowej na 60 rdzeniach Intel Xeon Phi), ale jest również najpiękniej napisana, zobacz BLIS:

https://github.com/flame/blis

Robert van de Geijn
źródło
Nie wydaje się, żeby to miało być wdrożenie na poziomie odniesienia
mabraham,
Lubimy go rozważać jako wysokowydajną implementację referencyjną.
Robert van de Geijn
0

Mam implementacje niektórych bitów BLAS / LAPACK w RNP i RNP2 .

Victor Liu
źródło
Jest to interesujące, ale zdecydowanie jest to post-BLAS i mniej proste niż GSL i referencyjna implementacja w ATLAS.
Max Hutchinson
-1

Obecnie pracujemy nad masowym otwartym kursem online „LAFF-On High-Performance Computing”, który wykorzystuje dgemm jako przykład, który prowadzi przez różne poziomy równoległości: poziom instrukcji, OpenMP, MPI.

To nie jest referencyjna implementacja dla BLAS, ale jest to odniesienie do sposobu kodowania BLAS (dla wydajności). Aby być na bieżąco informowanym, odwiedź www.ulaff.net

Robert van de Geijn
źródło