Kunpeng gcc 优化选项详解系列 -- 结构体拆分优化

举报
卜乐 发表于 2021/07/30 16:51:31 2021/07/30
【摘要】 本文介绍鲲鹏gcc中的结构体优化及其应用实例

内存访问速度往往会成为HPC应用的主要瓶颈。例如SPEC CPU 2017 benchmark 中的 mcf 子项,就是对内存要求极高的应用。它是一款叫做MCF的大规模交通规划软件的核心代码。 其瓶颈代码如下图左边所示。
image.png
可见在 struct 中,data1 的使用率极高,而 data2 是不使用的。然而由于源代码中,数据的排布是以结构体数组的形式排布。按照一般的编译方式,拿数据时每次都会将整个结构体放到 cache 里面,导致大量不参与计算的 data2 也被加载到了 cache 中,造成高速内存空间的浪费和性能的损耗。

鲲鹏gcc针对这一类应用瓶颈, 开发了结构体拆分优化,开关选项为 -fipa-struct-reorg。其原理是在编译过程中找到适合优化的内存场景后,通过将结构体数组变为数组结构体的方式(如上图右),将有效数据紧凑排布,从而提高 cache 命中率和应用性能。

经测试,此优化可以对 mcf 子项带来30%+的性能提升。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。