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