内存空间布局优化,将结构体成员在内存中的排布进行新的排列组合,来提高cache的命中率。
将以下结构体:
1 2 3 4 5 6 | struct S { type1 field1; // Hot field type2 field2; }; S *v; |
转化为:
1 2 3 4 5 6 7 8 9 | struct S_hot { type1 field1; }; struct S_cold { type2 field2; }; S_hot *v_hot;S_cold *v_cold; |
将以下结构体:
1 2 3 4 5 6 | struct { type1 field1; type2 field2; type3 field3; } arr[N]; |
转化为:
1 2 3 4 5 6 | struct { type1 field1[N]; type2 field2[N]; type3 field3[N]; } arr; |
在编译选项中加入:
1 | -O3 -flto -flto-partition=one -fipa-struct-reorg |
-fipa-struct-reorg选项,需要在-O3 -flto -flto-partition=one全局同时开启的基础上才使能。
SPEC性能提升效果:SPECCPU2017 intrate 505.mcf子项性能提升20%。