cuSPARSELt 数据类型#
不透明数据结构#
cusparseLtHandle_t
#
该结构体保存 cuSPARSELt 库上下文(设备属性、系统信息等)。句柄必须分别使用 cusparseLtInit() 和 cusparseLtDestroy() 函数进行初始化和销毁。
cusparseLtMatDescriptor_t
#
该结构体捕获矩阵的形状和特征。它使用 cusparseLtDenseDescriptorInit() 或 cusparseLtStructuredDescriptorInit() 函数进行初始化,并使用 cusparseLtMatDescriptorDestroy() 函数进行销毁。
cusparseLtMatmulDescriptor_t
#
该结构体保存矩阵乘法运算的描述。它使用 cusparseLtMatmulDescriptorInit() 函数进行初始化。
cusparseLtMatmulAlgSelection_t
#
该结构体保存矩阵乘法算法的描述。它使用 cusparseLtMatmulAlgSelectionInit() 函数进行初始化。
cusparseLtMatmulPlan_t
#
该结构体保存矩阵乘法执行计划,即执行cusparseLtMatmul()
操作所需的所有信息。它分别使用 cusparseLtMatmulPlanInit() 和 cusparseLtMatmulPlanDestroy() 函数进行初始化和销毁。
枚举器#
cusparseLtSparsity_t
#
该枚举器指定结构化矩阵的稀疏度,如下所示
值 |
描述 |
---|---|
|
50% 稀疏度 - paired 4:8 用于 - 1:2 用于 |
稀疏度属性在 cusparseLtStructuredDescriptorInit() 函数中使用。
cusparseComputeType
#
该枚举器指定矩阵的计算精度模式
值 |
描述 |
---|---|
|
- 矩阵 A 和 B 的逐元素乘法以及中间值的累加以 32 位整数精度执行。 - Alpha 和 beta 系数以及尾声以单精度浮点执行。 - 尽可能使用 Tensor Cores。 |
|
- 矩阵 A 和 B 的逐元素乘法以及中间值的累加以单精度浮点执行。 - Alpha 和 beta 系数以及尾声以单精度浮点执行。 - 尽可能使用 Tensor Cores。 |
|
- 矩阵 A 和 B 的逐元素乘法以及中间值的累加以半精度浮点执行。 - Alpha 和 beta 系数以及尾声以单精度浮点执行。 - 尽可能使用 Tensor Cores。 |
计算精度在 cusparseLtMatmulDescriptorInit() 函数中使用。
cusparseLtMatDescAttribute_t
#
该枚举器指定矩阵描述符的附加属性
值 |
描述 |
---|---|
|
批处理中矩阵的数量 |
|
批处理中连续矩阵之间的步幅,以矩阵元素表示 |
算法枚举器在 cusparseLtMatDescSetAttribute() 和 cusparseLtMatDescGetAttribute() 函数中使用。
cusparseLtMatmulDescAttribute_t
#
该枚举器指定矩阵乘法描述符的附加属性
值 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
|
|
ReLU 激活函数 |
|
|
|
ReLU 激活函数的上限 |
|
|
|
ReLU 激活函数的下限阈值 |
|
|
|
|
|
|
|
GeLU 激活函数的缩放系数。它暗示 |
|
|
|
启用/禁用 alpha 向量(每通道)缩放 |
|
|
|
启用/禁用 beta 向量(每通道)缩放。 |
|
|
|
偏差指针。偏差向量的大小必须等于输出矩阵 (D) 的行数。偏差向量的数据类型与矩阵 C 的数据类型相同,但以下情况除外
在这些情况下,偏差的数据类型为 |
|
|
|
连续偏差向量之间的偏差步幅。 |
|
|
|
指向剪枝稀疏矩阵的指针。 |
|
|
|
缩放模式,定义如何解释矩阵 A 的矩阵缩放因子。 |
|
|
|
缩放模式,定义如何解释矩阵 B 的矩阵缩放因子。 |
|
|
|
缩放模式,定义如何解释矩阵 C 的矩阵缩放因子。 |
|
|
|
缩放模式,定义如何解释矩阵 D 的矩阵缩放因子。 |
|
|
|
缩放模式,定义如何解释矩阵 D 的输出矩阵缩放因子。 |
|
|
|
指向缩放因子值的指针,该值将矩阵 A 中的数据转换为计算数据类型范围。缩放因子必须与计算类型具有相同的类型。如果未指定,则假定缩放因子为 1。 |
|
|
|
等效于矩阵 B 的 |
|
|
|
等效于矩阵 C 的 |
|
|
|
等效于矩阵 D 的 |
|
|
|
指向缩放因子的设备指针,用于将矩阵 D 中的数据转换为计算数据类型范围。缩放因子值类型由缩放模式定义(请参阅 |
其中 ReLU 激活函数定义为
CUSPARSELT_MATMUL_SPARSE_MAT_POINTER
为 cusparseLtMatmulSearch() 选择最佳算法提供了更大的灵活性。在调用 cusparseLtMatmulSearch() 之前,引用的内存不能被修改。
cusparseLtMatmulAlg_t
#
该枚举器指定矩阵-矩阵乘法的算法
值 |
描述 |
---|---|
|
默认算法 |
算法枚举器在 cusparseLtMatmulAlgSelectionInit() 函数中使用。
cusparseLtMatmulAlgAttribute_t
#
该枚举器指定矩阵乘法算法属性
值 |
描述 |
可能的值 |
---|---|---|
|
算法 ID |
[0, MAX) (参见 |
|
算法 ID 限制(仅查询) |
|
|
用于 cusparseLtMatmulSearch() 的迭代次数(每个算法的内核启动次数) |
> 0 (默认=5) |
|
Split-K 因子(切片数) |
在 pre- |
|
Split-K 算法的内核数量 |
|
|
用于存储归约部分结果的设备内存缓冲区 |
在 pre- |
算法属性枚举器在 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 模式值
值 |
描述 |
---|---|
|
为 Split-K 使用单个内核 |
|
为 Split-K 使用两个内核;一个 GPU 内核执行 GEMM,另一个执行最终归约 |
|
使用 split-k 分解 |
|
不沿 K 维度拆分 |
|
使用 stream-K 分解 |
|
使用启发式方法确定分解模式 | 启动另一个 GPU 内核执行最终归约 |
cusparseLtPruneAlg_t
#
该枚举器指定在压缩之前应用于结构化矩阵的剪枝算法
值 |
描述 |
---|---|
|
- - - |
|
- - - 条带方向根据应用于结构化(稀疏)矩阵的操作 |
剪枝算法在 cusparseLtSpMMAPrune() 函数中使用。
cusparseLtMatmulMatrixScale_t
#
该枚举器指定缩放模式,该模式定义如何解释缩放因子指针。
值 |
描述 |
---|---|
|
缩放已禁用。这是不使用窄数据类型的矩阵的默认值和唯一有效值。 |
|
缩放因子是应用于整个矩阵的单精度标量。当 D 矩阵使用窄精度数据类型时,这是 |
|
缩放因子是张量,其中包含一个专用缩放因子,该因子存储为 8 位 |
|
缩放因子是张量,其中包含一个专用缩放因子,该因子存储为 8 位 |
cusparrseLtMatmulMatrixScale_t
是为了在计算之前缩放或反量化窄精度(E4M3 和 E2M1),并在计算后可能量化。有关更多详细信息,请参阅 FP8 和 FP4 数据类型的 1D 块缩放。从 row
和 column
索引到线性 offset
的转换是相同的,以及多个块的排列方式也是如此。与 cuBLASLt 的唯一区别在于块大小:在 cuSPARSELt 中,当缩放模式为 CUSPARSELT_MATMUL_MATRIX_SCALE_VEC32_UE4M3
时,单个缩放因子平铺应用于 128x128 块,当缩放模式为 CUSPARSELT_MATMUL_MATRIX_SCALE_VEC64_UE8M0
时,应用于 128x256 块。