cuSPARSELt 函数#
库管理函数#
cusparseLtInit#
cusparseStatus_t
cusparseLtInit(cusparseLtHandle_t* handle)
cusparseLtHandle_t) which holds the cuSPARSELt library context. It allocates light hardware resources on the host, and must be called prior to making any other cuSPARSELt library calls. Calling any cusparseLt function which uses cusparseLtHandle_t without a previous call of cusparseLtInit() will return an error.参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
输出 |
cuSPARSELt 库句柄 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtDestroy#
cusparseStatus_t
cusparseLtDestroy(const cusparseLtHandle_t* handle)
cusparseLtHandle_t after cusparseLtDestroy() will return an error.参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtGetVersion#
cusparseStatus_t
cusparseLtGetVersion(const cusparseLtHandle_t* handle,
int* version)
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
|
主机 |
输出 |
库的版本号 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtGetProperty#
cusparseStatus_t
cusparseLtGetProperty(libraryPropertyType propertyType,
int* value)
libraryPropertyType for supported types.参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
|
主机 |
IN |
请求的属性 |
|
主机 |
输出 |
请求属性的值 |
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)
该函数初始化一个密集矩阵的描述符。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
密集矩阵描述 |
||
|
主机 |
IN |
行数 |
|
|
主机 |
IN |
列数 |
|
|
主机 |
IN |
前导维度 |
≥ 行(如果是列优先存储),≥ 列(如果是行优先存储) |
|
主机 |
IN |
内存对齐(以字节为单位) |
16的倍数 |
主机 |
IN |
矩阵的数据类型 |
|
|
主机 |
IN |
内存布局 |
|
约束条件:
rows,cols, 和ld必须是
16 如果
valueType是CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2, 或CUDA_R_4F_E2M18 如果
valueType是CUDA_R_16F或CUDA_R_16BF4 如果
valueType是CUDA_R_32F
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtStructuredDescriptorInit#
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)
该函数初始化一个结构化矩阵的描述符。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
稀疏矩阵描述 |
||
|
主机 |
IN |
行数 |
|
|
主机 |
IN |
列数 |
|
|
主机 |
IN |
前导维度 |
≥ 行(如果是列优先存储),≥ 列(如果是行优先存储) |
|
主机 |
IN |
内存对齐(以字节为单位) |
16的倍数 |
主机 |
IN |
矩阵的数据类型 |
|
|
主机 |
IN |
内存布局 |
|
|
主机 |
IN |
矩阵稀疏比率 |
|
约束条件:
rows、cols和ld必须是
32 如果
valueType是CUDA_R_8I,CUDA_R_8F_E4M3,CUDA_R_8F_E5M2, 或CUDA_R_4F_E2M116 如果
valueType是CUDA_R_16F或CUDA_R_16BF8 如果
valueType是CUDA_R_32F
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatDescriptorDestroy#
cusparseStatus_t
cusparseLtMatDescriptorDestroy(const cusparseLtMatDescriptor_t* matDescr)
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
矩阵描述符 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatDescSetAttribute#
cusparseStatus_t
cusparseLtMatDescSetAttribute(const cusparseLtHandle_t* handle,
cusparseLtMatDescriptor_t* matmulDescr,
cusparseLtMatDescAttribute_t matAttribute,
const void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
矩阵描述符 |
||
主机 |
IN |
要设置的属性 |
|
|
|
主机 |
IN |
指向将设置指定属性的值的指针 |
|
|
主机 |
IN |
用于验证的属性值大小(以字节为单位) |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatDescGetAttribute#
cusparseStatus_t
cusparseLtMatDescGetAttribute(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* matmulDescr,
cusparseLtMatDescAttribute_t matAttribute,
void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
IN |
矩阵描述符 |
||
主机 |
IN |
要检索的属性 |
|
|
|
主机 |
输出 |
包含此函数检索到的属性值的内存地址 |
|
|
主机 |
IN |
用于验证的属性值大小(以字节为单位) |
有关返回状态的描述,请参见cusparseStatus_t。
矩阵乘法描述符函数#
cusparseLtMatmulDescriptorInit#
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)
该函数初始化矩阵乘法描述符。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
矩阵乘法描述符 |
||
主机 |
IN |
应用于矩阵 |
|
|
主机 |
IN |
应用于矩阵 |
|
|
主机 |
IN |
结构化或密集矩阵描述符 |
||
主机 |
IN |
结构化或密集矩阵描述符 |
||
主机 |
IN |
稠密矩阵描述符 |
||
主机 |
IN |
稠密矩阵描述符 |
||
主机 |
IN |
计算精度 |
|
结构化矩阵描述符可用于matA或matB,但不能同时用于两者。
约束条件:
查看 cusparseLtMatmul() 了解支持的数据类型。
CUDA_R_8I,CUDA_R_8F_E4M3,`CUDA_R_8F_E5M2` 和CUDA_R_4F_E2M1数据类型仅支持(如果B是结构化类型则相反):
opA/opB = TN如果矩阵顺序是orderA/orderB = Col/Col
opA/opB = NT如果矩阵顺序是orderA/orderB = Row/Row
opA/opB = NN如果矩阵顺序是orderA/orderB = Row/Col
opA/opB = TT当矩阵顺序为orderA/orderB = Col/Row时
C和D必须具有相同的前导维度和内存布局(关于不同内存布局请参阅 cusparseOrder_t)。矩阵
C和D每个维度(行和列)的最大元素数量限制为2097120。如果输入A/B=`E4M3`,输出D=`E4M3`,缩放比例=`VEC64_UE8M0`,则矩阵
C和D连续维度上的最小元素数量为64。
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulDescSetAttribute#
cusparseStatus_t
cusparseLtMatmulDescSetAttribute(const cusparseLtHandle_t* handle,
cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseLtMatmulDescAttribute_t matmulAttribute,
const void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
|
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
矩阵描述符 |
||
主机 |
IN |
要设置的属性 |
|
|
|
主机 |
IN |
指向将设置指定属性的值的指针 |
|
|
主机 |
IN |
用于验证的属性值大小(以字节为单位) |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulDescGetAttribute#
cusparseStatus_t
cusparseLtMatmulDescGetAttribute(const cusparseLtHandle_t* handle,
const cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseLtMatmulDescAttribute_t matmulAttribute,
void* data,
size_t dataSize)
参数 |
内存 |
输入/输出 |
描述 |
|
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
矩阵描述符 |
||
主机 |
IN |
要检索的属性 |
|
|
|
主机 |
输出 |
包含此函数检索到的属性值的内存地址 |
|
|
主机 |
IN |
用于验证的属性值大小(以字节为单位) |
有关返回状态的描述,请参见cusparseStatus_t。
矩阵乘法算法函数#
cusparseLtMatmulAlgSelectionInit#
cusparseStatus_t
cusparseLtMatmulAlgSelectionInit(const cusparseLtHandle_t* handle,
cusparseLtMatmulAlgSelection_t* algSelection,
const cusparseLtMatmulDescriptor_t* matmulDescr,
cusparseLtMatmulAlg_t alg)
该函数初始化算法选择描述符。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
算法选择描述符 |
||
主机 |
IN |
矩阵乘法描述符 |
||
主机 |
IN |
算法模式 |
|
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulAlgSetAttribute#
cusparseStatus_t
cusparseLtMatmulAlgSetAttribute(const cusparseLtHandle_t* handle,
cusparseLtMatmulAlgSelection_t* algSelection,
cusparseLtMatmulAlgAttribute_t attribute,
const void* data,
size_t dataSize)
该函数用于设置算法选择描述符中指定属性的值。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
输出 |
算法选择描述符 |
||
主机 |
IN |
要设置的属性 |
|
|
|
主机 |
IN |
指向将设置指定属性的值的指针 |
|
|
主机 |
IN |
用于验证的属性值大小(以字节为单位) |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulAlgGetAttribute#
cusparseStatus_t
cusparseLtMatmulAlgGetAttribute(const cusparseLtHandle_t* handle,
const cusparseLtMatmulAlgSelection_t* algSelection,
cusparseLtMatmulAlgAttribute_t attribute,
void* data,
size_t dataSize)
该函数返回属于算法选择描述符的查询属性的值。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
IN |
算法选择描述符 |
||
主机 |
IN |
该函数将要获取的属性 |
|
|
|
主机 |
输出 |
包含此函数检索到的属性值的内存地址 |
|
|
主机 |
IN |
用于验证的属性值大小(以字节为单位) |
有关返回状态的描述,请参见cusparseStatus_t。
矩阵乘法函数#
cusparseLtMatmulGetWorkspace#
cusparseStatus_t
cusparseLtMatmulGetWorkspace(const cusparseLtHandle_t* handle,
const cusparseLtMatmulPlan_t* plan,
size_t* workspaceSize)
该函数确定与所选算法关联所需的工作空间大小。
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulPlanInit#
cusparseStatus_t
cusparseLtMatmulPlanInit(const cusparseLtHandle_t* handle,
cusparseLtMatmulPlan_t* plan,
const cusparseLtMatmulDescriptor_t* matmulDescr,
const cusparseLtMatmulAlgSelection_t* algSelection)
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
输出 |
矩阵乘法计划 |
|
主机 |
IN |
矩阵乘法描述符 |
|
主机 |
IN |
算法选择描述符 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulPlanDestroy#
cusparseStatus_t
cusparseLtMatmulPlanDestroy(const cusparseLtMatmulPlan_t* plan)
cusparseLtMatmulPlan_t after cusparseLtMatmulPlanDestroy() will return an error.参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
矩阵乘法计划 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmul#
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)
该函数计算矩阵A和B的矩阵乘法,根据以下运算生成输出矩阵D:
A, B, and C are input matrices, and d_A or d_B structured sparse matrix pointer should be output of cusparseLtSpMMACompress() or cusparseLtSpMMACompress2().D has the same shape of C参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
IN |
矩阵乘法计划 |
|
|
主机/设备 |
IN |
|
|
设备 |
IN |
指向结构化或稠密矩阵 |
|
设备 |
IN |
指向结构化或密集矩阵 |
|
主机/设备 |
IN |
|
|
设备 |
IN |
指向稠密矩阵 |
|
设备 |
输出 |
指向稠密矩阵 |
|
设备 |
IN |
指向工作区的指针 |
|
主机 |
IN |
指向用于计算的CUDA流数组的指针 |
|
主机 |
IN |
|
支持的数据类型:
输入A/B |
输入C |
输出D |
计算 |
|---|---|---|---|
|
|
||
|
|
||
|
|
||
|
|
||
|
|||
|
|||
|
|||
|
|
|
|
|
|
||
|
|||
|
|||
|
|||
|
|
|
|
|
|
||
|
|||
|
|||
|
|||
|
|
|
|
|
|
||
|
|||
|
|||
|
|||
有关GPU计算能力支持哪些数据类型组合的详细列表,请参阅Key Features
约束条件:
所有指针必须对齐到16字节
属性
该例程不需要额外的存储空间
该例程支持相对于
streams[0]的异步执行每次运行提供确定性(逐位)结果
cusparseLtMatmul 支持以下 优化:
CUDA图捕获
硬件内存压缩
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtMatmulSearch#
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)
plan and automatically updates the cusparseLtMatmulAlgSelection_t used to initialize the plan by selecting the fastest one. The functionality is intended to be used for auto-tuning purposes when the same operation is repeated multiple times over different inputs.d_D values may accumulate if the operation is performed in-place (d_C=d_D).
该函数相对于
streams[0]是非异步的(阻塞调用)可以通过使用cusparseLtMatmulAlgSetAttribute()函数并设置
CUSPARSELT_MATMUL_SEARCH_ITERATIONS参数来配置评估的迭代次数。所选算法ID可以通过使用cusparseLtMatmulAlgGetAttribute()函数并指定
CUSPARSELT_MATMUL_ALG_CONFIG_ID参数来获取。该函数还会搜索Split-K参数的最佳组合。所选值可以通过使用cusparseLtMatmulAlgGetAttribute()来获取。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
输出 |
矩阵乘法计划 |
|
|
主机 |
IN |
|
|
设备 |
IN |
指向结构化或稠密矩阵 |
|
设备 |
IN |
指向结构化或密集矩阵 |
|
主机 |
IN |
|
|
设备 |
IN |
指向稠密矩阵 |
|
设备 |
输出 |
指向稠密矩阵 |
|
设备 |
IN |
指向工作区的指针 |
|
主机 |
IN |
指向用于计算的CUDA流数组的指针 |
|
主机 |
IN |
|
辅助函数#
cusparseLtSpMMAPrune#
cusparseStatus_t
cusparseLtSpMMAPrune(const cusparseLtHandle_t* handle,
const cusparseLtMatmulDescriptor_t* matmulDescr,
const void* d_in,
void* d_out,
cusparseLtPruneAlg_t pruneAlg,
cudaStream_t stream)
该函数根据指定的算法pruneAlg对稠密矩阵d_in进行剪枝。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
IN |
矩阵乘法描述符 |
||
|
设备 |
IN |
指向稠密矩阵的指针 |
|
|
设备 |
输出 |
指向修剪后矩阵的指针 |
|
设备 |
IN |
剪枝算法 |
|
|
|
主机 |
IN |
用于计算的CUDA流 |
属性
该例程不需要额外的存储空间
该例程支持相对于
stream的异步执行每次运行提供确定性(逐位)结果
cusparseLtSpMMAPrune() 支持以下 优化:
CUDA图捕获
硬件内存压缩
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtSpMMAPrune2 [已弃用]#
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);
该函数根据指定的算法 pruneAlg 对稠密矩阵 d_in 进行剪枝。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
IN |
结构化(稀疏)矩阵描述符 |
||
|
主机 |
IN |
指定结构化(稀疏)矩阵是否位于第一个位置( |
|
|
主机 |
IN |
将在乘法运算中应用于结构化(稀疏)矩阵的操作 |
|
|
设备 |
IN |
指向稠密矩阵的指针 |
|
|
设备 |
输出 |
指向修剪后矩阵的指针 |
|
设备 |
IN |
剪枝算法 |
|
|
|
主机 |
IN |
用于计算的CUDA流 |
如果使用CUSPARSELT_PRUNE_SPMMA_TILE,则isSparseA和op不相关。
该函数具有与cusparseLtSpMMAPrune()相同的属性
cusparseLtSpMMAPruneCheck#
cusparseStatus_t
cusparseLtSpMMAPruneCheck(const cusparseLtHandle_t* handle,
const cusparseLtMatmulDescriptor_t* matmulDescr,
const void* d_in,
int* d_valid,
cudaStream_t stream)
该函数用于检查给定矩阵的剪枝结构是否正确。使用cusparseLtSpMMAPrune()进行剪枝的数据保证是正确的,因此可以跳过此函数。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
IN |
矩阵乘法描述符 |
|
|
设备 |
IN |
指向待检查矩阵的指针 |
|
设备 |
输出 |
验证结果 ( |
|
主机 |
IN |
用于计算的CUDA流 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtSpMMAPruneCheck2 [已弃用]#
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)
该函数检查给定矩阵的剪枝结构是否正确。
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
IN |
结构化(稀疏)矩阵描述符 |
||
|
主机 |
IN |
指定结构化(稀疏)矩阵是否位于第一个位置( |
|
|
主机 |
IN |
将在乘法运算中应用于结构化(稀疏)矩阵的操作 |
|
|
设备 |
IN |
指向待检查矩阵的指针 |
|
|
设备 |
输出 |
验证结果 ( |
|
|
主机 |
IN |
用于计算的CUDA流 |
该函数具有与cusparseLtSpMMAPruneCheck()相同的属性
cusparseLtSpMMACompressedSize#
cusparseStatus_t
cusparseLtSpMMACompressedSize(const cusparseLtHandle_t* handle,
const cusparseLtMatmulPlan_t* plan,
size_t* compressedSize,
size_t* compressBufferSize)
该函数提供在调用cusparseLtSpMMACompress()之前需要分配的压缩矩阵的大小。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
IN |
矩阵计划描述符 |
|
|
主机 |
输出 |
压缩矩阵的字节大小 |
|
主机 |
输出 |
矩阵压缩所需缓冲区的字节大小 |
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtSpMMACompressedSize2 [已弃用]#
cusparseStatus_t
cusparseLtSpMMACompressedSize2(const cusparseLtHandle_t* handle,
const cusparseLtMatDescriptor_t* sparseMatDescr,
size_t* compressedSize,
size_t* compressBufferSize)
该函数提供在调用cusparseLtSpMMACompress2()之前需要分配的压缩矩阵大小。必须在cusparseLtMatmulPlanInit之后调用。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
IN |
结构化(稀疏)矩阵描述符 |
|
|
主机 |
输出 |
压缩矩阵的字节大小 |
|
主机 |
输出 |
矩阵压缩所需缓冲区的字节大小 |
该函数具有与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。经过压缩的矩阵将作为第一个/第二个操作数A/B,用于cusparseLtMatmul()或cusparseLtMatmulSearch()函数。
输入矩阵 d_dense 在传递给此函数前必须经过剪枝处理,剪枝可通过 cusparseLtSpMMAPrune() 或自定义函数完成。剪枝后的数据需满足以下约束条件,具体取决于该矩阵在 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_TRANSPOSE时CUDA_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时钟频率下运行以获得最佳性能。
修剪结果的正确性(矩阵A/B)可以通过函数cusparseLtSpMMAPruneCheck()进行检查。请注意,使用cusparseLtSpMMAPrune() 进行修剪可以保证结果是正确的。
参数 |
内存 |
输入/输出 |
描述 |
|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
|
主机 |
IN |
矩阵乘法计划 |
|
|
设备 |
IN |
指向稠密矩阵的指针 |
|
设备 |
输出 |
指向压缩矩阵的指针 |
|
设备 |
输出 |
指向压缩临时缓冲区的指针 |
|
主机 |
IN |
用于计算的CUDA流 |
属性
该例程支持相对于
stream的异步执行每次运行提供确定性(逐位)结果
cusparseLtSpMMACompress() has to be called each time after the algorithm ID is updated with cusparseLtMatmulAlgGetAttribute().cusparseLtSpMMACompress() supports the following 优化:
CUDA图捕获
硬件内存压缩
有关返回状态的描述,请参见cusparseStatus_t。
cusparseLtSpMMACompress2 [已弃用]#
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)
参数 |
内存 |
输入/输出 |
描述 |
可选值 |
|---|---|---|---|---|
主机 |
IN |
cuSPARSELt 库句柄 |
||
主机 |
IN |
结构化(稀疏)矩阵描述符 |
||
|
主机 |
IN |
指定结构化(稀疏)矩阵是否位于第一个位置( |
|
|
主机 |
IN |
将在乘法运算中应用于结构化(稀疏)矩阵的操作 |
|
|
设备 |
IN |
指向稠密矩阵的指针 |
|
|
设备 |
输出 |
指向压缩矩阵的指针 |
|
|
设备 |
输出 |
指向用于压缩的临时缓冲区的指针 |
|
|
主机 |
IN |
用于计算的CUDA流 |
该函数具有与cusparseLtSpMMACompress()相同的属性