一、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_sub | c,z | 实现复数向量的点积 |
cblas_?dotu_sub | c,z | 实现复数向量的点积 |
cblas_?nrm2 | s,d,cs,dz | 向量的长度 |
cblas_?rot | s,d,sc,dz | 实现平面的转换 |
cblas_?rotg | s,d,c,z | 建立平面的转换 |
cblas_?rotm | s,d | 实现改良后平面的转换 |
cblas_?rotmg | s,d | 建立改良后平面的转换 |
cblas_?scal | s,d,c,z,sc,dz | 实现向量的缩放 |
cblas_?swap | s,d,c,z | 实现向量的交换 |
cblas_i?amax | s,d,c,z |
二、BLAS level 1 函数接口详细说明
- cblas_?asum
计算向量元素值模的总和(欧几里德 1-范数)
float cblas_sasum(const int N, const float *X, const int incX);
double cblas_dasum(const int N, const double *X, const int incX);
float cblas_scasum(const int N, const void *X, const int incX);
double cblas_dzasum(const int N, const void *X, const int incX);
输入参数
N ------- 向量 X 的元素个数
X ------- 用数组表示的向量
incX --- 指定索引向量 X 的增量返回值
返回向量的所有元素的实部和虚部的模的和。
- cblas_?axpy
向量缩放后加上另一个向量
void cblas_saxpy(const int N, const float alpha, const float *X,
const int incX, float *Y, const int incY);
void cblas_daxpy(const int N, const double alpha, const double *X,
const int incX, double *Y, const int incY);
void cblas_caxpy(const int N, const void *alpha, const void *X,
const int incX, void *Y, const int incY);
void cblas_zaxpy(const int N, const void *alpha, const void *X,
const int incX, void *Y, const int incY);
输入参数
N -------- 向量 X 和 Y 的元素个数
alpha --- 缩放向量 X 的标量
X -------- 用数组表示待缩放的向量
incX ---- 指定索引向量 X 的增量
Y -------- 用数组表示的向量
incY ---- 指定索引向量 Y 的增量输出参数
Y -------- 用数组表示待刷新的向量
- cblas_?copy
实现向量的拷贝
void cblas_scopy(const int N, const float *X, const int incX,
float *Y, const int incY);
void cblas_dcopy(const int N, const double *X, const int incX,
double *Y, const int incY);
void cblas_ccopy(const int N, const void *X, const int incX,
void *Y, const int incY);
void cblas_zcopy(const int N, const void *X, const int incX,
void *Y, const int incY);
输入参数
N -------- 向量 X 和 Y 的元素个数
X -------- 用数组表示被拷贝的向量
incX ---- 指定索引向量 X 的增量
Y -------- 用数组表示的向量
incY ---- 指定索引向量 Y 的增量输出参数
Y -------- 用数组表示待刷新的向量
- cblas_?dot
实现实数向量的点积
float cblas_sdot(const int N, const float *X, const int incX,
const float *Y, const int incY);
double cblas_ddot(const int N, const double *X, const int incX,
const double *Y, const int incY);
输入参数
N -------- 向量 X 和 Y 的元素个数
X -------- 用数组表示被拷贝的向量
incX ---- 指定索引向量 X 的增量
Y -------- 用数组表示的向量
incY ---- 指定索引向量 Y 的增量返回值
点积后的结果
- cblas_?sdot
float cblas_sdsdot(const int N, const float alpha, const float *X,
const int incX, const float *Y, const int incY);
double cblas_dsdot(const int N, const float *X, const int incX, const float *Y,
const int incY);
- cblas_?dotc_sub
实现复数向量的点积
void cblas_cdotc_sub(const int N, const void *X, const int incX,
const void *Y, const int incY, void *dotc);
void cblas_zdotc_sub(const int N, const void *X, const int incX,
const void *Y, const int incY, void *dotc);
- cblas_?dotu_sub
实现复数向量的点积
void cblas_cdotu_sub(const int N, const void *X, const int incX,
const void *Y, const int incY, void *dotu);
void cblas_zdotu_sub(const int N, const void *X, const int incX,
const void *Y, const int incY, void *dotu);
- cblas_?nrm2
向量的长度
float cblas_snrm2(const int N, const float *X, const int incX);
double cblas_dnrm2(const int N, const double *X, const int incX);
float cblas_scnrm2(const int N, const void *X, const int incX);
double cblas_dznrm2(const int N, const void *X, const int incX);
- cblas_?rot
实现平面的转换
void cblas_srot(const int N, float *X, const int incX,
float *Y, const int incY, const float c, const float s);
void cblas_drot(const int N, double *X, const int incX,
double *Y, const int incY, const double c, const double s);
- cblas_?rotg
建立平面的转换
void cblas_srotg(float *a, float *b, float *c, float *s);
void cblas_drotg(double *a, double *b, double *c, double *s);
- cblas_?rotm
实现改良后平面的转换
void cblas_srotm(const int N, float *X, const int incX,
float *Y, const int incY, const float *P);
void cblas_drotm(const int N, double *X, const int incX,
double *Y, const int incY, const double *P);
- cblas_?rotmg
建立改良后平面的转换
void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P);
void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P);
- cblas_?scal
实现向量的缩放
void cblas_sscal(const int N, const float alpha, float *X, const int incX);
void cblas_dscal(const int N, const double alpha, double *X, const int incX);
void cblas_cscal(const int N, const void *alpha, void *X, const int incX);
void cblas_zscal(const int N, const void *alpha, void *X, const int incX);
void cblas_csscal(const int N, const float alpha, void *X, const int incX);
void cblas_zdscal(const int N, const double alpha, void *X, const int incX);
- cblas_?swap
实现向量的交换
void cblas_sswap(const int N, float *X, const int incX,
float *Y, const int incY);
void cblas_dswap(const int N, double *X, const int incX,
double *Y, const int incY);
void cblas_cswap(const int N, void *X, const int incX,
void *Y, const int incY);
void cblas_zswap(const int N, void *X, const int incX,
void *Y, const int incY);
- cblas_i?amax
CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX);
CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX);
CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX);
CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX);
此文档尚未写完,我会持续更新