ループ処理の効率化
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サイクルくらいのストールがおきる、命令バッファーがあふれてほかの場所から読み出しているのかな。これまで演算器に独立した命令を送るために長いループを多用していたけど、短いループでも同程度のスループットがでるのでわかり易いものを選べばよい。