可替换性
KML_LAPACK对外提供的接口,与MKL-LAPACK的接口参数和函数名完全一致,可以直接替换库使用。
如表1 LAPACK的替换映射关系所示为可替换的接口与MKL中LAPACK的Fortran接口的映射关系(仅给出已优化的接口)。
MKL接口 |
KML对应接口 |
数据类型 |
描述 |
---|---|---|---|
?getrf |
?getrf |
s、d、c、z |
计算矩阵A的LU分解 |
?geqrf |
?geqrf |
s、d、c、z |
计算矩阵的QR分解 |
?gerqf |
?gerqf |
s、d、c、z |
计算矩阵的RQ分解 |
?geqlf |
?geqlf |
s、d、c、z |
计算矩阵的QL分解 |
?gelqf |
?gelqf |
s、d、c、z |
计算矩阵的LQ分解 |
?ppsv |
?ppsv |
s、d、c、z |
计算矩阵A的Cholesky分解,并通过分解结果求解线性方程组 |
?ptsv |
?ptsv |
s、d、c、z |
求解线性方程组,其中系数矩阵A为实(共轭)对称正定三对角矩阵。 |
?getri |
?getri |
s、d、c、z |
根据?getrf得到的LU分解结果计算逆矩阵 |
?syevd |
?syevd |
s、d |
计算对称(Hermite)矩阵的全部特征值和特征向量 |
?heevd |
?heevd |
c、z |
计算对称(Hermite)矩阵的全部特征值和特征向量 |
?sytrd |
?sytrd |
s、d |
将对称矩阵或Hermite矩阵通过相似变换成对称三对角T |
?hetrd |
?hetrd |
c、z |
将对称矩阵或Hermite矩阵通过相似变换成对称三对角T |
?potrf |
?potrf |
s、d、c、z |
计算对称正定矩阵或者Hermite正定矩阵的Cholesky分解 |
?pttrf |
?pttrf |
s、d、c、z |
计算实(共轭)对称正定三对角矩阵A的LDL*或U*DU分解 |
?potri |
?potri |
s、d、c、z |
计算对称正定矩阵的逆。 |
?gesv |
?gesv |
s、d、c、z |
求解线性方程组 |
?orglq |
?orglq |
s、d |
生成具有正交行的实/复矩阵Q,且该矩阵定义为K个N阶基本反射器的乘积的前M行 |
?unglq |
?unglq |
c、z |
生成具有正交行的实/复矩阵Q,且该矩阵定义为K个N阶基本反射器的乘积的前M行 |
?ormlq |
?ormlq |
s、d |
计算 |
?unmlq |
?unmlq |
c、z |
计算 |
?orgql |
?orgql |
s、d |
生成具有正交列的实/复矩阵Q,且该矩阵定义为K个M阶基本反射器的乘积的前N列 |
?ungql |
?ungql |
c、z |
生成具有正交列的实/复矩阵Q,且该矩阵定义为K个M阶基本反射器的乘积的前N列 |
?ormql |
?ormql |
s、d |
计算 |
?unmql |
?unmql |
c、z |
计算 |
?orgqr |
?orgqr |
s、d |
生成具有正交行的实/复矩阵Q,且该矩阵定义为K个N阶基本反射器的乘积的前M行 |
?ungqr |
?ungqr |
c、z |
生成具有正交行的实/复矩阵Q,且该矩阵定义为K个N阶基本反射器的乘积的前M行 |
?orgrq |
?orgrq |
s、d |
生成具有正交行的实/复矩阵Q,且该矩阵定义为K个N阶基本反射器的乘积的前M行 |
?ungrq |
?ungrq |
c、z |
生成具有正交行的实/复矩阵Q,且该矩阵定义为K个N阶基本反射器的乘积的前M行 |
?ormrq |
?ormrq |
s、d |
计算 |
?unmrq |
?unmrq |
c、z |
计算 |
?ormqr |
?ormqr |
s、d |
计算 |
?unmqr |
?unmqr |
c、z |
计算 |
?syev |
?syev |
s、d |
计算对称(Hermite)矩阵的所有特征值与特征向量。 |
?heev |
?heev |
c、z |
计算对称(Hermite)矩阵的所有特征值与特征向量。 |
?pttrs |
?pttrs |
s、d、c、z |
求解三对角方程AX=B,其中系数矩阵A由?pttrf分解而来。 |
?ptts2 |
?ptts2 |
s、d、c、z |
求解三对角方程AX=B,其中系数矩阵A由?pttrf分解而来。 |
?lasr |
?lasr |
s、d、c、z |
对矩阵A做平面旋转操作。 |
?gtsv |
?gtsv |
s、d、c、z |
求解线性方程组A*X=B,其中系数矩阵A为一般三对角矩阵。 |
?gttrf |
?gttrf |
s、d、c、z |
计算一般三对角矩阵A的LU分解。 |
?gttrs |
?gttrs |
s、d、c、z |
求解三对角方程A*X=B或A**T *X=B或A**H *X=B,其中系数矩阵A由?gttrf分解而来。 |
?sytrd_2stage |
?sytrd_2stage |
s、d、c、z |
将对称矩阵或Hermite矩阵A转为对称或Hermite三对角矩阵T, |
?trtrs |
?trtrs |
s、d、c、z |
求解三角方程A * X = B,或A**T * X = B。 |
?laset |
?laset |
s、d、c、z |
初始化m*n的矩阵,且将对角线元素设置为beta,非对角线元素设置为alpha。 |
?sptrf |
?sptrf |
s、d、c、z |
计算压缩对称矩阵的LDL*或U*DU分解。 |
?hptrf |
?hptrf |
s、d、c、z |
计算压缩Hermite矩阵的LDL*或U*DU分解。 |
?pptrf |
?pptrf |
s、d、c、z |
计算压缩存储的对称正定矩阵的LLT或UTU分解。 |
?pptrs |
?pptrs |
s、d、c、z |
求解三对角方程A*X=B或A**T *X=B或A**H *X=B。其中系数矩阵A由?gttrf分解而来。 |
?pptri |
?pptri |
s、d、c、z |
计算压缩存储的对称正定矩阵的逆矩阵。 |
?getrs |
?getrs |
s、d、c、z |
求解一般线性方程A*X=B或A**T * X=B或A**H * X=B。其中系数矩阵A由?getrf分解而来。 |
?posv |
?posv |
s、d、c、z |
求解线性方程组 |
?trtri |
?trtri |
s、d、c、z |
计算上/下三角矩阵的逆矩阵。 |
?laswp |
?laswp |
s、d、c、z |
对矩阵做一系列的行交换操作。 |
?lascl |
?lascl |
s、d、c、z |
对矩阵做scalar操作。 |
?lange |
?lange |
s、d、c、z |
计算矩阵的范数,包含:1范数,F范数,无穷范数等。 |
?sgesv |
?gesv |
ds、zc |
求解线性方程组 |
?gels |
?gels |
s、d、c、z |
使用矩阵的QR或LQ分解来求解超定或欠定线性方程组。 |
?gelsd |
?gelsd |
s、d、c、z |
使用分治法对线性最小二乘问题求解其最小范数解。 |
?gelss |
?gelss |
s、d、c、z |
使用SVD方法对线性最小二乘问题求解其最小范数解。 |
?steqr |
?steqr |
s、d、c、z |
使用QL或QR方法求解对称三对角矩阵的特征值和特征向量。 |
?gtts2 |
?gtts2 |
s、d、c、z |
求解三对角方程A*X=B或A**T *X=B或A**H *X=B,其中系数矩阵A由?gttrf分解而来。 |
?ormbr |
?ormbr |
s、d |
计算C=Q*C或Q**T*C或C*Q或C*Q**T或C=P*C或P**T*C或C*P或C*P**T, |
?unmbr |
?unmbr |
c、z |
计算C=Q*C或Q**T*C或C*Q或C*Q**T或C=P*C或P**T*C或C*P或C*P**T, |
?orgtr |
?orgtr |
s、d |
通过反射因子生成正交矩阵Q,其中反射因子由SYTRD计算得来。 |
?ungtr |
?ungtr |
c、z |
通过反射因子生成正交矩阵Q,其中反射因子由SYTRD计算得来。 |
?lacpy |
?lacpy |
s、d、c、z |
拷贝矩阵A的所有元素或部分元素到矩阵B。 |
?stedc |
?stedc |
s、d、c、z |
对称三对角矩阵的特征值求解,使用Divide-and-Conquer算法。 |
?gesvd |
?gesvd |
s、d、c、z |
一般矩阵SVD分解。 |
?gebrd |
?gebrd |
s、d、c、z |
一般矩阵变换到两对角矩阵。 |
?bdsdc |
?bdsdc |
s、d |
计算N*N的上/下双对角矩阵B的奇异值分解,使用分治算法。 |
?gesdd |
?gesdd |
s、d、c、z |
计算矩形矩阵的奇异值分解,可以用来计算左和右奇异向量,使用分治算法。 |
?bdsqr |
?bdsqr |
s、d、c、z |
使用对双对角矩阵的QR算法的SVD分解来求解奇异值或左右奇异向量。 |
以上接口均为Fortran接口,在C语言中使用时需在接口名称后增加下划线,且参数类型均为指针类型,请参见《Kunpeng HPCKit 24.0.0 开发指南》中“鲲鹏数学库开发指南 > 应用数学库 > KML_LAPACK库函数说明 > 函数定义”章节。
若需使用LAPACKE接口(MKL中标准的C接口),需在编译开源Netlib LAPACK时增加对LAPACKE封装库的编译,请参见迁移步骤中说明。