首页/文章/ 详情

调用MKL函数库

7月前浏览9079

本文摘要(由AI生成):

MKL是Intel公司推出的数学函数库,支持C和Fortran接口,集成了BLAS、LAPACK和ScalLAPACK等库。LAPACK特别适用于科学与工程计算中的数值线性代数问题。使用MKL时,需正确设置include和lib,确保编译器能识别函数接口和链接库文件。include指定函数接口,对于Fortran库,常包含*.mod文件或*.f90源代码文件;lib则包含函数的具体实现,用于最终可执行文件的链接。

以矩阵LU分解为例,使用sgetrf函数,其命名规则反映了数据类型(s代表单精度)、矩阵类型(ge代表一般矩阵)和操作类型(f代表分解)。函数的参数包括矩阵的行列数、矩阵本身、矩阵维度以及输出参数如LU分解后的矩阵和行交换信息。在源代码中需添加use lapack95语句,并在项目属性中配置相应的库文件。


MKL函数库中的关键字用于标识数据类型(如s表示单精度实数,d表示双精度实数)、矩阵类型(如ge表示一般矩阵,sy表示对称矩阵)和操作类型(如mv表示矩阵向量乘积)。这些关键字帮助用户选择和调用适当的函数进行数值计算。

MKL是Intel公司出品的数学函数库,有C和Fortran接口。它集成BLAS, LAPACK 和 ScalLAPACK 等函数库。其中,Lapack 包含了求解科学与工程计算中最常见的数值线性代数问题。

正确使用函数库,就是让编译器正确的识别 include 和 lib。具体要 use 哪个module?链接哪个 lib 文件?
●include告诉编译器,我们使用到的这些函数是什么,需要多少个参数,每个参数是什么类型,返回什么值。它的作用就像 Interface 接口一样。它没有函数内部如何实现的说明,只有接口!对于 Fortran 函数库,通常 include 里包含的都是 *.mod 文件,有些也包含 *.f90 文件(源代码方式声明接口)。

●lib 链接器在链接成最终可执行文件时,需要把 lib 中的函数库一起链接。它是函数内部的实现,是函数的实际作用体,也是可执行代码。

下面结合矩阵LU分解来说明具体操作

使用sgetrf函数对矩阵进行LU分解,函数的命名规则是这样的,s代表single也就是单精度,ge代表一般矩阵,f代表factorization。函数的具体参数如下:
call sgetrf( m, n, a, lda, ipiv, info )

输入参数为以下:

m :代表输入矩阵a的行数
n :代表输入矩阵a的列数
a :代表输入矩阵
lda :就是矩阵a的第一个维度,一般是m
输出参数为:
a :上三角部分为经过LU分解后的矩阵U,下三角部分(不包括主对角线元素)为L矩阵。

注意这里不是纯上三角矩阵!!!
ipiv :INTEGER类型。是一个数组,维度一般是max(1,min(m, n)),具体英文说明是The pivot indices; for 1 ≤ i ≤ min(m, n), row i was interchanged with row ipiv(i).
info:INTEGER类型。执行标示符,成功是0,其他为失败标识,具体查看mkl帮助。


★在源代码添加use lapack95语句。

★在项目属性里按如下配置即可


输出结果为:


代码点击这里下载


MKL函数库的关键字理解:

数据类型关键字:

s:real, single precision,单精度实数
c:complex, single precision,单精度复数
d:real, double precision,双精度实数
z:complex, double precision,双精度复数


常用矩阵类型关键字:

ge:general matrix,一般矩阵
gb:general band matrix,一般带状矩阵
sy:symmetric matrix,对称矩阵
sp:symmetric matrix (packed storage)
s b:symmetric band matrix
tr:triangular matrix,三角阵
tp:triangular matrix (packed storage)
tb:triangular band matrix.

常用操作类型关键字:

mv: matrix-vector product,矩阵向量乘积
sv:solving a system of linear equations with a single unknown vector
mm:matrix-matrix product,矩阵矩阵乘积
s m:solving a system of linear equations with multiple unknown vectors





来源:数值分析与有限元编程
ACTSystem
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-01
最近编辑:7月前
太白金星
本科 慢慢来
获赞 5粉丝 12文章 325课程 0
点赞
收藏
作者推荐

新兴的计算机语言——Julia

本文摘要(由AI生成):Julia是一种新兴的开源编程语言,自2012年起逐渐崭露头角,至2019年已位列编程语言排行榜第37位。它融合了多种语言的优点,旨在提供高性能、通用性、动态类型、数值计算以及可组合性。Julia不仅适用于一般编程任务,更在科学计算、机器学习、数据科学和并行计算等领域展现出巨大潜力。Julia官网提供了丰富的资源和文档,中文社区也为学习者提供了交流和支持的平台。我们知道,开发人员已经使用Python近30年了,并且目前正受到机器学习和数据科学家的大力推动。而Julia从2012年才开始使用,到2019年1月Tiobe官网发布了编程语言排行榜中,Julia已经排在第37位了。Julia到底是何方神圣?看其官方介绍:“我们想要一种拥有自由许可的开源语言,同时拥有 C 的速度和 Ruby 的灵活。我们想要一种同像性语言,有像 Lisp 这样真正的宏,也有像 Matlab 这样的浅显熟悉的数学符号。我们想要一门像 Python 一样可用于通用编程,像 R 一样易于统计,像 Perl 一样自然地用于字符串处理,像 Matlab 一样强大的线性代数,像 shell 一样擅长将程序粘合在一起的语言。它简单易学,却能让严苛的黑客为之倾心。我们希望它是交互式的,具备可编译性。”Julia具有以下的特性:●快速:Julia一开始就是为高性能而设计的。Julia可以通过LLVM而跨平台被编译成高效的本地代码。●通用:Julia使用多分派作为编程范式,使其更容易表达面向对象和函数式编程范式。标准库提供了异步I/O,进程控制,日志记录,性能分析,包管理器等等。●动态:Julia是动态类型的,与脚本语言类似,并且对交互式使用具有很好的支持。●数值计算:Julia擅长于数值计算,它的语法适用于数学计算,支持多种数值类型,并且支持并行计算。Julia的多分派自然适合于定义数值和类数组的数据类型。●可选的类型标注:Julia拥有丰富的数据类型描述,类型声明可以使得程序更加可读和健壮。●可组合:Julia的包可以很自然的组合运行。单位数量的矩阵或数据表一列中的货币和颜色可以一起组合使用并且拥有良好的性能Julia除了编写UI,静态编译代码,将其部署在Web服务器等一般用途之外,在科学计算,机器学习,数据科学,并行计算领域也大有可为。相关资源Julia官网:https://julialang.org/downloads/Julia文档:https://docs.julialang.org/en/v1/Julia中文社区:https://cn.julialang.org/来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈