鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

稀疏基础线性代数库(Sparse BLAS)迁移

可替换性

KML_SPBLAS对外提供的接口,与MKL-SPBLAS的接口参数和函数名不一致,需要修改部分源码。

表1表2所示为可替换的接口与MKL接口的映射关系。

表1 Level1接口的替换映射关系

MKL接口

KML对应接口

数据类型

描述

cblas_?axpyi

kml_sparse_?axpyi

s,d,c,z

稀疏向量分别缩放与加和

cblas_?doti

kml_sparse_?doti

s,d

稀疏向量点积。

cblas_?dotci

kml_sparse_?dotci_sub

c,z

共轭稀疏向量与另一稀疏向量的点积。

cblas_?dotui

kml_sparse_?dotui_sub

c,z

复数稀疏向量点积。

cblas_?gthr

kml_sparse_?gthr

s,d,c,z

将full-storage格式的稀疏向量中指定的元素加载到compressed格式的向量中

cblas_?gthrz

kml_sparse_?gthrz

s,d,c,z

将full-storage格式的稀疏向量y中指定的元素加载到compressed格式的向量中。

cblas_?roti

kml_sparse_?roti

s,d

基于平面上点旋转。

cblas_?sctr

kml_sparse_?sctr

s,d,c,z

将compressed格式的向量写入full-storage格式的稀疏向量

表2 Level2、3接口的替换映射关系

MKL接口

KML对应接口

数据类型

描述

mkl_?csrgemv

kml_sparse_?csrgemv

s,d,c,z

矩阵与向量计算,稀疏矩阵采用CSR格式存储。

mkl_?csrsymv

kml_sparse_?csrsymv

s,d,c,z

矩阵与向量计算,稀疏矩阵采用CSR格式存储。

mkl_cspblas_?csrgemv

kml_csparse_?csrgemv

s,d,c,z

矩阵与向量计算,稀疏矩阵采用CSR格式存储。

mkl_cspblas_?csrsymv

kml_csparse_?csrsymv

s,d,c,z

矩阵与向量计算,稀疏矩阵采用CSR格式存储。

mkl_?csrmv

kml_sparse_?csrmv

s,d,c,z

矩阵与向量乘积,矩阵是CSR格式的稀疏矩阵。

mkl_?csrsv

kml_sparse_?csrsv

s,d,c,z

求解三角矩阵方程组计算,稀疏矩阵采用CSR格式存储。

mkl_?csrmm

kml_sparse_?csrmm

s,d,c,z

矩阵与矩阵计算,其中一个稀疏矩阵采用CSR格式存储。

mkl_?csradd

kml_sparse_?csradd

s,d,c,z

计算2个CSR格式的稀疏矩阵之和。

mkl_?csrmultcsr

kml_sparse_?csrmultcsr

s,d,c,z

矩阵与矩阵计算,其中3个稀疏矩阵采用3-arrays CSR格式存储。

mkl_?csrmultd

kml_sparse_?csrmultd

s,d,c,z

矩阵与矩阵计算,其中2个稀疏矩阵采用CSR格式存储。

C语言迁移步骤

需要迁移的部分主要有三大类:

  • 函数名

    可替换的接口与MKL接口的映射关系请参见可替换性

  • 函数入参

    部分接口常数变量MKL传入参数为指针,KML接口直接传入数值,具体请参见《Kunpeng HPCKit 25.1.0.SPC001 开发指南》中“鲲鹏数学库开发指南”章节。

  • 声明变量

    MKL部分变量带有MKL前缀,需要改为KML。

例:csrmv接口

迁移前:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "mkl_spblas.h"

char transa = 'N';
MKL_INT m = 4;
MKL_INT k = 4;
float alpha = 0.5;
float beta = 1.2;
char *matdescra = "G00F"; // 一般矩阵,基 1 索引
float val[9] = {2, -3, 7, 1, -6, 8, -4, 5, 9};
MKL_INT indx[9] = {1, 2, 4, 3, 4, 1, 3, 4, 1};
MKL_INT pntrb[4] = {1, 4, 6, 9};
MKL_INT pntre[4] = {4, 6, 9, 10};
float x[4] = {1, 3, -2, 5};
float y[4] = {-1, 1, 5, 3};
mkl_scsrmv(&transa, &m, &k, &alpha, matdescra, val, indx, pntrb, pntre, x, &beta, y);
return 0;
/*
*  Output Y:
*
*     12.80  -14.80  26.50   8.10
*
* */

迁移后:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "kspblas.h"

kml_sparse_operation_t opt = KML_SPARSE_OPERATION_NON_TRANSPOSE;
KML_INT m = 4;
KML_INT k = 4;
float alpha = 0.5;
float beta = 1.2;
char *matdescra = "G00F"; // 一般矩阵,基 1 索引
float val[9] = {2, -3, 7, 1, -6, 8, -4, 5, 9};
KML_INT indx[9] = {1, 2, 4, 3, 4, 1, 3, 4, 1};
KML_INT pntrb[4] = {1, 4, 6, 9};
KML_INT pntre[4] = {4, 6, 9, 10};
float x[4] = {1, 3, -2, 5};
float y[4] = {-1, 1, 5, 3};
kml_sparse_status_t status = kml_sparse_scsrmv(opt, m, k, alpha, ma tdescra, val, indx, pntrb, pntre, x, beta, y);
return status;
/*
*  Output Y:
*
*     12.80  -14.80  26.50   8.10
*
* */

Fortran接口迁移步骤

Fortran接口迁移与C语言迁移步骤一致。