一、BLAS API 的命名规则
BLAS的命名结构有如下规则
<character> <name> <mod> ( )
1.1 <character>
<character> 域用于指出数据类型:
s 单精度实数
c 单精度复数
d 双精度实数
z 双精度复数
有一些 API 也包含一些其他的数据类型表示,比如 sc 或者 dz 。例如,scasum 函数使用复数类型的输入数组,但返回一个实数值。
1.2 <name>
<name> 域,在 BLAS level 1 中包含操作的类型,例如,BLAS level 1 函数接口中 ?dot, ?rot, ?swap 分别用于计算向量点积、向量旋转和向量交换。但在 BLAS level 2 和 BLAS level 3 中反映矩阵参数类型:
ge 普通矩阵
gb 普通带状矩阵sy 对称矩阵
sp 对称矩阵(压缩存储)
sb 对称带状矩阵he 哈密顿矩阵
hp 哈密顿矩阵(压缩存储)
hb 哈密顿带状矩阵tr 三角矩阵
tp 三角矩阵(压缩存储)
tb 三角带状矩阵
1.3 <mod>
<mod> 域,提供一些其他的操作细节。
在 BLAS level 1 中有如下的 <mod> 域:
c 共轭向量
u 非共轭向量
g Givens旋转结构
m
mg
在 BLAS level 2 中有如下的 <mod> 域:
mv 矩阵和向量乘积
sv 用一个未知向量解线性方程组
r 矩阵的 1 秩更新
r2 矩阵的 2 秩更新
在 BLAS level 3 中有如下的 <mod> 域:
mm 矩阵和矩阵乘积
sm 求解含有多个未知向量的线性方程组
rk 矩阵的 K 秩更新
r2k 矩阵的 2K 秩更新
二、枚举类型
CBLAS接口中定义了如下枚举类型:
enum CBLAS_ORDER {
CblasRowMajor=101, /* row-major arrays */
CblasColMajor=102}; /* column-major arrays */
enum CBLAS_TRANSPOSE {
CblasNoTrans=111, /* trans = 'N' */
CblasTrans=112, /* trans = 'T' */
CblasConjTrans=113}; /* trans = 'C' */
enum CBLAS_UPLO {
CblasUpper=121, /* uplo = 'U' */
CblasLower=122};/* uplo = 'L' */
enum CBLAS_DIAG {
CblasNonUnit=131, /* diag = 'N' */
CblasUnit=132}; /* diag = 'U' */
enum CBLAS_SIDE {
CblasLeft=141, /* side = 'L' */
CblasRight=142};/* side = 'R' */
三、矩阵存储方案
矩阵参数可以使用以下存储方案:
- 完全存储
通过一个二维的数组 a[][] 去存储一个矩阵 A ,如果通过列主存储,则 Aij 的存储位置为 a[ i + j * lda ] ; 如果通过行主存储,则 Aij 的存储位置为 a[ j + i * lda ]。
- 压缩存储
压缩存储方案允许您更紧凑地存储 对称、哈密顿矩阵和三角形矩阵。对于列主存储,矩阵的上三角或下三角由一维数组中的列填充。对于行主存储,矩阵的上三角或下三角由一维数组中的行填充。
- 带状存储
将带状矩阵压缩存储在二维数组中。对于列主存储,矩阵的列存储在数组的相应列中,矩阵的对角线存储在数组的特定行中。对于行主存储,矩阵的行存储在数组的相应行中,矩阵的对角线存储在数组的特定列中。
网友评论