背景
伴随着摩尔定律近30年的持续生效,CPU的运算速度迅速提升,而存储器(主要是内存)的速度提升相对较慢。这导致了存储器与CPU之间的速度差异,也称为存储器墙(Memory Wall)。当CPU执行指令时,如果需要从内存中读取数据或指令,由于存储器速度的限制,CPU可能需要等待访存操作完成,从而导致性能瓶颈。
现代计算机系统为了解决访存瓶颈问题,一般采用了多级缓存和内存层次结构,包括L1、L2、L3缓存以及主存等。虽然高速缓存(Cache)能够提供更快的访问速度,但其容量有限。当CPU访问的数据无法在高速缓存中找到时,就需要从更慢的内存层级中获取数据,这会导致较高的访存延迟和性能下降。
预取技术
预取(Prefetching)技术可以在一定程度上解决访存成为CPU性能瓶颈的问题。预取是一种提前将数据或指令从内存中预先加载到高速缓存中的技术[1]。通过预取,CPU可以在实际使用之前将数据预先加载到缓存中,从而减少对内存的访问延迟。这样可以提高访存的效率,减少CPU等待访存的时间,从而提升整体性能。
预取技术一般分为软件预取技术和硬件预取技术。
1. 软件预取
软件预取指的是软件可以通过编程的方式显式地指示CPU需要预取的数据。程序员可以通过一些特定的指令或者编译器选项来实现软件预取,以指导CPU进行数据的预取操作[2]。