CSDN|如何写出让 CPU 跑得更快的代码?( 五 )


当 CPU 访问数据的时候 , 先是访问 CPU Cache , 如果缓存命中的话 , 则直接返回数据 , 就不用每次都从内存读取速度了 。 因此 , 缓存命中率越高 , 代码的性能越好 。
但需要注意的是 , 当 CPU 访问数据时 , 如果 CPU Cache 没有缓存该数据 , 则会从内存读取数据 , 但是并不是只读一个数据 , 而是一次性读取一块一块的数据存放到 CPU Cache 中 , 之后才会被 CPU 读取 。
内存地址映射到 CPU Cache 地址里的策略有很多种 , 其中比较简单是直接映射 Cache , 它巧妙的把内存地址拆分成「索引 + 组标记 + 偏移量」的方式 , 使得我们可以将很大的内存地址 , 映射到很小的 CPU Cache 地址里 。
要想写出让 CPU 跑得更快的代码 , 就需要写出缓存命中率高的代码 , CPU L1 Cache 分为数据缓存和指令缓存 , 因而需要分别提高它们的缓存命中率:

  • 对于数据缓存 , 我们在遍历数据的时候 , 应该按照内存布局的顺序操作 , 这是因为 CPU Cache 是根据 CPU Cache Line 批量操作数据的 , 所以顺序地操作连续内存数据时 , 性能能得到有效的提升;
  • 对于指令缓存 , 有规律的条件分支语句能够让 CPU 的分支预测器发挥作用 , 进一步提高执行的效率;
另外 , 对于多核 CPU 系统 , 线程可能在不同 CPU 核心来回切换 , 这样各个核心的缓存命中率就会受到影响 , 于是要想提高进程的缓存命中率 , 可以考虑把线程绑定 CPU 到某一个 CPU 核心 。分享个喜事 , 小林平日里忙着输出文章 , 今天收到一份特别的快递 , 是 CSDN 寄来的奖状 。
CSDN|如何写出让 CPU 跑得更快的代码?
本文插图
骄傲的说 , 你们关注的是 CSDN 首届技术原创第一名的博主 , 以后简历又可以吹牛了 。
【CSDN|如何写出让 CPU 跑得更快的代码?】没有啦 , 其实主要还是谢谢你们不离不弃的支持 。
点点赞点在看


推荐阅读