cuSPARSELt 函数#
库管理函数#
cusparseLtInit#
cusparseStatus_t
cusparseLtInit(cusparseLtHandle_t* handle)
cusparseLtHandle_t),它保存 cuSPARSELt 库上下文。它在主机上分配轻量级硬件资源,并且必须在进行任何其他 cuSPARSELt 库调用之前调用。在未事先调用 cusparseLtInit() 的情况下调用任何使用 cusparseLtHandle_t 的 cusparseLt 函数将返回错误。参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输出 |
cuSPARSELt 库句柄 |
有关返回状态的描述,请参阅 cusparseStatus_t。
cusparseLtDestroy#
cusparseStatus_t
cusparseLtDestroy(const cusparseLtHandle_t* handle)
cusparseLtDestroy() 之后调用任何使用 cusparseLtHandle_t 的 cusparseLt 函数将返回错误。参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
有关返回状态的描述,请参阅 cusparseStatus_t。
cusparseLtGetVersion#
cusparseStatus_t
cusparseLtGetVersion(const cusparseLtHandle_t* handle,
int* version)
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
|
主机 |
输出 |
库的版本号 |
有关返回状态的描述,请参阅 cusparseStatus_t。
cusparseLtGetProperty#
cusparseStatus_t
cusparseLtGetProperty(libraryPropertyType propertyType,
int* value)
libraryPropertyType。参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
|
主机 |
输入 |
请求的属性 |
|
主机 |
输出 |
请求属性的值 |
libraryPropertyType (在 library_types.h 中定义)
值 |
含义 |
|---|---|
|
查询主版本的枚举器 |
|
查询次版本的枚举器 |
|
标识补丁级别的数字 |
有关返回状态的描述,请参阅 cusparseStatus_t。
矩阵描述符函数#
cusparseLtDenseDescriptorInit#
cusparseStatus_t
cusparseLtDenseDescriptorInit(const cusparseLtHandle_t* handle,
cusparseLtMatDescriptor_t* matDescr,
int64_t rows,
int64_t cols,
int64_t ld,
uint32_t alignment,
cudaDataType valueType,
cusparseOrder_t order)
此函数初始化稠密矩阵的描述符。
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
稠密矩阵描述 |
||
|
主机 |
输入 |
行数 |
|
|
主机 |
输入 |
列数 |
|
|
主机 |
输入 |
主导维度 |
≥ 如果为列优先,则为行数,≥ 如果为行优先,则为列数 |
|
主机 |
输入 |
内存对齐(字节) |
16 的倍数 |
主机 |
输入 |
矩阵的数据类型 |
|
|
主机 |
输入 |
内存布局 |
|
约束:
如果
valueType是CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2, 或CUDA_R_4F_E2M1,则rows,cols, 和ld必须是
16 的倍数
如果
valueType是CUDA_R_16F或CUDA_R_16BF8 的倍数
有关返回状态的描述,请参阅 cusparseStatus_t。
如果 valueType 是 CUDA_R_32F
cusparseStatus_t
cusparseLtStructuredDescriptorInit(const cusparseLtHandle_t* handle,
cusparseLtMatDescriptor_t* matDescr,
int64_t rows,
int64_t cols,
int64_t ld,
uint32_t alignment,
cudaDataType valueType,
cusparseOrder_t order,
cusparseLtSparsity_t sparsity)
4 的倍数
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
|
||
|
主机 |
输入 |
行数 |
|
|
主机 |
输入 |
列数 |
|
|
主机 |
输入 |
主导维度 |
≥ 如果为列优先,则为行数,≥ 如果为行优先,则为列数 |
|
主机 |
输入 |
内存对齐(字节) |
16 的倍数 |
主机 |
输入 |
矩阵的数据类型 |
|
|
主机 |
输入 |
内存布局 |
|
|
主机 |
输入 |
稀疏矩阵描述 |
|
约束:
如果
valueType是CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2, 或CUDA_R_4F_E2M1,则rows,cols, 和ld必须是
矩阵稀疏度比率
CUSPARSELT_SPARSITY_50_PERCENT
如果
valueType是CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2, 或CUDA_R_4F_E2M1
有关返回状态的描述,请参阅 cusparseStatus_t。
32 的倍数
cusparseStatus_t
cusparseLtMatDescriptorDestroy(const cusparseLtMatDescriptor_t* matDescr)
valueType 是 CUDA_R_16F, 或 CUDA_R_16BF参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
16 的倍数 |
有关返回状态的描述,请参阅 cusparseStatus_t。
如果 valueType 是 CUDA_R_32F
cusparseStatus_t
cusparseLtMatDescSetAttribute(const cusparseLtHandle_t* handle,
cusparseLtMatDescriptor_t* matmulDescr,
cusparseLtMatDescAttribute_t matAttribute,
const void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
16 的倍数 |
||
主机 |
输入 |
matDescr |
矩阵描述符 |
|
|
主机 |
输入 |
此函数设置属于矩阵描述符的指定属性的值,例如批次数量及其步幅。 |
|
|
主机 |
输入 |
matmulDescr |
有关返回状态的描述,请参阅 cusparseStatus_t。
matAttribute
cusparseStatus_t
cusparseLtMatDescGetAttribute(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* matmulDescr,
cusparseLtMatDescAttribute_t matAttribute,
void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输入 |
16 的倍数 |
||
主机 |
输入 |
|
矩阵描述符 |
|
|
主机 |
输出 |
data |
|
|
主机 |
输入 |
matmulDescr |
有关返回状态的描述,请参阅 cusparseStatus_t。
指向将要设置的指定属性值的指针
dataSize
cusparseStatus_t
cusparseLtMatmulDescriptorInit(const cusparseLtHandle_t* handle,
cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseOperation_t opA,
cusparseOperation_t opB,
const cusparseLtMatDescriptor_t* matA,
const cusparseLtMatDescriptor_t* matB,
const cusparseLtMatDescriptor_t* matC,
const cusparseLtMatDescriptor_t* matD,
cusparseComputeType computeType)
用于验证的属性值的大小(以字节为单位)
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
|
||
主机 |
输入 |
matDescr |
matAttribute |
|
主机 |
输入 |
data |
matAttribute |
|
主机 |
输入 |
Matmul 描述符函数# |
||
主机 |
输入 |
此函数初始化矩阵乘法描述符。 |
||
主机 |
输入 |
矩阵乘法描述符 |
||
主机 |
输入 |
应用于矩阵 |
||
|
主机 |
输入 |
opB |
应用于矩阵 |
matA
约束:
结构化或稠密矩阵描述符
AmatB
结构化或稠密矩阵描述符
BmatC
稠密矩阵描述符
CmatD
稠密矩阵描述符
DcomputeType
计算精度
有关返回状态的描述,请参阅 cusparseStatus_t。
CUSPARSE_COMPUTE_32I, CUSPARSE_COMPUTE_32F, CUSPARSE_COMPUTE_16F
cusparseStatus_t
cusparseLtMatmulDescSetAttribute(const cusparseLtHandle_t* handle,
cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseLtMatmulDescAttribute_t matmulAttribute,
const void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
|
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
16 的倍数 |
||
主机 |
输入 |
matDescr |
|
|
|
主机 |
输入 |
此函数设置属于矩阵描述符的指定属性的值,例如批次数量及其步幅。 |
|
|
主机 |
输入 |
matmulDescr |
有关返回状态的描述,请参阅 cusparseStatus_t。
opA/opB = TN 如果矩阵顺序为 orderA/orderB = Col/Col
cusparseStatus_t
cusparseLtMatmulDescGetAttribute(const cusparseLtHandle_t* handle,
const cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseLtMatmulDescAttribute_t matmulAttribute,
void* data,
size_t dataSize)
opA/opB = NT 如果矩阵顺序为 orderA/orderB = Row/Row参数 |
内存 |
输入/输出 |
描述 |
|
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
16 的倍数 |
||
主机 |
输入 |
|
|
|
|
主机 |
输出 |
data |
|
|
主机 |
输入 |
matmulDescr |
有关返回状态的描述,请参阅 cusparseStatus_t。
opA/opB = NN 如果矩阵顺序为 orderA/orderB = Row/Col
opA/opB = TT 如果矩阵顺序为 orderA/orderB = Col/Row
cusparseStatus_t
cusparseLtMatmulAlgSelectionInit(const cusparseLtHandle_t* handle,
cusparseLtMatmulAlgSelection_t* algSelection,
const cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseLtMatmulAlg_t alg)
C 和 D 必须具有相同的主导维度和内存布局(有关不同内存布局,请参阅 cusparseOrder_t)。
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
如果输入 A/B=`E4M3`,输出 D=`E4M3`,缩放=`VEC64_UE8M0`,则矩阵 |
||
主机 |
输入 |
|
||
主机 |
输入 |
此函数设置属于矩阵描述符的指定属性的值,例如激活函数和偏置。 |
|
有关返回状态的描述,请参阅 cusparseStatus_t。
CUSPARSELT_MATMUL_ACTIVATION_RELU, CUSPARSELT_MATMUL_ACTIVATION_RELU_UPPERBOUND, CUSPARSELT_MATMUL_ACTIVATION_RELU_THRESHOLD, CUSPARSELT_MATMUL_ACTIVATION_GELU, CUSPARSELT_MATMUL_ACTIVATION_GELU_SCALING, CUSPARSELT_MATMUL_ALPHA_VECTOR_SCALING, CUSPARSELT_MATMUL_BETA_VECTOR_SCALING, CUSPARSELT_MATMUL_BIAS_POINTER, CUSPARSELT_MATMUL_BIAS_STRIDE
cusparseStatus_t
cusparseLtMatmulAlgSetAttribute(const cusparseLtHandle_t* handle,
cusparseLtMatmulAlgSelection_t* algSelection,
cusparseLtMatmulAlgAttribute_t attribute,
const void* data,
size_t dataSize)
cusparseLtMatmulDescGetAttribute#
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
如果输入 A/B=`E4M3`,输出 D=`E4M3`,缩放=`VEC64_UE8M0`,则矩阵 |
||
主机 |
输入 |
matmulDescr |
matmulAttribute |
|
|
主机 |
输入 |
此函数设置属于矩阵描述符的指定属性的值,例如批次数量及其步幅。 |
|
|
主机 |
输入 |
matmulDescr |
有关返回状态的描述,请参阅 cusparseStatus_t。
要检索的属性
cusparseStatus_t
cusparseLtMatmulAlgGetAttribute(const cusparseLtHandle_t* handle,
const cusparseLtMatmulAlgSelection_t* algSelection,
cusparseLtMatmulAlgAttribute_t attribute,
void* data,
size_t dataSize)
data
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输入 |
如果输入 A/B=`E4M3`,输出 D=`E4M3`,缩放=`VEC64_UE8M0`,则矩阵 |
||
主机 |
输入 |
包含此函数检索的属性值的内存地址 |
Matmul 算法函数# |
|
|
主机 |
输出 |
data |
|
|
主机 |
输入 |
matmulDescr |
有关返回状态的描述,请参阅 cusparseStatus_t。
cusparseLtMatmulAlgSelectionInit#
此函数初始化算法选择描述符。
cusparseStatus_t
cusparseLtMatmulGetWorkspace(const cusparseLtHandle_t* handle,
const cusparseLtMatmulPlan_t* plan,
size_t* workspaceSize)
algSelection
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输入 |
alg |
|
|
主机 |
输出 |
CUSPARSELT_MATMUL_ALG_DEFAULT |
有关返回状态的描述,请参阅 cusparseStatus_t。
cusparseLtMatmulAlgSetAttribute#
cusparseStatus_t
cusparseLtMatmulPlanInit(const cusparseLtHandle_t* handle,
cusparseLtMatmulPlan_t* plan,
const cusparseLtMatmulDescriptor_t* matmulDescr,
const cusparseLtMatmulAlgSelection_t* algSelection)
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输出 |
alg |
|
主机 |
输入 |
|
|
主机 |
输入 |
如果输入 A/B=`E4M3`,输出 D=`E4M3`,缩放=`VEC64_UE8M0`,则矩阵 |
有关返回状态的描述,请参阅 cusparseStatus_t。
此函数设置属于算法选择描述符的指定属性的值。
cusparseStatus_t
cusparseLtMatmulPlanDestroy(const cusparseLtMatmulPlan_t* plan)
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
alg |
有关返回状态的描述,请参阅 cusparseStatus_t。
要设置的属性
cusparseStatus_t
cusparseLtMatmul(const cusparseLtHandle_t* handle,
const cusparseLtMatmulPlan_t* plan,
const void* alpha,
const void* d_A,
const void* d_B,
const void* beta,
const void* d_C,
void* d_D,
void* workspace,
cudaStream_t* streams,
int32_t numStreams)
CUSPARSELT_MATMUL_ALG_CONFIG_ID, CUSPARSELT_MATMUL_SEARCH_ITERATIONS, CUSPARSELT_MATMUL_SPLIT_K, CUSPARSELT_MATMUL_SPLIT_K_MODE, CUSPARSELT_MATMUL_SPLIT_K_BUFFERS
cusparseLtMatmulAlgGetAttribute#参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输入 |
alg |
|
|
将由此函数检索的属性 |
输入 |
|
|
|
输入 |
此函数确定与所选算法关联的所需工作空间大小。 |
|
|
输入 |
矩阵乘法计划 |
|
将由此函数检索的属性 |
输入 |
工作空间大小(以字节为单位) |
|
|
输入 |
plan |
|
|
输出 |
矩阵乘法计划 |
|
|
输入 |
此函数释放矩阵乘法计划实例使用的资源。此函数是使用特定计划实例的最后一次调用。 |
|
主机 |
输入 |
matmulPlan |
|
主机 |
输入 |
矩阵乘法计划 |
cusparseLtMatmul#
此函数计算矩阵 |
其中 |
如 cusparseLtMatmulDescriptorInit() 所述,输入矩阵 A 或 B 中有且仅有一个应具有结构化稀疏性,并且相应的 |
注意:此函数目前仅支持 |
|---|---|---|---|
|
|
||
|
|
||
|
|
||
|
|
||
|
|||
|
|||
|
|||
beta |
|
|
|
|
d_C |
||
|
|||
|
|||
|
|||
|
|
|
|
|
|
||
|
|||
|
|||
|
|||
d_D |
|
指向稠密矩阵 |
|
|
workspace |
||
|
|||
|
|||
|
|||
指向用于计算的 CUDA 流数组的指针
约束
numStreams
streams 中的 CUDA 流数量
支持的数据类型
输入 A/B
输入 C
输出 D
计算
CUDA_R_32F
有关返回状态的描述,请参阅 cusparseStatus_t。
CUDA_R_32F
cusparseStatus_t
cusparseLtMatmulSearch(const cusparseLtHandle_t* handle,
cusparseLtMatmulPlan_t* plan,
const void* alpha,
const void* d_A,
const void* d_B,
const void* beta,
const void* d_C,
void* d_D,
void* workspace,
cudaStream_t* streams,
int32_t numStreams)
CUDA_R_16F
CUDA_R_16F
CUDA_R_16F
CUSPARSE_COMPUTE_16F
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输出 |
alg |
|
|
主机 |
输入 |
CUDA_R_16BF |
|
|
输入 |
此函数确定与所选算法关联的所需工作空间大小。 |
|
|
输入 |
矩阵乘法计划 |
|
主机 |
输入 |
CUDA_R_16BF |
|
|
输入 |
plan |
|
|
输出 |
矩阵乘法计划 |
|
|
输入 |
此函数释放矩阵乘法计划实例使用的资源。此函数是使用特定计划实例的最后一次调用。 |
|
主机 |
输入 |
matmulPlan |
|
主机 |
输入 |
矩阵乘法计划 |
CUDA_R_16BF
CUDA_R_8I
cusparseStatus_t
cusparseLtSpMMAPrune(const cusparseLtHandle_t* handle,
const cusparseLtMatmulDescriptor_t* matmulDescr,
const void* d_in,
void* d_out,
cusparseLtPruneAlg_t pruneAlg,
cudaStream_t stream)
CUDA_R_8I
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输入 |
|
||
|
|
输入 |
CUSPARSE_COMPUTE_32I |
|
|
|
输出 |
CUDA_R_32I |
|
|
输入 |
|
|
|
|
主机 |
输入 |
CUDA_R_8F_E5M2 |
streams 中的 CUDA 流数量
支持的数据类型
CUDA_R_8F_E5M2
输入 C
CUDA_R_8F_E5M2
计算
CUDA_R_32F
有关返回状态的描述,请参阅 cusparseStatus_t。
CUDA_R_4F_E2M1 [2]
cusparseStatus_t
cusparseLtSpMMAPrune2(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* sparseMatDescr,
int isSparseA,
cusparseOperation_t op,
const void* d_in,
void* d_out,
cusparseLtPruneAlg_t pruneAlg,
cudaStream_t stream);
CUDA_R_8I
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输入 |
|
||
|
主机 |
输入 |
块缩放。 |
有关哪些 GPU 计算能力支持哪些数据类型组合的详细列表,请参阅 主要特性 |
|
主机 |
输入 |
属性 |
matAttribute |
|
|
输入 |
CUSPARSE_COMPUTE_32I |
|
|
|
输出 |
CUDA_R_32I |
|
|
输入 |
|
|
|
|
主机 |
输入 |
CUDA_R_8F_E5M2 |
此例程不需要额外的存储空间
此例程支持相对于 streams[0] 的异步执行
为每次运行提供确定性(位级)结果
cusparseStatus_t
cusparseLtSpMMAPruneCheck(const cusparseLtHandle_t* handle,
const cusparseLtMatmulDescriptor_t* matmulDescr,
const void* d_in,
int* d_valid,
cudaStream_t stream)
cusparseLtMatmul 支持以下 优化
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输入 |
|
|
|
|
输入 |
CUDA 图捕获 |
|
|
输出 |
|
|
主机 |
输入 |
CUDA_R_8F_E5M2 |
有关返回状态的描述,请参阅 cusparseStatus_t。
此函数评估由 plan 描述的矩阵乘法的所有可用算法,并通过选择最快的算法自动更新用于初始化 plan 的 cusparseLtMatmulAlgSelection_t。此功能旨在用于自动调优目的,当相同的操作在不同的输入上重复多次时。
cusparseStatus_t
cusparseLtSpMMAPruneCheck2(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* sparseMatDescr,
int isSparseA,
cusparseOperation_t op,
const void* d_in,
int* d_valid,
cudaStream_t stream)
此函数行为类似于 cusparseLtMatmul(),不同之处在于如果操作是就地执行 (d_C=d_D),则 d_D 值可能会累积。
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输入 |
|
||
|
主机 |
输入 |
块缩放。 |
此函数相对于 |
|
主机 |
输入 |
属性 |
matAttribute |
|
|
输入 |
CUDA 图捕获 |
|
|
|
输出 |
|
|
|
主机 |
输入 |
CUDA_R_8F_E5M2 |
评估的迭代次数可以使用 cusparseLtMatmulAlgSetAttribute() 和 CUSPARSELT_MATMUL_SEARCH_ITERATIONS 设置。
可以使用 cusparseLtMatmulAlgGetAttribute() 和 CUSPARSELT_MATMUL_ALG_CONFIG_ID 检索所选的算法 ID。
cusparseStatus_t
cusparseLtSpMMACompressedSize(const cusparseLtHandle_t* handle,
const cusparseLtMatmulPlan_t* plan,
size_t* compressedSize,
size_t* compressBufferSize)
此函数还搜索 Split-K 参数 的最佳组合。可以使用 cusparseLtMatmulAlgGetAttribute() 检索所选的值。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输入 |
alpha |
|
|
主机 |
输出 |
d_A |
|
主机 |
输出 |
指向结构化或稠密矩阵 |
有关返回状态的描述,请参阅 cusparseStatus_t。
d_B
cusparseStatus_t
cusparseLtSpMMACompressedSize2(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* sparseMatDescr,
size_t* compressedSize,
size_t* compressBufferSize)
指向结构化或稠密矩阵 B 的指针
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输入 |
|
|
|
主机 |
输出 |
beta |
|
主机 |
输出 |
指向结构化或稠密矩阵 |
该函数具有与 cusparseLtSpMMACompressedSize() 相同的属性
cusparseLtSpMMACompress#
cusparseStatus_t
cusparseLtSpMMACompress(const cusparseLtHandle_t* handle,
const cusparseLtMatmulPlan_t* plan,
const void* d_dense,
void* d_compressed,
void* d_compressed_buffer,
cudaStream_t stream)
该函数压缩稠密矩阵 d_dense。压缩后的矩阵旨在用作 cusparseLtMatmul() 或 cusparseLtMatmulSearch() 函数中的第一个/第二个操作数 A/B。
此函数的输入矩阵 d_dense 必须使用 cusparseLtSpMMAPrune() <cusparseLtSpMMAPrune-label> 或自定义函数进行剪枝。剪枝后的数据应遵守以下约束,具体取决于 cusparseLtMatmul() 中应用于此矩阵的操作,该操作由在 cusparseLtMatmulDescriptorInit() 中创建的 cusparseLtMatmulDescriptor_t 定义
对于
op = CUSPARSE_NON_TRANSPOSECUDA_R_4F_E2M1每行每八个元素必须至少有 4 个成对的非零值CUDA_R_16F,CUDA_R_16BF,CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2每行每四个元素必须至少有两个非零值CUDA_R_32F每行每两个元素必须至少有一个非零值
对于
op = CUSPARSE_TRANSPOSECUDA_R_4F_E2M1每列每八个元素必须至少有 4 个成对的非零值CUDA_R_16F,CUDA_R_16BF,CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2每列每四个元素必须至少有两个非零值CUDA_R_32F每列每两个元素必须至少有一个非零值
int8、e4m3 和 e5m2 内核应在高 SM 时钟频率下运行,以最大限度地提高性能。
可以使用函数 cusparseLtSpMMAPruneCheck() 检查剪枝结果(矩阵 A/B)的正确性。请注意,使用 cusparseLtSpMMAPrune() <cusparseLtSpMMAPrune-label> 进行剪枝保证是正确的。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
|
主机 |
输入 |
alg |
|
|
|
输入 |
CUSPARSE_COMPUTE_32I |
|
|
输出 |
指向压缩后的矩阵的指针 |
|
|
输出 |
指向压缩的临时缓冲区的指针 |
|
主机 |
输入 |
CUDA_R_8F_E5M2 |
streams 中的 CUDA 流数量
CUDA_R_8F_E5M2
输入 C
cusparseLtSpMMACompress()。cusparseLtSpMMACompress() 支持以下 优化
计算
CUDA_R_32F
有关返回状态的描述,请参阅 cusparseStatus_t。
cusparseLtSpMMACompress2 [DEPRECATED]#
cusparseStatus_t
cusparseLtSpMMACompress2(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* sparseMatDescr,
int isSparseA,
cusparseOperation_t op,
const void* d_dense,
void* d_compressed,
void* d_compressed_buffer,
cudaStream_t stream)
参数 |
内存 |
输入/输出 |
描述 |
可能的值 |
|---|---|---|---|---|
主机 |
输入 |
cuSPARSELt 库句柄 |
||
主机 |
输入 |
|
||
|
主机 |
输入 |
块缩放。 |
有关哪些 GPU 计算能力支持哪些数据类型组合的详细列表,请参阅 主要特性 |
|
主机 |
输入 |
属性 |
matAttribute |
|
|
输入 |
CUSPARSE_COMPUTE_32I |
|
|
|
输出 |
指向压缩后的矩阵的指针 |
|
|
|
输出 |
指向压缩的临时缓冲区的指针 |
|
|
主机 |
输入 |
CUDA_R_8F_E5M2 |
该函数具有与 cusparseLtSpMMACompress() 相同的属性