ホーム 道しるべ 憩いの広場 濃緑空間 濃緑研の日記

最適化2
ホーム ] 上へ ] 逆数(除算) ] 逆数平方根と平方根 ] 処理時間を測ろう ] 配列の扱い・最適化1 ] [ 最適化2 ]

 

最適化1では並列に実行できる命令を探し出して、コードをペアリングさせました。

ここでは、それ以外にプレデコードを最適に行わせるための命令発行というものがあります。

命令は命令キャッシュラインフィルの間にプレデコードされます。3DNow!命令はその後のx86命令のプレデコードとデュアルデコードの邪魔をしないように発行する必要があるとのことです。

そのためには、以下のことに留意するようにいわれています。

bulletショートデコード可能で、かつプレデコード情報を必要とするのはx86命令のサブセット
EMMS、FEMMS、PREFETCH以外の3DNow!命令が相当します。

bulletプレデコード可能な命令長は最大7バイト

bulletK6-2のプレデコーダは、命令の最初の3バイトを調べて命令の長さを決定する。
従って以下のモード

bullet[disp32+index]
bullet[disp32+scale index]
bullet[base+index]
bullet[base+scale index]

を使う命令は命令長の判定に4バイトを必要とするためプレデコードできません。

bullet32ビットmodR/Mアドレスモード[ESI]はプレデコードできません。
(注)筆者?????

bullet命令がキャッシュラインの最後の2バイトで始まるとプレデコードロジックは命令長を判定できません。
同じく?????