C语言迁移步骤
需要迁移的部分主要有三大类:
- 函数名
可替换的接口与MKL接口的映射关系可参考可替换性。
- 函数入参
- 声明变量
例:csrmv接口
迁移前:
#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 * * */
迁移后:
#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 * * */