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);
包含头文件
描述
?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);
包含头文件
描述
?axpy执行向量-向量操作定义为
y := a*x + y
a是标量
x和y都是向量,每个向量的元素个数都等于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);
包含头文件
描述
?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);
包含头文件
描述
?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);
包含头文件
描述
?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);
包含头文件
描述
?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);
包含头文件
描述
?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 |
包含x和y点积的结果,如果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);
包含头文件
描述
?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);
包含头文件
描述
给定两个复向量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);
包含头文件
描述
已知一点的笛卡尔坐标(a, b), 返回参数c,s,r,z对应Givens旋转,c,s对应的是矩阵(unitary matrix),类似于:
参数z这样定义 : 如果|a|>|b|,那么z=s,否则如果c≠0,那么z=1/c,否则z=1
输入参数
a |
点p的x坐标 |
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);
包含头文件
描述
给定两个向量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);
包含头文件
描述
给定输入向量的笛卡尔坐标(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);
包含头文件
描述
?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);
包含头文件
描述
给定两个向量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);
包含头文件
描述
已知向量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);
包含头文件
描述
已知向量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);
包含头文件
描述
?cabs1 执行定义为的操作
res=|Re(z)|+|Im(z)|,
where z是一个标量,res是一个包含复数z的绝对值的值.
输入参数
z |
标量. |
返回值
复数z的绝对值