---
title: 单机版
description: "当前KML_SOLVER仅有单节点多线程，无法替代PETSc的多节点功能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/mg/kunpengaccel_12_0057.html
sourcePath: /source/zh/kunpenghpcs/hpckit/mg/kunpengaccel_12_0057.html
indexId: 9ba424f93dccdd56f2990aaf62742074800bc0eeedc55271423092dcf6494f0458
---
# 单机版

#### 可替换性

当前KML_SOLVER仅有单节点多线程，无法替代PETSc的多节点功能。

如表 PETSc的替换映射关系所示为可替换的接口与PETSc相应接口的映射关系（仅给出已优化的接口）。


**表1 PETSc的替换映射关系**

| PETSc接口 | KML\_SOLVER接口 |
| --- | --- |
| KSPCreate | KmlIssCgInitDI |
| KSPSolve | KmlIssCgSolveDI |
| KSPDestroy | KmlIssCgCleanDI |


以上接口均为C接口，请参见《Kunpeng HPCKit 26.1.RC1 安装指南》(https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0827.html)中“鲲鹏数学库开发指南 > 应用数学库 > KML_SOLVER库函数说明 > 函数定义（单机版）”章节。


#### C语言迁移步骤

PETSc提供C接口，KML_SOLVER同样也提供了C接口，但接口名及接收参数不一致，需要进行对应功能的切换，举例如下：

1. 初始化。
  迁移前： 1 2 3 4 KSP ksp; PetscErrorCode ierr; ierr = KSPCreate(PETSC_COMM_WORLD,&ksp); ierr = KSPSetOperators(ksp,A,A);

  迁移后： 1 2 3 4 5 6 int n = 8; int ia[9]; int ja[17]; double a[17]; void* handle; int error = KmlIssCgInitDI(&handle, &n, a, ja, ia);

2. 求解。
  迁移前： 1 2 3 4 5 6 7 8 Vec u,x,b; ierr = VecCreate(PETSC_COMM_WORLD,&u); ierr = VecSetSizes(u,PETSC_DECIDE,rdim); ierr = VecSetFromOptions(u);CHKERRQ(ierr); ierr = VecDuplicate(u,&b);CHKERRQ(ierr); ierr = VecDuplicate(b,&x);CHKERRQ(ierr); ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr);

  迁移后： 1 2 3 4 5 6 double b[8]; /* Solution vector */ double x[8]; int nrhs = 1; /* Number of right-hand sides */ int ldx=n, ldb=n; /* Leading dimension of B and X */ int error = KmlIssCgSolveDI(&handle, &nrhs, x, &ldx, b, &ldb);

3. 获取迭代参数。
  迁移前： 1 2 PetscInt its; ierr = KSPGetIterationNumber(ksp,&its);CHKERRQ(ierr);

  迁移后： 1 2 3 int *data; // user data. int nd = 1; int error = KmlIssCgGetDII(&handle, ITERATION_COUNT, data, nd);

4. 清除。
  迁移前： 1 ierr = KSPDestroy(&ksp);

  迁移后： 1 int error = KmlIssCgCleanDI(&handle);

5. 头文件。
  迁移前：

  #include "petscksp.h"

  迁移后：

  #include "kml_iss.h"

6. 编译链接。
  替换PETSc相关的链接选项，具体选项请参见《Kunpeng HPCKit 26.1.RC1 安装指南》(https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/instg/KunpengHPCKit_install_024.html)安装KML。
