---
title: 运行态自动适配
description: "上层业务代码如果要根据不同的芯片类型设置不同的参数，或者走不同的代码逻辑路径，可以通过实时查询芯片类型来判断，这样代码实现了自动适配芯片类型。与编译宏控制方法的区别是，这类代码和编译无关，不同芯片架构都可以编译。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenggrf/codeprtr/kunpengtaishanporting_12_0057.html
sourcePath: /source/zh/kunpenggrf/codeprtr/kunpengtaishanporting_12_0057.html
indexId: ed4a91043059145a5596314ad61f23d69bfd2d73e5f04b3a308dd2a4269de2f265
---
# 运行态自动适配

上层业务代码如果要根据不同的芯片类型设置不同的参数，或者走不同的代码逻辑路径，可以通过实时查询芯片类型来判断，这样代码实现了自动适配芯片类型。与编译宏控制方法的区别是，这类代码和编译无关，不同芯片架构都可以编译。

#### 处理步骤

简单通用的方法是实时查询CPU的类型，根据查询结果来判断。如，Linux系统可以通过lscpu命令来实现：

执行命令: lscpu | grep Archit | awk '{print $2}'

- 鲲鹏服务器显示结果：

```
[root@16u ~]#
lscpu | grep Archit | awk '{print $2}'
aarch64
```


- x86服务器显示结果：

```
[root@16u ~]#
lscpu | grep Archit | awk '{print $2}'
x86_64
```


编程语言有类似系统调用的system()函数，通过这类函数执行上述shell命令，根据执行结果判断代码分支执行路径。

```
// 自动识别芯片类型，伪代码
strCmdLine = "
lscpu | grep Archit | awk '{print $2}'
";
strExeResult = system(strCmdLine);
if ("aarch64" == strExeResult)    //如果是鲲鹏芯片业务代码放在这里
{
……
}
if ("x86_64" == strExeResult)    //如果是x86芯片业务代码放在这里
{
……
}
```

除了lscpu命令以外还有很多其他方法可以判断底层芯片类型，根据业务情况自行选择。
