Store Forwarding Enhancement
当一个读存操作紧跟在一个写存操作后,如果这两个操作访问同一个存储器地址,在符合转发条件的情况下,处理器可以直接将写存操作的数据发送给读存操作;这样就不必等待数据写入到存储器(包括高速缓存)之后再从存储器(包括高速缓存)中读取数据。这种行为被称为存储读取转发操作,简称为存储转发,可以大大节省读存操作获取数据的延迟周期数。
要想实施无延迟的存储转发,必须要满足一些条件:
- 要转发的存储数据必须是读存操作之前的最后一条写存操作
- 写存操作要存储的数据长度必须大于等于读存操作要读取的数据长度
- 要读取的数据必须完全包含在写存操作的数据中
注:我觉得满足第三条条件的话,就没必要再说第二条了。
根据写存操作与读存操作中不同的地址对齐方式以及操作数长度,可以确定1)或者可以实行存储转发操作,2)或者是无法转发,不得不通过高速缓存/存储器子系统进行写/读操作,从而遭受性能延迟。45纳米的Enhanced Intel Core微架构相比前一代Intel Core微架构放松了转发条件,允许更加灵活的地址对齐方式和操作数长度要求。Intel Nehalem微架构进一步放松了转发条件,允许在更多的场景下进行快速的转发。
下图是16字节的存储操作存储转发条件,同时标出了Nehalem微架构做的增强。
Intel Nehalem微架构可以无视存储地址的对齐方式进行存储转发操作。下图是8字节或更少字节的存储操作可以转发的情形。