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_16BF
8 的倍数
有关返回状态的描述,请参阅 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
约束:
结构化或稠密矩阵描述符
A
matB
结构化或稠密矩阵描述符
B
matC
稠密矩阵描述符
C
matD
稠密矩阵描述符
D
computeType
计算精度
有关返回状态的描述,请参阅 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_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
每行每两个元素必须至少有一个非零值
对于
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 时钟频率下运行,以最大限度地提高性能。
可以使用函数 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() 相同的属性