前一阵子,当我开始在中进行线性代数运算时C,我惊讶地发现BLAS,LAPACK以及其他基本APIs的教程如此之少,尽管事实上它们是许多其他库的基石。出于这个原因,我开始收集所有的例子/教程我能找到所有在互联网上的BLAS,CBLAS,LAPACK,CLAPACK,LAPACKE,ATLAS,OpenBLAS...在这个Github上回购。
好吧,我应该警告您,作为机械工程师,我在管理这样的git仓库或GitHub方面经验不足。对你们来说,它首先看起来像是一团糟。但是,如果您设法克服混乱的结构,则会发现各种示例和说明,可能会有所帮助。我已经尝试了其中大多数,以确保它们可以编译。我提到过那些没有编译的东西。我修改了其中的许多内容,使其可与GNU compilers(gcc,g++和gfortran)一起编译。我编写了MakeFiles,您可以阅读该书,以了解如何Fortran/FORTRAN在C或C++程序中调用各个例程。我还为Mac和Linux放了一些安装说明(对不起Windows家伙!)。我也做了一些bash .sh 文件以自动编译其中一些库。
但要你的另一个问题:BLAS和LAPACK相当API不是特定SDK秒。它们只是规范或语言扩展的列表,而不是实现或库。随着中说,有原始的实现通过入Netlib在FORTRAN 77谈论的时候,大多数人是指(容易混淆的!)BLAS和LAPACK。因此,使用这些APIs 时如果看到很多奇怪的事情,是因为实际上是在调用FORTRAN例程C而不是在C库和函数中调用例程。ATLAS并OpenBLAS有一些最好的实现BLAS,并LACPACK就我知道的。它们符合原始格式API,即使据我所知,它们是在C/C++从头开始(不确定!)。有APIs的GPGPU实现,其中包括OpenCL:CLBlast,clBLAS,clMAGMA,ArrayFire和ViennaCL。还有针对特定硬件或平台优化的特定于供应商的实现,我强烈劝阻任何人使用它们。
我对任何人谁想要使用学习的建议BLAS,并LAPACK在C是学习FORTRAN-C第一混合编程。提到的回购协议的第一章专门讨论此问题,在那里我收集了许多不同的示例。
PS我一直在不时地在存储库的dev分支上工作。似乎少了一些混乱!