ループ処理の効率化

Yohna以降のIntelハードウェアではループを検出してプレデコード以前の処理を省略する機能があるらしい。このおかげでプレデコードの制限や複雑な命令をマイクロコードから読み出すことでおきるレイテンシを緩和できる。デコード処理は真面目に行っているようなのでyohnaでは最大3命令、C2Dでは最大4命令となるようだ。

Loop Stream Detector(LSD) ループストリーム検出器 @Merom
- とってもワイドな命令ストリーム帯域が潜在
- LSDが働くループの条件
-- 最大16 bytes x 4の命令パケット内で、18命令以内
-- RETやCALLを含まない
-- 分岐は4つ以内
-- 70回以上の反復で効果的
- LSDはPreDecodeよりも後にあるため、LCPの追加レイテンシコストがかからない
- LSDの使用とループアンローリングの使用はトレードオフだ 

alignした命令で64Byte, 18命令以内なので、内部で2-3の処理を行う短いループでうまく機能する。これを超えると16Byte毎に10サイクルくらいのストールがおきる、命令バッファーがあふれてほかの場所から読み出しているのかな。これまで演算器に独立した命令を送るために長いループを多用していたけど、短いループでも同程度のスループットがでるのでわかり易いものを選べばよい。