CUDA矩阵运算之cuBLAS库的常用函数
对于矩阵运算,我们使用`GPU`会更加快速,因为`GPU`可以并行计算,在使用`CUDA`的时候,编写核函数会有点麻烦,于是,有一个`cuBLAS`库可以使用,上面包含了一些基本的矩阵运算函数。
前言
对于矩阵运算,我们使用GPU
会更加快速,因为GPU
可以并行计算,在使用CUDA
的时候,编写核函数会有点麻烦,于是,有一个cuBLAS
库可以使用,上面包含了一些基本的矩阵运算函数。
根据文档,可以看到一些关于cuBLAS
的函数,以下是根据文档第二章
加上自己的理解所编写的一些函数的简介目录。
为了方面及时查看有哪些库可以使用,我就写下这篇博客,如果有错误,谢谢大家的指出!
Chapter 2 CUBLAS by example
2.1 示例的一般说明
所有子程序都有四个版本对应的四种数据类型
- s, S: float
- d, D: double
- c, C: cuComplex
- z, Z: cuDoubleComplex
2.2 CUBLAS level-1. 标量-向量的基本操作
2.2.1 cublasIsamax, cublasIsamin
此函数查找具有最大/最小幅度的数组元素的最小索引。
2.2.3 cublasSasum
绝对值之和
2.2.5 cublasSaxpy
计算αx + y
,向量x
乘上标量α
加上向量y
2.2.7 cublasScopy
把x
拷贝到y
上,向量操作。
2.2.9 cublasSdot
点积: 计算向量 x 和 y 的点积
x
⋅
y
=
x
0
y
0
+
.
.
.
+
x
n
−
1
y
n
−
1
x·y=x_0y_0+...+x_{n-1}y_{n-1}
x⋅y=x0y0+...+xn−1yn−1
2.2.11 cublasSnrm2
计算向量x
的欧几里得范数:
∣
∣
x
∣
∣
=
∣
x
0
∣
2
+
.
.
.
+
∣
x
n
−
1
∣
2
||x||=\sqrt{{|x_0|}^2+...+{|x_{n-1}|}^2}
∣∣x∣∣=∣x0∣2+...+∣xn−1∣2
2.2.13 cublasSrot
apply the Givens rotation
2.2.19 cublasSscal
缩放向量:
x
=
α
x
x=\alpha x
x=αx
2.2.21 cublasSswap
交换两个向量:
x
←
y
,
y
←
x
x\leftarrow y,\ \ \ y\leftarrow x
x←y, y←x
2.3 CUBLAS Level-2. 矩阵-向量操作
2.3.1 cublasSgbmv
This function performs the banded matrix-vector multiplication:
y
=
α
o
p
(
A
)
x
+
β
y
y=\alpha \ op(A)x + \beta y
y=α op(A)x+βy
2.3.3 cublasSgemv
矩阵-向量乘法:
y
=
α
o
p
(
A
)
x
+
β
y
y=\alpha \ op(A)x + \beta y
y=α op(A)x+βy
2.3.5 cublasSger
rank-1 update: 列向量和行向量相乘得到矩阵,然后加上一个矩阵:
A
=
α
x
y
T
+
A
o
r
A
=
α
x
y
H
+
A
A=\alpha xy^T + A\ \ \ or\ \ \ A=\alpha xy^H+A
A=αxyT+A or A=αxyH+A
x
和y
都是向量,α
是标量
2.3.7 cublasSsbmv
对称带状矩阵-向量乘法:
y
=
α
A
x
+
B
y
y=\alpha \ Ax+By
y=α Ax+By
A
是对称带状矩阵,x
和y
是向量,
2.3.9 cublasSspmv
对称压缩矩阵-向量乘法:
y
=
α
A
x
+
B
y
y=\alpha \ Ax+By
y=α Ax+By
2.3.11 cublasSspr
对称压缩矩阵rank-1:
A
=
α
x
x
T
+
A
A=\alpha xx^T+A
A=αxxT+A
2.3.13 cublasSspr2
对称压缩矩阵rank-2:
A
=
α
(
x
y
T
+
y
x
T
)
+
A
A=\alpha (xy^T+yx^T)+A
A=α(xyT+yxT)+A
2.3.15 cublasSsymv
对称矩阵向量乘法:
y
=
α
A
x
+
β
y
y=\alpha Ax+\beta y
y=αAx+βy
2.3.17 cublasSsyr
对称矩阵rank-1:
A
=
α
x
x
T
+
A
A=\alpha xx^T+A
A=αxxT+A
2.3.19 cublasSsyr2
对称矩阵rank-2:
A
=
α
(
x
y
T
+
y
x
T
)
+
A
A=\alpha (xy^T+yx^T)+A
A=α(xyT+yxT)+A
2.3.21 cublasStbmv
三角带状矩阵-向量乘法:
x
=
o
p
(
A
)
x
x=op(A)x
x=op(A)x
2.3.23 cublasStbsv
求解三角带状线性系统:
o
p
(
A
)
x
=
b
op(A)x=b
op(A)x=b
求出x
2.3.25 cublasStpmv
三角压缩矩阵-向量乘法:
x
=
o
p
(
A
)
x
x=op(A)x
x=op(A)x
2.3.27 cublasStpsv
求解三角压缩矩阵:
o
p
(
A
)
x
=
b
op(A)x=b
op(A)x=b
求出x
2.3.29 cublasStrmv
三角矩阵-向量乘法:
x
=
o
p
(
A
)
x
x=op(A)x
x=op(A)x
2.3.31 cublasStrsv
求解三角矩阵-向量:
o
p
(
A
)
x
=
b
op(A)x=b
op(A)x=b
求x
2.3.33 cublasChemv
Hermitian 矩阵-向量乘法:
y
=
α
A
x
+
β
y
y=\alpha Ax+\beta y
y=αAx+βy
2.3.35 cublasChbmv
Hermitian 带状矩阵-向量乘法:
y
=
α
A
x
+
β
y
y=\alpha Ax+\beta y
y=αAx+βy
2.3.37 cublasChpmv
Hermitian 压缩矩阵-向量乘法:
y
=
α
A
x
+
β
y
y=\alpha Ax+\beta y
y=αAx+βy
2.3.39 cublasCher
Hermitian 矩阵rank-1:
A
=
α
x
x
H
+
A
A=\alpha x x^H+A
A=αxxH+A
2.3.41 cublasCher2
Hermitian 矩阵rank-2:
A
=
α
x
y
H
+
α
ˉ
y
x
H
+
A
A=\alpha xy^H+\bar{\alpha}yx^H+A
A=αxyH+αˉyxH+A
2.3.43 cublasChpr
压缩Hermitian 矩阵rank-1:
A
=
α
x
x
H
+
A
A=\alpha x x^H+A
A=αxxH+A
2.3.45 cublasChpr2
压缩Hermitian 矩阵rank-2:
A
=
α
x
y
H
+
α
ˉ
y
x
H
+
A
A=\alpha xy^H+\bar{\alpha}yx^H+A
A=αxyH+αˉyxH+A
2.4 CUBLAS Level-3. 矩阵-矩阵操作
2.4.1 cublasSgemm
矩阵乘法:
C
=
α
o
p
(
A
)
o
p
(
B
)
+
β
C
C=\alpha op(A)op(B)+\beta C
C=αop(A)op(B)+βC
2.4.3 cublasSsymm
对称矩阵-矩阵乘法:
C
=
α
A
B
+
β
C
①
C=\alpha AB+\beta C\ ①
C=αAB+βC ①
C = α B A + β C ② C=\alpha BA+\beta C\ ② C=αBA+βC ②
两种情况都可以的
2.4.5 cublasSsyrk
对称rank-k:
C
=
α
o
p
(
A
)
o
p
(
A
)
T
+
β
C
C=\alpha \ op(A)op(A)^T+\beta C
C=α op(A)op(A)T+βC
2.4.7 cublasSsyr2k
对称rank-2k:
C
=
α
(
o
p
(
A
)
o
p
(
B
)
T
+
o
p
(
B
)
o
p
(
A
)
T
)
+
β
C
C=\alpha \ (op(A)op(B)^T+op(B)op(A)^T)+ \beta C
C=α (op(A)op(B)T+op(B)op(A)T)+βC
2.4.9 cublasStrmm
三角矩阵-矩阵乘法:
C
=
α
o
p
(
A
)
B
①
C=\alpha \ op(A)\ B\ ①
C=α op(A) B ①
C = α B o p ( A ) ② C=\alpha \ B\ op(A)\ ② C=α B op(A) ②
2.4.11 cublasStrsm
求解三角矩阵:
o
p
(
A
)
X
=
α
B
①
op(A)\ X=\alpha\ B\ ①
op(A) X=α B ①
X o p ( A ) = α B ② X\ op(A)=\alpha\ B\ ② X op(A)=α B ②
2.4.13 cublasChemm
Hermitian 矩阵-矩阵乘法:
C
=
α
A
B
+
β
C
①
C=\alpha AB+\beta C\ ①
C=αAB+βC ①
C = α B A + β C ② C=\alpha BA+\beta C\ ② C=αBA+βC ②
2.4.15 cublasCherk
Hermitian rank-k:
C
=
α
o
p
(
A
)
o
p
(
A
)
H
+
β
C
C=\alpha \ op(A)op(A)^H+\beta \ C
C=α op(A)op(A)H+β C
2.4.17 cublasCherk2k
Hermitian rank-2k:
C
=
α
o
p
(
A
)
o
p
(
B
)
H
+
α
ˉ
o
p
(
B
)
o
p
(
A
)
H
+
β
C
C=\alpha \ op(A)op(B)^H+\bar{\alpha}\ op(B)op(A)^H+\beta \ C
C=α op(A)op(B)H+αˉ op(B)op(A)H+β C
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)