Esiste un'implementazione a livello di riferimento di BLAS in C / C ++?


11

L'implementazione BLAS di netlib è un riferimento eccellente, essendo per lo più non ottimizzata e ben documentata (ad es. Zgemm ). Tuttavia, è in Fortran 77, rendendolo in qualche modo inaccessibile a quelli con una formazione di programmazione più moderna. Esiste un'implementazione a livello di riferimento di BLAS, come netlib, in C / C ++?

Risposte:


10

Hai esaminato l' implementazione della GNU Scientific Library ? Trovo che il codice sorgente sia sufficientemente leggibile e le routine sono ben documentate.


Mi sembra buono. La documentazione è un po 'carente, ma i nomi delle variabili sono scelti abbastanza bene che penso sia chiaro. Probabilmente anteporrò il commento di apertura delle routine BLAS di netlib. Con cosa ti poni esattamente? Hai un'alternativa?
— Max Hutchinson,

6

Una notevole implementazione in linguaggio C di BLAS è ATLAS. Tra le funzioni utili:

  1. Le routine di algebra implementate sia in versione C semplice che in versioni assistite da assemblatore altamente ottimizzate per più architetture e varianti.
  2. Il sistema di compilazione presenta un "sintonizzatore automatico" che compila più varianti della libreria ATLAS per stabilire quale sarà la più veloce su una determinata macchina.

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


Ho guardato ATLAS ma ho perso questo. Il percorso per l'implementazione di riferimento è "src / blas / reference", con "ref" inserito tra il carattere di tipo e il nome della routine e con gli argomenti carattere aggiunti.
— Max Hutchinson,

3

Netlib produce anche CLAPACK , che include BLAS, ma è solo il codice fortran eseguito attraverso f2c ed è quindi un po 'goffo (ad esempio zgemm ).


1

Per un'implementazione ad alte prestazioni che non è solo tra le più performanti (migliore dell'85% del picco su 60 core di Intel Xeon Phi), ma è anche la più magnificamente scritta, dai un'occhiata a BLIS:

https://github.com/flame/blis


Questo non sembra pretendere di essere un'implementazione a livello di riferimento
— mabraham,

Ci piace assottigliarlo come un'implementazione di riferimento ad alte prestazioni.
— Robert van de Geijn,

0

Ho implementazioni di alcuni bit di BLAS / LAPACK in RNP e RNP2 .


Questo è interessante, ma è sicuramente post-BLAS e meno diretto rispetto a GSL e all'implementazione di riferimento in ATLAS.
— Max Hutchinson,

-1

Attualmente stiamo lavorando a un corso online aperto di massa, "LAFF-On High Performance Computing" che utilizza dgemm come esempio che guida attraverso diversi livelli di parallelizzazione: livello di istruzione, OpenMP, MPI.

Questa non è un'implementazione di riferimento per il BLAS, ma è un riferimento per come codificare il BLAS (per le prestazioni). Per essere informato, visitare www.ulaff.net

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.