首先,命名规范:
There are three levels of BLAS operations,
-
Level 1
- Vector operations, e.g. y = /alpha x + y 向量操作 Level 2
- Matrix-vector operations, e.g. y = /alpha A x + /beta y 矩阵与向量操作 Level 3
- Matrix-matrix operations, e.g. C = /alpha A B + C 矩阵与矩阵的操作
Each routine has a name which specifies the operation, the type of matrices involved and their precisions. Some of the most common operations and their names are given below,
-
DOT
- scalar product, x^T y AXPY
- vector sum, /alpha x + y MV
- matrix-vector product, A x SV
- matrix-vector solve, inv(A) x MM
- matrix-matrix product, A B SM
- matrix-matrix solve, inv(A) B
The type of matrices are,
-
GE
- general GB
- general band SY
- symmetric SB
- symmetric band SP
- symmetric packed HE
- hermitian HB
- hermitian band HP
- hermitian packed TR
- triangular TB
- triangular band TP
- triangular packed
Each operation is defined for four precisions,
-
S
- single real D
- double real C
- single complex Z
- double complex
Thus, for example, the name SGEMM stands for "single-precision general matrix-matrix multiply" and ZGEMM stands for "double-precision complex matrix-matrix multiply".
因此,例如,命名为SGEMM的函数意思为“单精度普通矩阵乘法”,ZGEMM为“双精度复数矩阵乘法”。
更多的,可以参考:http://www.netlib.org/blas/blasqr.pdf
下面这个例子是在csdn论坛上看到的,简单地改一下,可用GotoBlas2调用成功。
程序说明:下面的matrix.c 文件分别调用 C 代码, BLAS Level 1 函数 (ddot), BLAS Level 2 函数(dgemv) 与 BLAS Level 3的函数(DGEMM)完成矩阵计算: Yours_multiply 是 C 源代码,它直接依赖编译器生成优化代码。Ddot_Multiply,Dgemv_multiply使用Gotoblas2调用实现部分矩阵运算。Dgemm_multiply 直接调用GotoBlas2 的矩阵计算函数。