【规则包上新】信创迁移优化 #979
cocorunning
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景介绍
近年来,在政策支持和市场需求的双重推动下,信创(ARM64)架构市场呈现出快速增长的趋势。越来越多的软件系统对于信创迁移有着迫切的需求。为此,TCA团队整理了从x86迁移到ARM64架构的通用优化点,并实现上线了《【C/C++】信创迁移优化》和《【C/C++】强化信创迁移优化》规则包。
优化内容
CacheLine对齐
CPU在读取数据的时候,不是一个byte一个byte读取的,而是按照CacheLine为单位读取的。CPU标识Cache中的数据是否为有效数据不是以内存位宽为单位,而是以CacheLine为单位。但这个机制可能会因为高频访问的数据未按照CacheLine大小对齐而导致出现伪共享(false sharing)现象,进而使得CPU的Cache命中率变低,降低访问速度。
常见处理器,如Intel X86的icelake等,Cacheline大小多为64字节。而ARM64架构的就可能不一样,比如华为鲲鹏920处理器的Cacheline大小为128字节。所以在信创迁移的过程中需要将代码修改为跟目标架构CacheLine对齐,从而带来性能的提升。
关键ASM指令替换
x86和AMR64架构的ASM指令不是一一对应的,存在缺失或者有更优指令的情况,所以如果在迁移过程中针对这些差异进行ARM64适配的话,会大大提升软件系统在ARM64架构上的性能。比如可以使用crc32cb指令来加速CRC32计算。
编译选项优化
编译选项优化是针对编译器的特定配置项进行调整,以获得更好的编译结果和目标代码的质量。同样,针对ARM64架构,可以通过调整编译选项来直接提升性能。比如-march=armv8-a 选项是用于指定GCC生成代码的目标CPU架构为ARMv8-A架构。当在ARM64机器上使用-march=armv8-a选项编译时,GCC将会针对这个目标CPU架构进行一些优化(比如使用SIMD指令集来实现单个指令中执行多个数据操作,从而提高代码的执行速度)。
启用规则包
分析方案 -> 代码检查 -> 【C/C++】信创迁移优化规则包/ 【C/C++】强化信创迁移优化规则包-> 启用/查看规则

云官网同步上新,欢迎体验。
体验版地址:https://tca.tencent.com/
关注我们,持续为您的代码助力!
公众号(腾讯云静态分析)大量干货,欢迎关注。
活跃的开源交流群,可痛快畅谈技术&高效解答问题,欢迎进群!
Beta Was this translation helpful? Give feedback.
All reactions