上层业务代码如果要根据不同的芯片类型设置不同的参数,或者走不同的代码逻辑路径,可以通过实时查询芯片类型来判断,这样代码实现了自动适配芯片类型。与编译宏控制方法的区别是,这类代码和编译无关,不同芯片架构都可以编译。
简单通用的方法是实时查询CPU的类型,根据查询结果来判断。如,Linux系统可以通过lscpu命令来实现:
执行命令: lscpu | grep Archit | awk '{print $2}'
[root@16u ~]# lscpu | grep Archit | awk '{print $2}' aarch64
[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命令以外还有很多其他方法可以判断底层芯片类型,根据业务情况自行选择。