---
title: 图像识别场景调优报告-官方技术文章-鲲鹏社区
description: 图像识别项目在鲲鹏迁移替换后，性能劣化严重，本文章通过向量化改造、线程池调整、绑核优化和CPU性能设置等手段，将性能从22113优化至16844，提升23.8%。
keywords: 图像识别场景调优报告,官方技术文章,鲲鹏社区,调优背景,测试环境,负载分析,代码分析,特征分析及优
url: https://www.hikunpeng.com/developer/techArticles/20260612-2?envFlag=1
section: (其他)
---

# 图像识别场景调优报告-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20260612-2?envFlag=1
描述: 图像识别项目在鲲鹏迁移替换后，性能劣化严重，本文章通过向量化改造、线程池调整、绑核优化和CPU性能设置等手段，将性能从22113优化至16844，提升23.8%。
关键词: 图像识别场景调优报告,官方技术文章,鲲鹏社区,调优背景,测试环境,负载分析,代码分析,特征分析及优

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

图像识别场景调优报告

图像识别场景调优报告

原生开发DevKit性能调优指令集

发表于 2026/06/12

0

## 1调优背景

图像识别项目在鲲鹏迁移替换后，性能劣化严重，具体来说，其中某个向量化计算benchmark当前鲲鹏机型运行时长为20398（920新型号）< 38232（920），期望920新型号运行时长达到17000，急需通过调优释放鲲鹏服务器潜力

## 2测试环境

机型：920新型号，256核心（开启超线程），共4个numa，总内存470G，

测试条件：

在docker内部测试，测试前保证环境空载，仅使用10个工作线程，引入环境变量如下：

OMP_THREAD_LIMIT=10

OMP_NUM_THREADS=1

OMP_WAIT_POLICY=PASSIVE

OPENBLAS_NUM_THREADS=1

MKL_DYNAMIC=FALSE

KMP_BLOCKTIME=0

## 3负载分析

### 3.1      benchmark代码分析

根据对benchmark代码进行详细解读分析，发现以下特征：

1、代码逻辑为使用faiss根据向量化内积计算相似度，几乎纯吃cpu计算和内存资源，

2、性能指标为所有线程的总运行时长（总计算量固定的情况下可以近似看作为单线程的计算时间）

3、当前benchmark配置中固定了线程池大小为100

### 3.2特征分析及优化方向初探

根据3.1中所提到特征，怀疑可能的调优方向如下：

1、  faiss数据库并未做arm上的特殊适配，可以通过向量化替换改造开源faiss以及其三方库openBLAS，充分发挥鲲鹏向量化能力

2、由于近似看做单线程的计算时间，所以当前benchmark测试方向为单核性能，而鲲鹏服务器在多核计算场景下更具优势，所以本测试场景对鲲鹏服务器并不友好，可以尝试超线程等手段进一步提升单核性能

3、当前OMP工作线程仅为10，而上层设置线程池数量远大于10，会导致线程切换、系统资源使用不平衡等问题，可以将线程池大小设置为与OMP工作线程数相同。

## 4测试基线

使用faiss（1.5.3）+ openBLAS（0.3.8），使用章节二中的环境变量测试得到的性能指标为22113

测试过程中通过DevKit tuner/ksys采集的关键性能指标为：

numa：

topdown：

频率：

指令：

可以明显发现：

1、存在较大的跨numa流量访问的情况，可以后续通过绑核优化

2、由于先验在920测试所得的SIMD占比（14%），而920新型号上该项占比达到68%，提升非常明显，怀疑可能是openBLAS中使用了较多sve指令的优化，也进一步印证了现场测试过程中38232（920）远大于20398（920新型号）

3、  CPU频率存在明显减低，当前频率模式为ondemand，后续可以通过使用性能模式稳定频率

4、由于benchmark场景比较固定，当前IPC已处于较高水平

# 5调优过程

## 5.1向量化替换改造

通过对faiss进行向量化改造，并升级openBLAS到0.3.31版本，其他测试条件不变，得到性能指标为20124

测试过程中通过DevKit tuner/ksys采集的关键性能指标为：

topdown：

指令：

根据上述数据分析得到

1、IPC相较于基线有进一步提升，验证了向量化改造的效果

2、SIMD指令从68% -> 69%，提升比例不大，进一步采集hotspot，发现所改造的faiss向量化指令并不在热点中，热点中占比最高的部分均在openblas的汇编模块，faiss所占比例较小，且经过源码查看，该部分并不能进行向量化改造。

## 5.2线程池调整+绑核

在5.1的基础上，设置线程池大小为10，并通过numactl -C 2,4,6,8,10,12,14,16,18,20,22绑11个核(主线程和线程池内10个线程)，偶数绑核是考虑在SMT开启情况下，充分使用物理核；最后得到性能指标为17474

测试过程中通过DevKit tuner/ksys采集的关键性能指标为：

numa：

可以看到IPC已达到3.65，处于特别高的水平，说明此时程序指令执行效率高，且无跨numa流量

## 5.3开启CPU频率性能模式

在5.2的基础上，把cpu频率均设置为性能模式，最终测试得到性能指标为16633，已满足调优诉求

echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

复测一次后，结果为17054，取两者平均为16844

## 5.4超线程

考虑到主要测试对象为单核性能，因此在BMC中尝试超线程后测试，在5.3的基础上，最终测试得到性能指标为18383，性能发生劣化，舍弃

## 5.5调优手段汇总

考虑到上述手段在调优过程中存在交叉使用的情况，为了方便评估每项调优手段的影响，将每种调优手段独立应用进行调优，且为保证测试结果所得结果如下所示：

|  | 性能指标(基线22113) | 相对基线提升比例 |
| --- | --- | ---|
| 向量化替换faiss | 22055 | 0.3% |
| openBLAS升级 | 20124 | 9.0% |
| 线程池设置为10 | 18096 | 18.2% |
| 设置cpu频率性能模式 | 20831 | 5.8% |
| 绑核（线程池100，绑numa 0,1） | 22652 | -2.4% |
| 绑核（线程池10，偶数绑核） | 17865 | 19.2% |
| 超线程 | 20350 | 8.0% |
| 向量化替换faiss+openBLAS升级+线程池替换+绑核 | 17474 | 21.0% |
| 向量化替换faiss+openBLAS升级+线程池替换+绑核+ cpu频率性能模式 | 16844 | 23.8% |

# 6测试结论

通过向量化替换faiss+openBLAS升级+线程池替换+绑核+设置cpu频率性能模式，在本地测试中，调优后的性能指标最终为16844，相比本地基线（22113）提升23.8%，相比现场测试基线（20398）提升18.5%，基本满足调优诉求

本页内容
