各位开发者你们好:
我最近查看gcc for openEuler的相关文档发现,ipa-struct-reorg是被实现且集成在gcc里的,且其优化效果在SPEC CPU2006的mcf上似乎表现很好(我并未验证)。通过查看源码也发现,其能针对只有两个field的结构体进行拆分,将hot field和cold field分开,进而提高cache命中率,对内存也更加友好。但是SPEC CPU2006的libquantum测试样例也同样满足这一点,其核心数据结构如下,但其优化效果却几乎没有
libquantum中最耗时的三个核心函数:
- quantum_toffli()
- quantum_sigma_x()
- quantum_cnot()
这三个函数的特点也是只访问state这一成员变量,而amplitude则几乎不被访问。所以这个情况下的优化效果也应该很好才对。但通过实际测试发现和原本的未修改的gcc对比,优化效果几乎没有。所以想请问下发生这种情况的原因,以及有什么好的解决方案吗?
我测试用的命令和环境如下:
各位开发者你们好:
我最近查看gcc for openEuler的相关文档发现,ipa-struct-reorg是被实现且集成在gcc里的,且其优化效果在SPEC CPU2006的mcf上似乎表现很好(我并未验证)。通过查看源码也发现,其能针对只有两个field的结构体进行拆分,将hot field和cold field分开,进而提高cache命中率,对内存也更加友好。但是SPEC CPU2006的libquantum测试样例也同样满足这一点,其核心数据结构如下,但其优化效果却几乎没有
struct quantum_reg_node_struct { float _Complex amplitude; /* alpha_j */ MAX_UNSIGNED state; /* j */ };libquantum中最耗时的三个核心函数:
这三个函数的特点也是只访问
state这一成员变量,而amplitude则几乎不被访问。所以这个情况下的优化效果也应该很好才对。但通过实际测试发现和原本的未修改的gcc对比,优化效果几乎没有。所以想请问下发生这种情况的原因,以及有什么好的解决方案吗?我测试用的命令和环境如下: