MKL函数库学习(2)之BLAS Level 1 函数库

BLAS Level 1 函数库

BLAS Level 1 执行向量-向量运算. 下表列出了BLAS Level 1函数组以及与它们关联的数据类型.

BLAS Level 1函数组

 

 

函数组

数据类型

描述

cblas_?asum

s, d, sc, dz

向量的和

cblas_?axpy

s, d, c, z

计算向量-标量的积

cblas_?copy

s, d, c, z

拷贝向量

cblas_?dot

s, d

计算向量与向量的点积

cblas_?sdot

sd, d

双精度计算向量与向量的点积

cblas_?dotc

c, z

计算共轭向量与另一个向量的点积

cblas_?dotu

c, z

计算向量与向量的点积

cblas_?nrm2

s, d, sc, dz

计算向量的欧氏范数

cblas_?rot

s, d, cs, zd

执行平面内点的旋转

cblas_?rotg

s, d, c, z

计算Givens旋转

cblas_?rotm

s, d

修正绕平面是一点的Givens旋转

cblas_?rotmg

s, d

计算修正Givens旋转的参数

cblas_?scal

s, d, c, z, cs, zd

计算向量与标量的乘积

cblas_?swap

s, d, c, z

交换一个向量和另一个向量

cblas_i?amax

s, d, c, z

查找绝对值最大的元素的索引

cblas_i?amin

s, d, c, z

已知向量x, i?amin返回的是向量的最小绝对值的位置

cblas_?cabs1

s, d

计算复数的绝对值

 

cblas_?asum

计算向量元素的大小之和.

 

函数定义

float cblas_sasum (const MKL_INT n, const float *x, const MKL_INT incx);

float cblas_scasum (const MKL_INT n, const void *x, const MKL_INT incx);

double cblas_dasum (const MKL_INT n, const double *x, const MKL_INT incx);

double cblas_dzasum (const MKL_INT n, const void *x, const MKL_INT incx);

 

 

 

包含头文件

  • mkl.h

描述

?asum 计算实向量中各元素的量的和,或复向量中各元素实部和虚部的量的和:

res = |Rex1| + |Imx1| + |Rex2| + Imx2|+ ... + |Rexn| + |Imxn|,   

输入参数

 

n

指定向量x中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定索引向量x的增量.

 

输出参数

 

res

包含向量中所有元素的实部和虚部的大小之和

 

返回值

包含向量中所有元素的实部和虚部的大小之和.

 

cblas_?axpy

计算向量-标量乘积并将结果添加到一个向量.

 

函数定义

void cblas_saxpy (const MKL_INT n, const float a, const float *x, const MKL_INT incx,float *y, const MKL_INT incy);

void cblas_daxpy (const MKL_INT n, const double a, const double *x, const MKL_INT incx,double *y, const MKL_INT incy);

void cblas_caxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx,void *y, const MKL_INT incy);

void cblas_zaxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx,void *y, const MKL_INT incy);

包含头文件

  • mkl.h

描述

?axpy执行向量-向量操作定义为

y := a*x + y                                                                                                                                                  

a是标量

xy都是向量,每个向量的元素个数都等于n.

输入参数

 

n

指定向量x和y中的元素数量.

a

指定标量a.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

 

输出参数

                                                 

y

包含更新后的向量y.

 

cblas_?copy

将一个向量复制到另一个向量.

 

 

函数定义

void cblas_scopy (const MKL_INT n, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);

void cblas_dcopy (const MKL_INT n, const double *x, const MKL_INT incx, double *y

const MKL_INT incy);

void cblas_ccopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);

void cblas_zcopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);

包含头文件

  • mkl.h

描述

 ?copy 执行向量-向量操作,定义为

y = x,                                                                                                                                                          

其中x和y是向量

输入参数

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

 

输出参数

 

y

如果n是正的,则包含向量x的一个副本。否则,参数不变

 

cblas_?dot

计算向量与向量的点积.

 

函数定义

float cblas_sdot (const MKL_INT n, const float *x, const MKL_INT incx, const float *y,

const MKL_INT incy);

double cblas_ddot (const MKL_INT n, const double *x, const MKL_INT incx, const double

*y, const MKL_INT incy);

包含头文件

  • mkl.h

描述

?dot 向量-向量操作,定义为

xi和yi是向量x和y的元素.

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

返回值

x和y的点积的结果,如果n是正的。否则,返回0.

cblas_?sdot

双精度计算向量与向量的点积.

 

函数定义

float cblas_sdsdot (const MKL_INT n, const float sb, const float *sx, const MKL_INT

incx, const float *sy, const MKL_INT incy);

double cblas_dsdot (const MKL_INT n, const float *sx, const MKL_INT incx, const float

*sy, const MKL_INT incy);

包含头文件

  • mkl.h

描述

?sdot以双精度计算两个向量的内积。两个例程都使用中间结果的双精度积累,但是sdsdot例程以单精度输出最终结果,而dsdot例程输出双精度结果。函数sdsdot还将标量值sb添加到内积中.

输入参数

 

n

指定输入向量sx和sy中的元素数量.

sb

将单个精度标量添加到内积(仅用于函数sdsdot)

sx, sy

数组,大小至少(1+(n-1)*abs(incx))和(1+(n-1)*abs(incy)), 分别包含输入的单精度向量。

incx

指定sx元素的增量.

incy

指定sy元素的增量.

 

输出参数

 

res

n为正的时候,返回两个数组的点乘(sdsdot结果加一个标量sb);n≤0,对于sdsdot返回sb,对于dsdot返回0

 

返回值

当n为正的时候,返回两个数组的点乘(sdsdot结果加一个标量sb);若n≤0,对于sdsdot返回sb,对于dsdot返回0.

cblas_?dotc

计算共轭向量与另一个向量的点积.

 

函数定义

void cblas_cdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void

*y, const MKL_INT incy, void *dotc);

void cblas_zdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void

*y, const MKL_INT incy, void *dotc);

包含头文件

  • mkl.h

描述

?dotc 执行向量-向量操作,定义为:

xi和yi是向量x和y的元素.

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

输出参数

 

dotc

包含共轭x和未共轭y的点积的结果,如果n是正的。否则,0

 

cblas_?dotu

计算向量与向量的点积.

 

函数定义

void cblas_cdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void

*y, const MKL_INT incy, void *dotu);

void cblas_zdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void

*y, const MKL_INT incy, void *dotu);

 

包含头文件

  • mkl.h

描述

?dotu 向量-向量操作,定义为

其中xi和yi是复向量x和y的元素.

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

输出参数

dotu

包含xy点积的结果,如果n是正的。否则,它0

 

cblas_?nrm2

计算向量的欧氏范数.

 

函数定义

float cblas_snrm2 (const MKL_INT n, const float *x, const MKL_INT incx); double cblas_dnrm2 (const MKL_INT n, const double *x, const MKL_INT incx); float cblas_scnrm2 (const MKL_INT n, const void *x, const MKL_INT incx); double cblas_dznrm2 (const MKL_INT n, const void *x, const MKL_INT incx);

包含头文件

  • mkl.h

描述

?nrm2执行的向量操作定义为

res = ||x||,                                                                                                                                                      

 

x是一个向量,

res是一个包含x元素的欧氏范数的值.

 

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

返回值

向量x的欧氏范数.

 

 

 

cblas_?rot

执行平面内点的旋转.

 

函数定义

void cblas_srot (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT

incy, const float c, const float s);

void cblas_drot (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double c, const double s);

void cblas_csrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT

incy, const float c, const float s);

void cblas_zdrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT

incy, const double c, const double s);

包含头文件

  • mkl.h

描述

给定两个复向量x和y,将这两个向量的每个向量元素替换为:

xi = c*xi + s*yi

yi = c*yi - s*xi

输入参数

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

c

标量

s

标量

 

 

输出参数

x

每个元素被替换为c*x + s*y

y

每个元素被替换为c*y - s*x.

 

cblas_?rotg

计算Givens旋转.

 

函数定义

void cblas_srotg (float *a, float *b, float *c, float *s); void cblas_drotg (double *a, double *b, double *c, double *s); void cblas_crotg (void *a, const void *b, float *c, void *s); void cblas_zrotg (void *a, const void *b, double *c, void *s);

包含头文件

  • mkl.h

描述

 
已知一点的笛卡尔坐标(a, b), 返回参数c,s,r,z对应Givens旋转,c,s对应的是矩阵(unitary matrix),类似于:

参数z这样定义 : 如果|a|>|b|,那么z=s,否则如果c≠0,那么z=1/c,否则z=1

输入参数

 

a

px坐标

b

点p的y坐标

 

输出参数

 

a

Givens 旋转参数r.

b

Givens 旋转参数c.

c

Givens 旋转参数c.

s

Givens 旋转参数s.

 

cblas_?rotm

修正绕平面是一点的Givens旋转.

 

函数定义

void cblas_srotm (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float *param);

void cblas_drotm (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double *param);

包含头文件

  • mkl.h

 

描述

给定两个向量x和y,将这两个向量的每个向量元素替换如下:

i=1 - n, 其中H为经过修改的Givens变换矩阵,值存储在parm[1]至parm[4]中.

输入参数

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

param

数组大小5。

参数数组的元素是:参数[0]一个开关标志。param[1-4]包含h11、h21、h12、h22,分别是H数组的分量。

根据flag的值,H的分量设置如下:

 

在最后三种情况下,根据flag的值假设矩阵项1.0、-1.0和0.0,不需要在参数向量中设置。

 

输出参数

 

x

将每个元素x[i]替换为h11*x[i] + h12*y[i]

y

将每个元素y[i]替换为h21*x[i] + h22*y[i]

cblas_?rotmg

计算修正Givens旋转的参数.

 

 

函数定义

void cblas_srotmg (float *d1, float *d2, float *x1, const float y1, float *param);

void cblas_drotmg (double *d1, double *d2, double *x1, const double y1, double *param);

包含头文件

  • mkl.h

描述

给定输入向量的笛卡尔坐标(x1,y1)(x1,y1),计算将结果向量的y置零时候,计算得到的Givens旋转矩阵H:

输入参数

d1

提供输入向量的x坐标的比例因子.

d2

提供输入向量的y坐标的比例因子.

x1

提供输入向量的x坐标.

y1

提供输入向量的y坐标.

 

输出参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

param

数组大小5。

参数数组的元素是:参数[0]一个开关标志。param[1-4]包含h11、h21、h12、h22,分别是H数组的分量。

根据flag的值,H的分量设置如下:

 

在最后三种情况下,根据flag的值假设矩阵项1.0、-1.0和0.0,不需要在参数向量中设置。

 

cblas_?scal

计算向量与标量的乘积.

 

函数定义

void cblas_sscal (const MKL_INT n, const float a, float *x, const MKL_INT incx); void cblas_dscal (const MKL_INT n, const double a, double *x, const MKL_INT incx); void cblas_cscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx); void cblas_zscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx); void cblas_csscal (const MKL_INT n, const float a, void *x, const MKL_INT incx); void cblas_zdscal (const MKL_INT n, const double a, void *x, const MKL_INT incx);

包含头文件

  • mkl.h

描述

?scal执行定义为的向量操作

x = a*x                                                                                                                                                        

a是标量, x是一个n元向量.

输入参数

n

指定向量x中的元素数量.

a

指定标量a.

x

数组,大小至少(1 + (n -1)*abs(incx)).

incx

指定x元素的增量.

 

输出参数

                                                 

x

更新后的向量x.

 

 

 

 

cblas_?swap

交换一个向量和另一个向量.

 

函数定义

void cblas_sswap (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy);

void cblas_dswap (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy);

void cblas_cswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT

incy);

void cblas_zswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT

incy);

 

包含头文件

  • mkl.h

描述

给定两个向量x和y, ?swap返回交换后的向量y和x,彼此替换.

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

y

数组,大小至少(1 + (n-1)*abs(incy))

incy

指定y元素的增量.

输出参数

x

包含合成向量x,即输入向量y。

y

包含合成向量y,即输入向量x。

 

cblas_i?amax

查找绝对值最大的元素的索引.

 

函数定义

CBLAS_INDEX cblas_isamax (const MKL_INT n, const float *x, const MKL_INT incx); CBLAS_INDEX cblas_idamax (const MKL_INT n, const double *x, const MKL_INT incx); CBLAS_INDEX cblas_icamax (const MKL_INT n, const void *x, const MKL_INT incx); CBLAS_INDEX cblas_izamax (const MKL_INT n, const void *x, const MKL_INT incx);

包含头文件

  • mkl.h

 

 

 

描述

已知向量x, 给定向量x,函数i?amax返回实数域中绝对值最大的向量元素x[i]的位置,或者返回复数域|Re(x[i])|+|Im(x[i])|和的最大值

如果n非正,则返回.

如果向量中有好几个位置的值等于最大元素,第一个位置将被返回

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

返回值

返回最大值元素的位置,比如x[index−1]具有最大的绝对值.

cblas_i?amin

查找绝对值最小的元素的索引.

 

函数定义

CBLAS_INDEX cblas_isamin (const MKL_INT n, const float *x, const MKL_INT incx); CBLAS_INDEX cblas_idamin (const MKL_INT n, const double *x, const MKL_INT incx); CBLAS_INDEX cblas_icamin (const MKL_INT n, const void *x, const MKL_INT incx); CBLAS_INDEX cblas_izamin (const MKL_INT n, const void *x, const MKL_INT incx);

包含头文件

  • mkl.h

描述

已知向量x, i?amin返回的是向量的最小绝对值的位置.

输入参数

 

n

指定向量x和y中的元素数量.

x

数组,大小至少为(1 + (n-1)*abs(incx)).

incx

指定x元素的增量.

返回值

绝对值最小元素位置的索引,比如x[index−1]具有最小的绝对值.

cblas_?cabs1

计算复数的绝对值.

 

函数定义

float cblas_scabs1 (const void *z);

double cblas_dcabs1 (const void *z);

包含头文件

  • mkl.h

描述

?cabs1  执行定义为的操作

res=|Re(z)|+|Im(z)|,  

where z是一个标量,res是一个包含复数z的绝对值的值.

输入参数

 

z

标量.

 

返回值

复数z的绝对值

你可能感兴趣的:(MKL函数库学习(2)之BLAS Level 1 函数库)