5.12 理解内存性能
5.12 理解内存性能
到目前为止我们写的所有代码,以及运行的所有测试,只访问相对比较少量的内存。例如,我们都是在长度小于 1000 个元素的向量上测试这些合并函数,数据量不会超过 8000 个字节。所有的现代处理器都包含一个或多个高速缓存(cache)存储器,以对这样少量的存储器提供快速的访问。本节会进一步研究涉及加载(从内存读到寄存器)和存储(从寄存器写到内存)操作的程序的性能,只考虑所有的数据都存放在高速缓存中的情况。在第 6 章,我们会更详细地探究高速缓存是如何工作的,它们的性能特性,以及如何编写充分利用高速缓存的代码。
如图 5-11 所示,现代处理器有专门的功能单元来执行加载和存储操作,这些单元有内部的缓冲区来保存未完成的内存操作请求集合。例如,我们的参考机有两个加载单元,每一个可以保存多达 72 个未完成的读请求。它还有一个存储单元,其存储缓冲区能保存最多 42 个写请求。每个这样的单元通常可以每个时钟周期开始一个操作。