cuBLAS ¶
提供基本的线性代数积木。请参阅NVIDIA cuBLAS。
cuBLAS 绑定提供了一个接受 NumPy 数组和 Numba 的 CUDA 设备数组的接口。绑定会根据需要自动将 NumPy 数组参数传输到设备。这种自动传输可能会产生一些不必要的传输,因此通过将 NumPy 阵列手动传输到设备阵列并在可能的情况下使用 cuBLAS 操作设备阵列,可能会获得最佳性能。
与 BLAS C 和 Fortran API 不同,没有使用特殊的命名约定来标识数据类型。作为 cuBLAS C API 一部分的数组存储信息的参数也不是必需的,因为 NumPy 数组和设备数组包含此信息。
所有函数都通过accelerate.cuda.blas.Blas
类访问:
-
类
accelerate.cuda.blas.
Blas
( *args , **kws ) ¶ 所有 BLAS 子程序都在 Blas 对象下可用。
参数: 流- 可选。一个 CUDA 流。 -
amax
( x ) ¶ 与 np.argmax(x) 相同
-
amin
( x ) ¶ 与 np.argmin(x) 相同
-
asum
( x ) ¶ 与 np.sum(x) 相同
-
axpy
( alpha , x , y ) ¶ 与 y = alpha * x + y 相同
-
dgmm
( side , m , n , A:r , x:r , C:w ) ¶
-
dot
( x , y ) ¶ 与 np.dot 相同
-
dotc
( x , y ) ¶ 与 np.vdot 相同
-
gbmv
( trans , m , n , kl , ku , alpha , A:r , x:r , beta , y:w ) ¶
-
geam
( transa , transb , m , n , alpha , A:r , beta , B:r , C:w ) ¶
-
gemm
( transa , transb , m , n , k , alpha , A:r , B:r , beta , C:w ) ¶
-
gemv
( trans , m , n , alpha , A:r , x:r , beta , y:w ) ¶
-
ger
( m , n , alpha , x:r , y:r , A:w ) ¶
-
gerc
( m , n , alpha , x:r , y:r , A:w ) ¶
-
geru
( m , n , alpha , x:r , y:r , A:w ) ¶
-
hbmv
( uplo , n , k , alpha , A:r , x:r , beta , y:w ) ¶
-
hemm
( side , uplo , m , n , alpha , A:r , B:r , beta , C:w ) ¶
-
hemv
( uplo , n , alpha , A:r , x:r , beta , y:w ) ¶
-
her
( uplo , n , alpha , x:r , A:w ) ¶
-
her2
( uplo , n , alpha , x:r , y:r , A:w ) ¶
-
herk
( uplo , trans , n , k , alpha , A:r , beta , C:w ) ¶
-
hpmv
( uplo , n , alpha , AP:r , x:r , beta , y:w ) ¶
-
hpr
( uplo , n , alpha , x:r , AP:w ) ¶
-
hpr2
( uplo , n , alpha , x:r , y:r , A:w ) ¶
-
nrm2
( x ) ¶ 与 np.linalg.norm 相同
-
rot
( x , y , c , s ) ¶ 同 x, y = c * x + s * y, -s * x + c * y
-
rotg
( a , b ) ¶ 给定列向量 (a, b) 计算给定的旋转矩阵。返回 r、z、c、s。
r — r = a ** 2 + b ** 2 z — 用于恢复 c 和 s。
- 如果 abs(z) < 1:
- c, s = 1 - z ** 2, z
- elif abs(z) == 1:
- c, s = 0, 1
- 别的:
- c, s = 1 / z, 1 - z ** 2
c — 旋转矩阵的余弦元素。s — 旋转矩阵的正弦元素。
-
rotm
( x , y ,参数) ¶ 应用修改后的 Givens 变换。
x, y = h11 * x + h12 * y, h21 * x + h22 * y
参数 — [flag, h11, h21, h12, h22]
有关详细信息,请参阅 cuBLAS 文档。
-
rotmg
( d1 , d2 , x1 , y1 ) ¶ 构造修改后的 Givens 变换。
返回可在 rotm 中使用的参数。
有关详细信息,请参阅 cuBLAS 文档。
-
sbmv
( uplo , n , k , alpha , A:r , x:r , beta , y:w ) ¶
-
scal
(阿尔法, x ) ¶ 与 x = alpha * x 相同
-
spmv
( uplo , n , alpha , AP:r , x:r , beta , y:w ) ¶
-
spr
( uplo , n , alpha , x:r , AP:w ) ¶
-
spr2
( uplo , n , alpha , x:r , y:r , A:w ) ¶
-
symm
( side , uplo , m , n , alpha , A:r , B:r , beta , C:w ) ¶
-
symv
( uplo , n , alpha , A:r , x:r , beta , y:w ) ¶
-
syr
( uplo , n , alpha , x:r , A:w ) ¶
-
syr2
( uplo , n , alpha , x:r , y:r , A:w ) ¶
-
syrk
( uplo , trans , n , k , alpha , A:r , beta , C:w ) ¶
-
tbmv
( uplo , trans , diag , n , k , A:r , x:w ) ¶
-
tbsv
( uplo , trans , diag , n , k , A:r , x:w ) ¶
-
tpmv
( uplo , trans , diag , n , AP:r , x:w ) ¶
-
tpsv
( uplo , trans , diag , n , AP:r , x:w ) ¶
-
trmm
( side , uplo , trans , diag , m , n , alpha , A:r , B:r , C:w ) ¶
-
trmv
( uplo , trans , diag , n , A:r , x:w ) ¶
-
trsm
( side , uplo , trans , diag , m , n , alpha , A:r , B:w ) ¶
-
trsv
( uplo , trans , diag , n , A:r , x:w ) ¶
-
BLAS 级别 1 ¶
-
accelerate.cuda.blas.Blas.
nrm2
( x ) 计算数组x的 L2 范数。与numpy.linalg.norm(x)相同。
参数: x ( array ) – 输入向量 返回: 结果规范。
-
accelerate.cuda.blas.Blas.
dot
( x , y ) 计算数组x和数组y的点积。与np.dot(x, y) 相同。
参数: - x (数组) – 向量
- y (数组) – 向量
返回: x和y 的点积
-
accelerate.cuda.blas.Blas.
dotc
( x , y ) 使用向量元素的共轭计算仅用于复数 dtype的数组x和数组y的点积。与np.vdot(x, y) 相同。
参数: - x (数组) – 向量
- y (数组) – 向量
返回: x和y 的点积
-
accelerate.cuda.blas.Blas.
scal
(阿尔法, x ) 按 alpha 就地缩放x。与x = alpha * x 相同
参数: - alpha – 标量
- x (数组) – 向量
-
accelerate.cuda.blas.Blas.
axpy
(阿尔法, x ) 原地计算y = alpha * x + y。
参数: - alpha – 标量
- x (数组) – 向量
-
accelerate.cuda.blas.Blas.
amax
( x ) 查找数组x 中第一个最大元素的索引。与np.argmax(x)相同
参数: x (数组) – 向量 返回: 索引(从 0 开始)。
-
accelerate.cuda.blas.Blas.
amin
( x ) 查找数组x 中第一个最大元素的索引。与np.argmin(x)相同
参数: x (数组) – 向量 返回: 索引(从 0 开始)。
-
accelerate.cuda.blas.Blas.
asum
( x ) 计算数组x中所有元素的总和。
参数: x (数组) – 向量 返回: x.sum()
-
accelerate.cuda.blas.Blas.
rot
( x , y , c , s ) 对向量元素x和y应用由余弦元素c和正弦元素s指定的 Givens 旋转矩阵。
同x, y = c * x + s * y, -s * x + c * y
参数: - x (数组) – 向量
- y (数组) – 向量
-
accelerate.cuda.blas.Blas.
rotg
( a , b ) 使用列向量 (a, b) 构造 Givens 旋转矩阵。
参数: - a – 列向量的第一个元素
- b – 列向量的第二个元素
返回: 元组 (r, z, c, s)
r – r = a**2 + b**2
- z – 用于重建c和s。
有关详细信息,请参阅 cuBLAS 文档。
c – 余弦元素。
s – 正弦元素。
-
accelerate.cuda.blas.Blas.
rotm
( x , y ,参数) 就地应用修改后的 Givens 变换。
和...一样:
参数 = 标志, h11 , h21 , h12 , h22 x [ i ] = h11 * x [ i ] + h12 * y [ i ] y [ i ] = h21 * x [ i ] + h22 * y [ i ]
有关flag的使用,请参阅 cuBLAS 文档。
参数: - x (数组) – 向量
- y (数组) – 向量
-
accelerate.cuda.blas.Blas.
rotmg
( d1 , d2 , x1 , y1 ) 构造修改后的 Givens 变换H,将列向量(d1 * x1, d2 * y1)的第二个条目清零。
参数: - d1 – 输入向量 x 坐标的缩放因子
- d2 – 输入向量 y 坐标的缩放因子
- x1 – 输入向量的 x 坐标
- y1 – 输入向量的 y 坐标
返回: 可用于rotm 的一维数组。第一个元素是rotm的标志。其余元素对应于H的h11, h21, h12, h22 元素。
BLAS 级别 2 ¶
所有 2 级例程都遵循以下所有参数的命名约定:
- A、B、C、AP——(二维数组)矩阵参数。
AP意味着带状矩阵的打包存储。
x, y, z –(一维数组)向量参数。
alpha, beta –(标量)可以是浮点数或复数,具体取决于。
m –(标量)矩阵A的行数。
- n –(标量)矩阵A的列数。如果不需要m,
n也表示矩阵A的行数;因此,意味着一个方阵。
- trans, transa, transb –(字符串)
选择要应用于矩阵的操作op:
- 'N': op(X) = X,恒等运算;
- 'T': op(X) = X**T,转置;
- 'C': op(X) = X**H,共轭转置。
trans仅适用于唯一的矩阵参数。 transa和transb 分别适用于矩阵A和矩阵B。
- uplo –(字符串)可以是 'U' 用于填充上三角矩阵;或 'L' 表示
填充下三角矩阵。
diag – (boolean) 矩阵对角线是否有单位元素。
- mode – (string) 'L' 表示矩阵在方程的左边。
'R' 表示矩阵在等式的右侧。
笔记
最后一个数组参数总是被结果覆盖。
-
accelerate.cuda.blas.Blas.
gbmv
( trans , m , n , kl , ku , alpha , A , x , beta , y ) 带状矩阵向量乘法y = alpha * op(A) * x + beta * y其中 A有kl 条子对角线和ku 条超对角线。
-
accelerate.cuda.blas.Blas.
gemv
( trans , m , n , alpha , A , x , beta , y ) 矩阵向量乘法y = alpha * op(A) * x + beta * y
-
accelerate.cuda.blas.Blas.
trmv
( uplo , trans , diag , n , A , x ) 三角矩阵向量乘法x = op(A) * x
-
accelerate.cuda.blas.Blas.
tbmv
( uplo , trans , diag , n , k , A , x ) 三角带状矩阵向量x = op(A) * x
-
accelerate.cuda.blas.Blas.
tpmv
( uplo , trans , diag , n , AP , x ) 三角压缩矩阵向量乘法x = op(A) * x
-
accelerate.cuda.blas.Blas.
trsv
( uplo , trans , diag , n , A , x ) 求解具有单个右手边的三角形线性系统。 op(A) * x = b
-
accelerate.cuda.blas.Blas.
tpsv
( uplo , trans , diag , n , AP , x ) 求解具有单个右手边的紧缩三角形线性系统。 op(A) * x = b
-
accelerate.cuda.blas.Blas.
tbsv
( uplo , trans , diag , n , k , A , x ) 求解具有单个右手边的三角带状线性系统。 op(A) * x = b
-
accelerate.cuda.blas.Blas.
symv
( uplo , n , alpha , A , x , beta , y ) 对称矩阵向量乘法y = alpha * A * x + beta * y
-
accelerate.cuda.blas.Blas.
hemv
( uplo , n , alpha , A , x , beta , y ) Hermitian 矩阵向量乘法y = alpha * A * x + beta * y
-
accelerate.cuda.blas.Blas.
sbmv
( uplo , n , k , alpha , A , x , beta , y ) 对称带状矩阵向量乘法 y = alpha * A * x + beta * y
-
accelerate.cuda.blas.Blas.
hbmv
( uplo , n , k , alpha , A , x , beta , y ) Hermitian 带状矩阵向量乘法 y = alpha * A * x + beta * y
-
accelerate.cuda.blas.Blas.
spmv
( uplo , n , alpha , AP , x , beta , y ) 对称压缩矩阵向量乘法y = alpha * A * x + beta * y
-
accelerate.cuda.blas.Blas.
hpmv
( uplo , n , alpha , AP , x , beta , y ) Hermitian 压缩矩阵向量乘法y = alpha * A * x + beta * y
-
accelerate.cuda.blas.Blas.
ger
( m , n , alpha , x , y , A ) rank-1 更新A := alpha * x * y ** T + A
-
accelerate.cuda.blas.Blas.
geru
( m , n , alpha , x , y , A ) rank-1 更新A := alpha * x * y ** T + A
-
accelerate.cuda.blas.Blas.
gerc
( m , n , alpha , x , y , A ) rank-1 更新A := alpha * x * y ** H + A
-
accelerate.cuda.blas.Blas.
syr
( uplo , n , alpha , x , A ) 对称秩 1 操作A := alpha * x * x ** T + A
-
accelerate.cuda.blas.Blas.
her
( uplo , n , alpha , x , A ) Hermitian rank 1 operation A := alpha * x * x ** H + A
-
accelerate.cuda.blas.Blas.
spr
( uplo , n , alpha , x , AP ) 对称秩 1 运算A := alpha * x * x ** T + A
-
accelerate.cuda.blas.Blas.
hpr
( uplo , n , alpha , x , AP ) Hermitian rank 1 operation A := alpha * x * x ** H + A
-
accelerate.cuda.blas.Blas.
syr2
( uplo , n , alpha , x , y , A ) 对称秩 2 更新A = alpha * x * y ** T + y * x ** T + A
-
accelerate.cuda.blas.Blas.
her2
( uplo , n , alpha , x , y , A ) Hermitian rank-2 更新A = alpha * x * y ** H + alpha * y * x ** H + A
-
accelerate.cuda.blas.Blas.
spr2
( uplo , n , alpha , x , y , A ) 压缩对称秩 2 更新A = alpha * x * y ** T + y * x ** T + A
-
accelerate.cuda.blas.Blas.
hpr2
( uplo , n , alpha , x , y , A ) 打包 Hermitian rank-2 更新A = alpha * x * y ** H + alpha * y * x ** H + A
BLAS 级别 3 ¶
所有级别 3 例程都遵循与级别 2 例程相同的参数命名约定。
-
accelerate.cuda.blas.Blas.
gemm
( transa , transb , m , n , k , alpha , A , B , beta , C ) 矩阵-矩阵乘法C = alpha * op(A) * op(B) + beta * C
-
accelerate.cuda.blas.Blas.
syrk
( uplo , trans , n , k , alpha , A , beta , C ) 对称秩 - k 更新C = alpha * op(A) * op(A) ** T + beta * C
-
accelerate.cuda.blas.Blas.
herk
( uplo , trans , n , k , alpha , A , beta , C ) Hermitian rank-k 更新C = alpha * op(A) * op(A) ** H + beta * C
-
accelerate.cuda.blas.Blas.
symm
(侧面,uplo,m,n,alpha,A,B,beta,C ) 对称矩阵-矩阵乘法:
if side == 'L' : C = alpha * A * B + beta * C else : # side == 'R' C = alpha * B * A + beta * C
-
accelerate.cuda.blas.Blas.
hemm
(侧面,uplo,m,n,alpha,A,B,beta,C ) 厄米矩阵-矩阵乘法:
if side == 'L' : C = alpha * A * B + beta * C else : # side == 'R': C = alpha * B * A + beta * C
-
accelerate.cuda.blas.Blas.
trsm
( side , uplo , trans , diag , m , n , alpha , A , B ) 求解具有多个右手边的三角线性系统:
if side == 'L' : op ( A ) * X = alpha * B else : # side == 'R' X * op ( A ) = alpha * B
-
accelerate.cuda.blas.Blas.
trmm
( side , uplo , trans , diag , m , n , alpha , A , B , C ) 三角矩阵-矩阵乘法:
如果边 == ':' C = alpha * op(A) * B 其他:#边=='R' C = alpha * B * op(A)
-
accelerate.cuda.blas.Blas.
dgmm
(边, m , n , A , x , C ) 矩阵-矩阵乘法:
if mode == 'R' : C = A * x * diag ( X ) else : # mode == 'L' C = diag ( X ) * x * A
-
accelerate.cuda.blas.Blas.
geam
( transa , transb , m , n , alpha , A , beta , B , C ) 矩阵-矩阵加法/转置C = alpha * op(A) + beta * op(B)