有关cblas接口的任何好文档吗?

And*_*ner 13 reference blas

有人可以为cblas界面推荐一个很好的参考或教程吗?谷歌上没有任何内容,我发现的所有手册页都是针对fortran blas界面的,而MKL附带的pdf字面上需要10秒才能搜索到,并没有帮助.

特别是,我很好奇为什么行与列主要有额外的参数; 使用转置标志不能实现相同的操作吗?看起来额外的参数只会增加已经容易出错的界面的复杂性.

and*_*asw 5

这篇文章通过一个简单的例子展示了如何在 C 中使用 cblas(和其他):http : //www.seehuhn.de/pages/linear

我已经引用了下面的相关部分,以防网站出现故障。

使用 BLAS

为了测试 BLAS 例程,我们想要执行一个简单的矩阵向量乘法。读取文件 blas2-paper.ps.gz 我们发现对应的 Fortran 函数的名称是 DGEMV。blas2-paper.ps.gz 文本也解释了该函数参数的含义。在cblas.ps.gz中我们发现对应的C函数名是cblas_dgemv。下面的例子使用这个函数来计算矩阵向量乘积

/ 3 1 3 \   / -1 \
| 1 5 9 | * | -1 |.
\ 2 6 5 /   \  1 /
Run Code Online (Sandbox Code Playgroud)

示例文件testblas.c

#include <stdio.h>
#include <cblas.h>

double m[] = {
  3, 1, 3,
  1, 5, 9,
  2, 6, 5
};

double x[] = {
  -1, -1, 1
};

double y[] = {
  0, 0, 0
};

int
main()
{
  int i, j;

  for (i=0; i<3; ++i) {
    for (j=0; j<3; ++j) printf("%5.1f", m[i*3+j]);
    putchar('\n');
  }

  cblas_dgemv(CblasRowMajor, CblasNoTrans, 3, 3, 1.0, m, 3,
          x, 1, 0.0, y, 1);

  for (i=0; i<3; ++i)  printf("%5.1f\n", y[i]);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为了编译这个程序,我们使用以下命令。

cc testblas.c -o testblas -lblas -lm

这个测试程序的输出是

 3.0  1.0  3.0
 1.0  5.0  9.0
 2.0  6.0  5.0
-1.0
 3.0
-3.0
Run Code Online (Sandbox Code Playgroud)

这表明一切正常,我们甚至没有错误地使用转置矩阵。