Mientras que hace, cuando empecé a hacer un poco de álgebra lineal en C, que me llegó como una sorpresa ver que hay tan pocos tutoriales para BLAS, LAPACKy otros fundamentales APIs, a pesar de que de alguna manera son las piedras angulares de muchas otras bibliotecas. Por eso empecé a coleccionar todos los ejemplos / tutoriales que pude encontrar en todo el Internet para BLAS, CBLAS, LAPACK, CLAPACK, LAPACKE, ATLAS, OpenBLAS... en este repo Github .
Bueno, debo advertirte que, como ingeniero mecánico, tengo poca experiencia en la gestión de un repositorio de git o GitHub. Primero les parecerá un completo desastre a ustedes. Sin embargo, si logra superar la estructura desordenada, encontrará todo tipo de ejemplos e instrucciones que podrían ser de ayuda. He probado la mayoría de ellos, para asegurarme de que compilan. Y los que no compilan he mencionado. He modificado muchos de ellos para que sean compilables con GNU compilers( gcc, g++y gfortran). He hecho MakeFiles que se puede leer para aprender cómo se puede llamar individuales Fortran/FORTRANrutinas en una Co C++programa. También he puesto algunas instrucciones de instalación para mac y linux (¡lo siento, chicos de Windows!). También he hecho algunosbash .sh archivos para la compilación automática de algunas de estas bibliotecas.
Pero yendo a su otra pregunta: BLASy LAPACKmás bien APIno son específicos SDK. Son solo una lista de especificaciones o extensiones de lenguaje en lugar de implementaciones o bibliotecas. Dicho esto, existen implementaciones originales de Netlib en FORTRAN 77que la mayoría de la gente se refiere a (confusamente!) Cuando se habla de BLASy LAPACK. Entonces, si ve muchas cosas extrañas al usar estos APIs es porque en realidad estaba llamando a FORTRANrutinas en Clugar de Cbibliotecas y funciones. ATLASy OpenBLASson algunas de las mejores implementaciones de BLASy LACPACKque yo sepa. Se ajustan al original API, aunque, a mi entender, se implementan enC/C++desde cero (¡no estoy seguro!). Hay implementaciones de GPGPU de los APIs que usan OpenCL: CLBlast , clBLAS , clMAGMA , ArrayFire y ViennaCL para mencionar algunas. También hay implementaciones específicas de proveedores optimizadas para hardware o plataforma específicos, lo que desaconsejo encarecidamente que cualquiera las use.
Mi recomendación para cualquiera que quiera aprender usando BLASy LAPACKen Caprender FORTRAN-Cprimero es la programación mixta. El primer capítulo del repositorio mencionado está dedicado a este asunto y allí he recopilado muchos ejemplos diferentes.
PD: He estado trabajando en la rama de desarrollo del repositorio de vez en cuando. ¡Parece un poco menos desordenado!