Gibt es eine Implementierung von BLAS auf Referenzniveau in C / C ++?

11

Die Implementierung von netlib BLAS ist eine hervorragende Referenz, da sie größtenteils nicht optimiert und gut dokumentiert ist (z . B. zgemm ). Es befindet sich jedoch in Fortran 77, was es für Personen mit einer moderneren Programmierausbildung etwas unzugänglich macht. Gibt es eine Referenzimplementierung von BLAS wie netlib in C / C ++?

Max Hutchinson
quelle

Antworten:

10

Haben Sie sich die Implementierung der GNU Scientific Library angesehen ? Ich finde den Quellcode ausreichend lesbar und die Routinen sind gut dokumentiert.

Juan M. Bello-Rivas
quelle
Sieht gut für mich aus. Die Dokumentation fehlt etwas, aber die Variablennamen sind gut genug gewählt, dass ich denke, dass es klar ist. Ich werde wahrscheinlich den Eröffnungskommentar der Netlib BLAS-Routinen voranstellen. Womit beschäftigen Sie sich genau? Hast du eine alternative
Max Hutchinson
6

Eine bemerkenswerte Implementierung von BLAS in C-Sprache ist ATLAS. Unter nützlichen Funktionen:

  1. Algebra-Routinen wurden sowohl als einfache C- als auch als hochoptimierte Assembler-unterstützte Versionen für mehrere Architekturen und Varianten implementiert.
  2. Das Build-System verfügt über einen "Auto-Tuner", der mehrere Varianten der ATLAS-Bibliothek kompiliert, um festzustellen, welche auf dem jeweiligen Computer die schnellste ist.

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

Oakad
quelle
Ich habe ATLAS angeschaut, aber das verpasst. Der Pfad zur Referenzimplementierung lautet "src / blas / reference", wobei "ref" zwischen dem Typzeichen und dem Routinennamen eingefügt und Zeichenargumente angehängt werden.
Max Hutchinson
3

Netlib produziert auch CLAPACK , das BLAS enthält, aber es ist nur der fortran-Code, der durch f2c ausgeführt wird, und ist daher etwas klobig (z . B. zgemm ).

Max Hutchinson
quelle
1

Für eine Hochleistungsimplementierung, die nicht nur zu den leistungsstärksten gehört (besser als 85% des Peaks auf 60 Kernen des Intel Xeon Phi), sondern auch die am besten geschriebene ist, schauen Sie sich BLIS an:

https://github.com/flame/blis

Robert van de Geijn
quelle
Dies scheint nicht zu sein, dass es sich um eine Implementierung auf Referenzebene handelt
Mabraham,
Wir möchten es als leistungsstarke Referenzimplementierung verdünnen.
Robert van de Geijn
0

Ich habe Implementierungen einiger Bits von BLAS / LAPACK in RNP und RNP2 .

Victor Liu
quelle
Dies ist interessant, aber es ist definitiv nach BLAS und weniger einfach als GSL und die Referenzimplementierung in ATLAS.
Max Hutchinson
-1

Wir arbeiten derzeit an einem massiven offenen Online-Kurs, "LAFF-On High-Performance Computing", der dgemm als Beispiel verwendet, das einen durch verschiedene Parallelisierungsebenen führt: Befehlsebene, OpenMP, MPI.

Dies ist keine Referenzimplementierung für das BLAS, sondern eine Referenz für die Codierung des BLAS (für die Leistung). Um auf dem Laufenden zu bleiben, besuchen Sie www.ulaff.net

Robert van de Geijn
quelle