You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
背景介绍
近年来,在政策支持和市场需求的双重推动下,信创(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