cacheline相关优化手段

1. cacheline对齐

避免读取的数据跨越2个cacheline,结构体可以cacheline对齐,连续的数组可以尝试首地址cacheline对齐,但可能造成浪费。

2. 分支预测

可以使用likely/unlikely这样的宏,提高cacheline命中的概率。

存在多个条件判断时,根据几率调整每个分支的顺序。

3. 延迟计算

最近用不到的变量不要进行初始化,和编程规范可能相背。

4. 寄存器参数

尽量使用寄存器作为函数参数。

5. 相关代码相邻

相关的代码或文件尽量相邻,相关的代码编译到一起,提高cache的命中率。

6. 代码冗余

减少冗余代码与死代码。

7. 读写分离

两个无关的变量,一个读,一个写,而这 两个变量在一个cache line里面。那么写会导致cache line失效。

8. 数据预取

数据预取的依据是预取的数据 马上会用到,这个应该符合空间局部性(spatial locality),但是如何知道预取的数据会被用到,这个 要看上下文的关系。一般来说,数据预取在循环里面用的比较多,因为循环是最符合空间局部性的代码。

可以使用__builtin_prefetch()等函数。

原文地址:https://www.cnblogs.com/HadesBlog/p/13741551.html