---
title: KmlDssAnalyze
description: "分析输入矩阵，包括Reordering、符号分解等。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0770.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/accel/kunpengaccel_kml_16_0770.html
indexId: 07485ad2be28d5b86c8201db3187e66759fd2026e0328aca14b345537671085976
---
# KmlDssAnalyze

分析输入矩阵，包括Reordering、符号分解等。

#### 接口定义

C Interface：

int KmlDssAnalyze(KmlDssSolver *solver, const KmlSolverMatrix *matrix, const KmlDssAnalyzeOption *option);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| solver | KmlDssSolver \* | 由KmlDssInit创建的求解器句柄。 | 输入 |
| matrix | KmlSolverMatrix \* | 矩阵句柄，由KmlSolverMatrixCreate函数创建，不可为空指针。 | 输入 |
| option | KmlDssAnalyzeOption \* | 分析阶段配置选项，不可为空指针，具体内容如表1所示。 | 输入 |


**表1 KmlDssAnalyzeOption结构体字段描述**

| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| fieldMask | uint64\_t | 配置生效的字段掩码。非0的位代表配置对应字段指定的值，0的位代表使用默认值，可配置的掩码位请参见具体字段的说明。 |
| nThreadsAnalyze | int32\_t | 分析阶段线程数，默认和KmlDssInit阶段设置的求解器初始线程数相同。 掩码位：KMLDSS\_ANALYZE\_OPTION\_NTHREADS\_ANALYZE |
| nThreadsFactorize | int32\_t | 分解阶段线程数，默认和KmlDssInit阶段设置的求解器初始线程数相同。 掩码位：KMLDSS\_ANALYZE\_OPTION\_NTHREADS\_FACTORIZE |
| nThreadsSolve | int32\_t | 回代阶段线程数，默认和KmlDssInit阶段设置的求解器初始线程数相同。 掩码位：KMLDSS\_ANALYZE\_OPTION\_NTHREADS\_SOLVE |
| matchingType | KmlDssMatchingType | matching算法类型，有如下值。 KMLDSS\_MATCHING\_OFF表示关闭稳定性，默认选项。 KMLDSS\_MATCHING\_MC64表示最大权重匹配算法（Maximum Weighted Matching Algorithm），可以改善数值分解过程中的主元大小，一般用于非对称矩阵。 KMLDSS\_MATCHING\_SMC64表示对称最大权重匹配算法（Symmetric Maximum Weighted Matching Algorithm），可以改善数值分解过程中的主元大小，一般用于对称或结构对称矩阵。 掩码位：KMLDSS\_ANALYZE\_OPTION\_MATCHING\_TYPE |
| nThreadsMatching | int32\_t | matching阶段线程数，默认和分析阶段线程数相同。 掩码位：KMLDSS\_ANALYZE\_OPTION\_NTHREADS\_MATCHING |
| rdrType | KmlDssRdrType | Fill\-in reduction算法类型，有如下值。 KMLDSS\_RDR\_KRDR表示KML Reorder做Fill\-in reduction，默认选项。 KMLDSS\_RDR\_CUSTOM表示使用自定义Fill\-in reduction函数。 掩码位：KMLDSS\_ANALYZE\_OPTION\_RDR\_TYPE |
| nThreadsRdr | int32\_t | Fill\-in reduction线程数，默认和分析阶段线程数相同。 掩码位：KMLDSS\_ANALYZE\_OPTION\_NTHREADS\_RDR |
| customRdrAlgo | KmlDssCustomRdrAlgo | 用户自定义的Fill\-in reduction函数，该函数的原型为typedef int (\*KmlDssCustomRdrAlgo) (const KmlSolverMatrixStore \*store, void \*perm, void \*iperm, void\* arg); 如果rdrType未设置为KMLDSS\_RDR\_CUSTOM时忽略该字段。 如果rdrType设置成了KMLDSS\_RDR\_CUSTOM但该字段及rdrPerm字段均未设置，则不进行Fill\-in reduction，优先级为rdrPerm>customRdrAlgo。 掩码位：KMLDSS\_ANALYZE\_OPTION\_CUSTOM\_RDR\_ALGO |
| customRdrArgs | void \* | 在调用自定义Fill\-in reduction函数时会将该字段作为最后一个参数，用户可以通过该字段传入自定义Fill\-in reduction函数中需要用到的其它参数。 掩码位：KMLDSS\_ANALYZE\_OPTION\_CUSTOM\_RDR\_ARGS |
| rdrPerm | void \* | 传入用户自定义的Fill\-in reduction的perm，映射关系为重排后矩阵的第i行/列是原始矩阵中的第rdrPerm[i]行/列。 如果rdrType未设置为KMLDSS\_RDR\_CUSTOM时忽略该字段。 如果rdrType设置成了KMLDSS\_RDR\_CUSTOM但该字段及customRdrAlgo字段均未设置，则等价于KMLDSS\_FR\_NONE，优先级为rdrPerm>customRdrAlgo。 掩码位：KMLDSS\_ANALYZE\_OPTION\_RDR\_PERM |
| pivotingType | KmlDssPivotingType | pivoting算法类型，有如下值。 KMLDSS\_PIVOTING\_OFF表示关闭动态选主元，默认选项。 KMLDSS\_PIVOTING\_LOCAL表示局部动态选主元。 掩码位：KMLDSS\_ANALYZE\_OPTION\_PIVOTING\_TYPE |
| pivotingThreshold | double | pivoting阈值，暂不支持设置。 掩码位：KMLDSS\_ANALYZE\_OPTION\_PIVOTING\_THRESHOLD |
| batchNRHS | int64\_t | 回代阶段每一批同时求解的最大右端向量个数，该参数为性能优化选项，和实际求解的右端向量个数无关。默认数值为1。 掩码位：KMLDSS\_ANALYZE\_OPTION\_BATCH\_NRHS |
| schurSize | int64\_t | 部分分解中schur补矩阵的大小。默认数值为0。 掩码位：KMLDSS\_ANALYZE\_OPTION\_SCHUR\_SIZE |
| schurFormat | KmlSolverMatrixStoreFormat | 部分分解中schur补矩阵的存储格式，可选矩阵存储格式请参见KmlSolverMatrixCreate()的参数说明，默认值为KMLSS\_MATRIX\_STORE\_DENSE\_ROW\_MAJOR。 掩码位：KMLDSS\_ANALYZE\_OPTION\_SCHUR\_FORMAT |
| matrixTransType | KmlDssMatrixTransType | 转置类型，有如下值。 KMLDSS\_MATRIX\_NO\_TRANS表示求解原始线性系统，默认选项。 KMLDSS\_MATRIX\_TRANS表示求解转置后的线性系统。 掩码位：KMLDSS\_ANALYZE\_OPTION\_MATIRX\_TRANS\_TYPE |


#### 返回值

| 返回值 | 类型 | 描述 |
| --- | --- | --- |
| KMLSS\_NO\_ERROR | int | 正常执行。 |
| KMLSS\_INTERNAL\_ERROR | int | 内部错误。 |
| KMLSS\_NULL\_ARGUMENT | int | solver，matrix，option存在空参数。 |


#### 依赖

#include "kml_dss.h"
