@daidezhi
2021-04-21T23:55:08.000000Z
字数 4224
阅读 3638
MKL
Fortran
CFD
英特尔数学内核库(Intel Math Kernel Library,MKL)是一套经过高度优化的多线程数学函数库,可大幅提高运行于英特尔平台上工程、科学及金融等领域应用程序的性能。此函数库的功能领域包括:线性代数运算(BLAS与LAPACK)、线性系统求解(直接求解、迭代求解)、快速傅立叶变换 (FFTs)、矢量数学库 (VML) 以及矢量随机数生成器(VSL)等。本篇文档只关注BLAS和稀疏BLAS模块中关于双精度实数的部分且只针对Fortran语言。
BLAS模块中function
和subroutine
的名称具有如下结构:
类型 | 对应Fortran数据类型 | |
---|---|---|
单精度实数 | real |
|
双精度实数 | real*8 或real(kind=8) |
|
单精度复数 | complex |
|
双精度复数 | complex*8 或complex(kind=8) |
有些时候会使用这四种类型的复合形式,例如或者。以函数为例,其用于计算一组单精度复数模的和,返回值为一个单精度实数。
在BLAS一级运算中表示操作类型,在二级三级运算中表示作为参数的矩阵类型。
如果指定了,则用来提供此操作的额外信息。在BLAS一级运算中,有:
含义 | |
---|---|
共轭向量 | |
非共轭向量 |
在二级运算中有:
含义 | |
---|---|
矩阵—向量乘积 | |
求解单未知量的线性代数方程组 |
在三级运算中有:
含义 | |
---|---|
矩阵—矩阵乘积 | |
求解多未知量的线性代数方程组 |
BLAS运算分为三级,第一级只限于向量(vector-vector operations),第二级为矩阵—向量相关运算(matrix-vector operations),第三级为矩阵—矩阵相关运算(matrix-matrix operations)。
这里只关心双精度实数相关函数和子例行程序,单精度和复数不予讨论,可参考MKL用户手册以获得更多信息。
函数function
部分:
res = dasum(n, x, incx)
res = ddot(n, x, incx, y, incy)
res = dnrm2(n, x, incx)
index = idamax(n, x, incx)
index = idamin(n, x, incx)
子例行程序subroutine
部分:
call daxpy(n, a, x, incx, y, incy)
call dcopy(n, x, incx, y, incy)
call dscal(n, a, x, incx)
call dswap(n, x, incx, y, incy)
这里只讨论用于CFD以及其他网格计算技术应用中的稀疏矩阵,不关心稠密实矩阵的相关操作,可参考MKL用户手册以获得更多信息。
MKL中适用于迭代求解技术的稀疏存储格式有:
存储格式 | 中文名 |
---|---|
CSR (Compressed Sparse Row) |
压缩行格式 |
CSC (Compressed Sparse Column) |
压缩列格式 |
COO (Coordinate) |
坐标格式 |
以稀疏矩阵为例:
其结构以及CSR
格式如下图所示:
在MKL库中,CSR格式分为4
数组形式和3
数组形式(CSR3
)。除了存储元素数值的数组values
,4
数组形式具有三个辅助数组columns
,pointerB
以及pointerE
,3
数组形式具有两组辅助数组columns
和rowIndex
。
持续更新中...
感谢您的阅读,欢迎讨论和批评指正。
作者:戴得志
2016年5月20日