¿Existe una implementación de nivel de referencia de BLAS en C / C ++?

11

La implementación de netlib BLAS es una excelente referencia, ya que no está optimizada y está bien documentada (por ejemplo, zgemm ). Sin embargo, está en Fortran 77, por lo que es algo inaccesible para aquellos con una educación de programación más moderna. ¿Existe una implementación de nivel de referencia de BLAS, como netlib, en C / C ++?

Max Hutchinson
fuente

Respuestas:

10

¿Has visto la implementación de la Biblioteca Científica GNU ? Creo que el código fuente es lo suficientemente legible y las rutinas están bien documentadas.

Juan M. Bello-Rivas
fuente
Me parece bien. Falta un poco de documentación, pero los nombres de las variables se eligen lo suficientemente bien como para que quede claro. Probablemente antepondré el comentario de apertura de las rutinas netlib BLAS. ¿Con qué tienes problemas exactamente? ¿Tienes una alternativa?
Max Hutchinson
6

Una implementación notable en lenguaje C de BLAS es ATLAS. Entre las características útiles:

  1. Las rutinas de álgebra se implementaron como versiones sencillas C y versiones asistidas por ensamblador altamente optimizadas para múltiples arquitecturas y variantes.
  2. El sistema de compilación presenta un "sintonizador automático" que compila múltiples variantes de la biblioteca ATLAS para establecer cuál será la más rápida en la máquina dada.

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

Oakad
fuente
Miré a ATLAS pero me perdí esto. La ruta de acceso a la implementación de referencia es "src / blas / reference", con "ref" insertado entre el carácter de tipo y el nombre de rutina y con argumentos de carácter adjuntos.
Max Hutchinson
3

Netlib también produce CLAPACK , que incluye BLAS, pero es solo el código fortran que se ejecuta a través de f2c y, por lo tanto, es un poco torpe (por ejemplo, zgemm ).

Max Hutchinson
fuente
1

Para una implementación de alto rendimiento que no solo se encuentra entre las de mayor rendimiento (mejor que el 85% del pico en 60 núcleos de Intel Xeon Phi), sino que también es la más bellamente escrita, eche un vistazo a BLIS:

https://github.com/flame/blis

Robert van de Geijn
fuente
Esto no parece ser una implementación de nivel de referencia
mabraham
Nos gusta descartarlo como una implementación de referencia de alto rendimiento.
Robert van de Geijn
0

Tengo implementaciones de algunos bits de BLAS / LAPACK en RNP y RNP2 .

Victor Liu
fuente
Esto es interesante, pero definitivamente es posterior a BLAS y menos directo que GSL y la implementación de referencia en ATLAS.
Max Hutchinson
-1

Actualmente estamos trabajando en un curso masivo abierto en línea, "LAFF-On High-Performance Computing" que utiliza dgemm como el ejemplo que lo lleva a uno a través de diferentes niveles de paralelización: nivel de instrucción, OpenMP, MPI.

Esta no es una implementación de referencia para BLAS, pero es una referencia sobre cómo codificar BLAS (para el rendimiento). Para mantenerse informado, visite www.ulaff.net

Robert van de Geijn
fuente