srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

store to load forwarding

あるメモリアドレスに書き込む命令の後に同じアドレスから読み込む命令が続くとき, store forwarding が行われる.

mov DWORD [esi], edi
mov eax, DWORD [esi] 

上の例だと1行の書き込みが実際にL1$に書き込む前に, Store Bufferに書き込まれ, 読み込む命令はL1$にアクセスせずに, Store Bufferにあるデータを利用して処理を行う.

mov WORD [esi], di   ; small write
mov eax, DWORD [esi] ; big read (stall)

上のような読み込むサイズが書き込みサイズより大きい場合は, forwardingは行われない.

Ref

Store forwarding by example. | Denis Bakhvalov | C++ compiler dev.