cuSPARSELt 数据类型#

不透明数据结构#

cusparseLtHandle_t#

该结构体保存 cuSPARSELt 库上下文(设备属性、系统信息等)。
句柄必须分别使用 cusparseLtInit()cusparseLtDestroy() 函数进行初始化和销毁。

cusparseLtMatDescriptor_t#

该结构体捕获矩阵的形状和特征。
它使用 cusparseLtDenseDescriptorInit()cusparseLtStructuredDescriptorInit() 函数进行初始化,并使用 cusparseLtMatDescriptorDestroy() 函数进行销毁。

cusparseLtMatmulDescriptor_t#

该结构体保存矩阵乘法运算的描述。
它使用 cusparseLtMatmulDescriptorInit() 函数进行初始化。

cusparseLtMatmulAlgSelection_t#

该结构体保存矩阵乘法算法的描述。
它使用 cusparseLtMatmulAlgSelectionInit() 函数进行初始化。

cusparseLtMatmulPlan_t#

该结构体保存矩阵乘法执行计划,即执行 cusparseLtMatmul() 操作所需的所有信息。
它分别使用 cusparseLtMatmulPlanInit()cusparseLtMatmulPlanDestroy() 函数进行初始化和销毁。

枚举器#

cusparseLtSparsity_t#

该枚举器指定结构化矩阵的稀疏度,如下所示

sparsity\ ratio = \frac{nnz}{num\_rows * num\_cols}

描述

CUSPARSELT_SPARSITY_50_PERCENT

50% 稀疏度

- paired 4:8 用于 e2m1 - 2:4 用于 half, bfloat16, int, int8, e4m3, e5m2

- 1:2 用于 float

稀疏度属性在 cusparseLtStructuredDescriptorInit() 函数中使用。

cusparseComputeType#

该枚举器指定矩阵的计算精度模式

描述

CUSPARSE_COMPUTE_32I

- 矩阵 A 和 B 的逐元素乘法以及中间值的累加以 32 位整数精度执行。

- Alpha 和 beta 系数以及尾声以单精度浮点执行。

- 尽可能使用 Tensor Cores。

CUSPARSE_COMPUTE_32F

- 矩阵 A 和 B 的逐元素乘法以及中间值的累加以单精度浮点执行。

- Alpha 和 beta 系数以及尾声以单精度浮点执行。

- 尽可能使用 Tensor Cores。

CUSPARSE_COMPUTE_16F

- 矩阵 A 和 B 的逐元素乘法以及中间值的累加以半精度浮点执行。

- Alpha 和 beta 系数以及尾声以单精度浮点执行。

- 尽可能使用 Tensor Cores。

计算精度在 cusparseLtMatmulDescriptorInit() 函数中使用。

cusparseLtMatDescAttribute_t#

该枚举器指定矩阵描述符的附加属性

描述

CUSPARSELT_MAT_NUM_BATCHES

批处理中矩阵的数量

CUSPARSELT_MAT_BATCH_STRIDE

批处理中连续矩阵之间的步幅,以矩阵元素表示

算法枚举器在 cusparseLtMatDescSetAttribute()cusparseLtMatDescGetAttribute() 函数中使用。

cusparseLtMatmulDescAttribute_t#

该枚举器指定矩阵乘法描述符的附加属性

类型

默认值

描述

CUSPARSELT_MATMUL_ACTIVATION_RELU

int 0: false, true 否则

false

ReLU 激活函数

CUSPARSELT_MATMUL_ACTIVATION_RELU_UPPERBOUND

float

inf

ReLU 激活函数的上限

CUSPARSELT_MATMUL_ACTIVATION_RELU_THRESHOLD

float

0.0f

ReLU 激活函数的下限阈值

CUSPARSELT_MATMUL_ACTIVATION_GELU

int 0: false, true 否则

false

启用/禁用 GeLU 激活函数。GeLU 激活函数仅在以下情况下可用
  • INT8 输入, INT8 输出, INT32 Tensor Core 计算内核

  • E4M3 输入, E4M3/BF16 输出, FP32 Tensor Core 计算内核

  • E5M2 输入, E5M2/BF16 输出, FP32 Tensor Core 计算内核

  • E2M1 输入, E2M1/BF16 输出, FP32 Tensor Core 计算内核

CUSPARSELT_MATMUL_ACTIVATION_GELU_SCALING

float

1.0f

GeLU 激活函数的缩放系数。它暗示 CUSPARSELT_MATMUL_ACTIVATION_GELU

CUSPARSELT_MATMUL_ALPHA_VECTOR_SCALING

int 0: false, true 否则

false

启用/禁用 alpha 向量(每通道)缩放

CUSPARSELT_MATMUL_BETA_VECTOR_SCALING

int 0: false, true 否则

false

启用/禁用 beta 向量(每通道)缩放。CUSPARSELT_MATMUL_BETA_VECTOR_SCALING 暗示 CUSPARSELT_MATMUL_ALPHA_VECTOR_SCALING

CUSPARSELT_MATMUL_BIAS_POINTER

void*

NULL (禁用)

偏差指针。偏差向量的大小必须等于输出矩阵 (D) 的行数。偏差向量的数据类型与矩阵 C 的数据类型相同,但以下情况除外

  • INT8 输入, INT8/INT32 输出, INT32 Tensor Core 计算内核

  • INT8 输入, FP16/BF16 输出, pre-SM 9.0 上的 INT32 Tensor Core 计算内核

在这些情况下,偏差的数据类型为 FP32

CUSPARSELT_MATMUL_BIAS_STRIDE

int64_t

0 (禁用)

连续偏差向量之间的偏差步幅。0 表示广播第一个偏差向量

CUSPARSELT_MATMUL_SPARSE_MAT_POINTER

void*

NULL (禁用)

指向剪枝稀疏矩阵的指针。

CUSPARSELT_MATMUL_A_SCALE_MODE

cublasLtMatmulMatrixScale_t

CUSPARSELT_MATMUL_SCALE_NONE

缩放模式,定义如何解释矩阵 A 的矩阵缩放因子。

CUSPARSELT_MATMUL_B_SCALE_MODE

cublasLtMatmulMatrixScale_t

CUSPARSELT_MATMUL_SCALE_NONE

缩放模式,定义如何解释矩阵 B 的矩阵缩放因子。

CUSPARSELT_MATMUL_C_SCALE_MODE

cublasLtMatmulMatrixScale_t

CUSPARSELT_MATMUL_SCALE_NONE

缩放模式,定义如何解释矩阵 C 的矩阵缩放因子。

CUSPARSELT_MATMUL_D_SCALE_MODE

cublasLtMatmulMatrixScale_t

CUSPARSELT_MATMUL_SCALE_NONE

缩放模式,定义如何解释矩阵 D 的矩阵缩放因子。

CUSPARSELT_MATMUL_D_OUT_SCALE_MODE

cublasLtMatmulMatrixScale_t

CUSPARSELT_MATMUL_SCALE_NONE

缩放模式,定义如何解释矩阵 D 的输出矩阵缩放因子。

CUSPARSELT_MATMUL_A_SCALE_POINTER

void*

NULL

指向缩放因子值的指针,该值将矩阵 A 中的数据转换为计算数据类型范围。缩放因子必须与计算类型具有相同的类型。如果未指定,则假定缩放因子为 1。

CUSPARSELT_MATMUL_B_SCALE_POINTER

void*

NULL

等效于矩阵 B 的 CUSPARSELT_MATMUL_A_SCALE_POINTER

CUSPARSELT_MATMUL_C_SCALE_POINTER

void*

NULL

等效于矩阵 C 的 CUSPARSELT_MATMUL_A_SCALE_POINTER。当前未使用。

CUSPARSELT_MATMUL_D_SCALE_POINTER

void*

NULL

等效于矩阵 D 的 CUSPARSELT_MATMUL_A_SCALE_POINTER

CUSPARSELT_MATMUL_D_OUT_SCALE_POINTER

void*

NULL

指向缩放因子的设备指针,用于将矩阵 D 中的数据转换为计算数据类型范围。缩放因子值类型由缩放模式定义(请参阅 CUSPARSELT_MATMUL_D_OUT_SCALE_MODE)。

其中 ReLU 激活函数定义为

workflow

cusparseLtMatmulAlg_t#

该枚举器指定矩阵-矩阵乘法的算法

描述

CUSPARSELT_MATMUL_ALG_DEFAULT

默认算法

算法枚举器在 cusparseLtMatmulAlgSelectionInit() 函数中使用。

cusparseLtMatmulAlgAttribute_t#

该枚举器指定矩阵乘法算法属性

描述

可能的值

CUSPARSELT_MATMUL_ALG_CONFIG_ID

算法 ID

[0, MAX) (参见 CUSPARSELT_MATMUL_ALG_CONFIG_MAX_ID)

CUSPARSELT_MATMUL_ALG_CONFIG_MAX_ID

算法 ID 限制(仅查询)

CUSPARSELT_MATMUL_SEARCH_ITERATIONS

用于 cusparseLtMatmulSearch() 的迭代次数(每个算法的内核启动次数)

> 0 (默认=5)

CUSPARSELT_MATMUL_SPLIT_K

Split-K 因子(切片数)

在 pre-SM 9.0 上,[1, K], 1: 禁用 Split-K (默认=未设置);在 SM 9.0 上,-1 (启用 segment-K) 或 1 (禁用 segment-K)

CUSPARSELT_MATMUL_SPLIT_K_MODE

Split-K 算法的内核数量

CUSPARSELT_SPLIT_K_MODE_ONE_KERNEL, CUSPARSELT_SPLIT_K_MODE_TWO_KERNELS

CUSPARSELT_MATMUL_SPLIT_K_BUFFERS

用于存储归约部分结果的设备内存缓冲区

在 pre-SM 9.0 上,[0, SplitK - 1];在 SM 9.0 上,0

算法属性枚举器在 cusparseLtMatmulAlgGetAttribute()cusparseLtMatmulAlgSetAttribute() 函数中使用。
Split-K 参数允许用户沿 K 维度拆分 GEMM 计算,以便在 N 或 M 维度较小时创建更多 CTA,从而更好地利用 SM。但是,这样做会以将 K 切片的操作减少到最终结果为代价。cusparseLtMatmulSearch() 函数可用于查找 Split-K 参数的最佳组合。
Segment-K 是 SM 9.0 上的 split-K 方法,它利用 warp 专用持久性 CTA 来提高效率,并取代传统的 split-K 方法。

cusparseLtSplitKMode_t#

该枚举器指定与 cusparseLtMatmulAlgAttribute_t 中的 CUSPARSELT_MATMUL_SPLIT_K_MODE 属性对应的 Split-K 模式值

描述

CUSPARSELT_SPLIT_K_MODE_ONE_KERNEL

为 Split-K 使用单个内核

CUSPARSELT_SPLIT_K_MODE_TWO_KERNELS

为 Split-K 使用两个内核;一个 GPU 内核执行 GEMM,另一个执行最终归约

CUSPARSELT_SPLITK

使用 split-k 分解

CUSPARSELT_DATAPARALLEL

不沿 K 维度拆分

CUSPARSELT_STREAMK

使用 stream-K 分解

CUSPARSELT_HEURISTIC

使用启发式方法确定分解模式 | 启动另一个 GPU 内核执行最终归约


cusparseLtPruneAlg_t#

该枚举器指定在压缩之前应用于结构化矩阵的剪枝算法

描述

CUSPARSELT_PRUNE_SPMMA_TILE

- e2m1: 在 8x4(行优先)或 4x8(列优先)平铺中将 16 个配对值归零,以在约束为每行和每列精确选择两个元素或两对元素的情况下,最大化结果平铺的 L1 范数 

- half, bfloat16, int8, e4m3, e5m2: 在 4x4 平铺中将八个值归零,以在约束为每行和每列精确选择两个元素的情况下,最大化结果平铺的 L1 范数 

- float: 在 2x2 平铺中将两个值归零,以在约束为每行和每列精确选择一个元素的情况下,最大化结果平铺的 L1 范数

CUSPARSELT_PRUNE_SPMMA_STRIP

- e2m1: 在 1x8 条带中将四个配对值归零,以最大化结果条带的 L1 范数 

- half, bfloat16, int8, e4m3, e5m2: 在 1x4 条带中将两个值归零,以最大化结果条带的 L1 范数 

- float: 在 1x2 条带中将一个值归零,以最大化结果条带的 L1 范数 

条带方向根据应用于结构化(稀疏)矩阵的操作 op 和矩阵布局选择

剪枝算法在 cusparseLtSpMMAPrune() 函数中使用。

cusparseLtMatmulMatrixScale_t#

该枚举器指定缩放模式,该模式定义如何解释缩放因子指针。

描述

CUSPARSELT_MATMUL_SCALE_NONE

缩放已禁用。这是不使用窄数据类型的矩阵的默认值和唯一有效值。

CUSPARSELT_MATMUL_MATRIX_SCALE_SCALAR_32F

缩放因子是应用于整个矩阵的单精度标量。当 D 矩阵使用窄精度数据类型时,这是 CUSPARSELTLT_MATMUL_D_SCALE_MODE 的唯一有效值。

CUSPARSELT_MATMUL_MATRIX_SCALE_VEC32_UE4M3

缩放因子是张量,其中包含一个专用缩放因子,该因子存储为 8 位 CUDA_R_8F_UE4M3 值,用于相应数据矩阵最内层维度中的每个 32 元素块。

CUSPARSELT_MATMUL_MATRIX_SCALE_VEC64_UE8M0

缩放因子是张量,其中包含一个专用缩放因子,该因子存储为 8 位 CUDA_R_8F_UE8M0 值,用于相应数据矩阵最内层维度中的每个 64 元素块。

注意: 引入 cusparrseLtMatmulMatrixScale_t 是为了在计算之前缩放或反量化窄精度(E4M3 和 E2M1),并在计算后可能量化。有关更多详细信息,请参阅 FP8 和 FP4 数据类型的 1D 块缩放。从 rowcolumn 索引到线性 offset 的转换是相同的,以及多个块的排列方式也是如此。与 cuBLASLt 的唯一区别在于块大小:在 cuSPARSELt 中,当缩放模式为 CUSPARSELT_MATMUL_MATRIX_SCALE_VEC32_UE4M3 时,单个缩放因子平铺应用于 128x128 块,当缩放模式为 CUSPARSELT_MATMUL_MATRIX_SCALE_VEC64_UE8M0 时,应用于 128x256 块。