[关闭]
@daidezhi 2021-04-21T15:55:08.000000Z 字数 4224 阅读 3471

Intel MKL数学库BLAS和稀疏BLAS模块简介

MKL Fortran CFD


MKL数学库简介

英特尔数学内核库(Intel Math Kernel Library,MKL)是一套经过高度优化的多线程数学函数库,可大幅提高运行于英特尔平台上工程、科学及金融等领域应用程序的性能。此函数库的功能领域包括:线性代数运算(BLAS与LAPACK)、线性系统求解(直接求解、迭代求解)、快速傅立叶变换 (FFTs)、矢量数学库 (VML) 以及矢量随机数生成器(VSL)等。本篇文档只关注BLAS和稀疏BLAS模块中关于双精度实数的部分且只针对Fortran语言。


BLAS中函数和子例行程序的命名约定

BLAS模块中functionsubroutine的名称具有如下结构:


其中部分用于区分数据类型:

类型 对应Fortran数据类型
单精度实数 real
双精度实数 real*8real(kind=8)
单精度复数 complex
双精度复数 complex*8complex(kind=8)

有些时候会使用这四种类型的复合形式,例如或者。以函数为例,其用于计算一组单精度复数模的和,返回值为一个单精度实数

在BLAS一级运算中表示操作类型,在二级三级运算中表示作为参数的矩阵类型。

如果指定了,则用来提供此操作的额外信息。在BLAS一级运算中,有:

含义
共轭向量
非共轭向量

在二级运算中有:

含义
矩阵—向量乘积
求解单未知量的线性代数方程组

在三级运算中有:

含义
矩阵—矩阵乘积
求解多未知量的线性代数方程组

BLAS运算

BLAS运算分为三级,第一级只限于向量(vector-vector operations),第二级为矩阵—向量相关运算(matrix-vector operations),第三级为矩阵—矩阵相关运算(matrix-matrix operations)。

BLAS一级运算 Level 1 Routines and Functions

这里只关心双精度实数相关函数和子例行程序,单精度和复数不予讨论,可参考MKL用户手册以获得更多信息。

函数function部分:

  1. res = dasum(n, x, incx)


  1. res = ddot(n, x, incx, y, incy)


  1. res = dnrm2(n, x, incx)


  1. index = idamax(n, x, incx)

  1. index = idamin(n, x, incx)

子例行程序subroutine部分:

  1. call daxpy(n, a, x, incx, y, incy)


  1. call dcopy(n, x, incx, y, incy)


  1. call dscal(n, a, x, incx)


  1. call dswap(n, x, incx, y, incy)


Sparse BLAS模块

Sparse BLAS中的稀疏矩阵存储格式

这里只讨论用于CFD以及其他网格计算技术应用中的稀疏矩阵,不关心稠密实矩阵的相关操作,可参考MKL用户手册以获得更多信息。

MKL中适用于迭代求解技术的稀疏存储格式有:

存储格式 中文名
CSR(Compressed Sparse Row) 压缩行格式
CSC(Compressed Sparse Column) 压缩列格式
COO(Coordinate) 坐标格式

以稀疏矩阵为例:

其结构以及CSR格式如下图所示:
CSR formate of A

在MKL库中,CSR格式分为4数组形式和3数组形式(CSR3)。除了存储元素数值的数组values4数组形式具有三个辅助数组columnspointerB以及pointerE3数组形式具有两组辅助数组columnsrowIndex

持续更新中...


感谢您的阅读,欢迎讨论和批评指正。

作者:戴得志
2016年5月20日

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注