Kunpeng gcc 优化选项详解系列 -- 结构体拆分优化
【摘要】 本文介绍鲲鹏gcc中的结构体优化及其应用实例
内存访问速度往往会成为HPC应用的主要瓶颈。例如SPEC CPU 2017 benchmark 中的 mcf 子项,就是对内存要求极高的应用。它是一款叫做MCF的大规模交通规划软件的核心代码。 其瓶颈代码如下图左边所示。
可见在 struct 中,data1 的使用率极高,而 data2 是不使用的。然而由于源代码中,数据的排布是以结构体数组的形式排布。按照一般的编译方式,拿数据时每次都会将整个结构体放到 cache 里面,导致大量不参与计算的 data2 也被加载到了 cache 中,造成高速内存空间的浪费和性能的损耗。
鲲鹏gcc针对这一类应用瓶颈, 开发了结构体拆分优化,开关选项为 -fipa-struct-reorg。其原理是在编译过程中找到适合优化的内存场景后,通过将结构体数组变为数组结构体的方式(如上图右),将有效数据紧凑排布,从而提高 cache 命中率和应用性能。
经测试,此优化可以对 mcf 子项带来30%+的性能提升。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)