ぼくのかんがえたさいきょうCPU:バリア命令

 メモリオーダリングでロードやストアの順序を入れ替えて効率よく実行させるが、いったん実行中のメモリアクセスを完了させる用途にバリア命令を用意。


命令フォーマット:01110xxx 8種類


メモリ関係:

FENCE #LD この命令以前のストア命令を完了
FENCE #ST この命令以前のロード命令を完了
#FENCE #LDST この命令以前のロードストア命令を完了

 ロード命令どうしで入れ替わらない、ストア命令どうしで入れ替わらない、またはロードとストアで入れ替わらないといった制御はキャッシュの状態によって変わってしまうのでメモリ操作命令が発行された後での制御は難しい。そこでロード命令の完了待ちをすることで現在実行中のストア命令を追い越すロード命令はなくなるし、入れ替わって実行されるロード命令もこれ以降なくなる。
 このバリア命令はメモリオーダリングに関連する。インオーダ命令実行でもメモリ操作命令の入れ替わりは発生しうる。


命令実行関係:

FENCE #INT この命令以前に発生する割り込みはない

 割り込みを起こしうる命令の実行が終わっていることを保証する。


FENCE #ALU この命令以前に演算器の使用は完了している

 特に時間のかかる除算や浮動小数点演算の完了を待ち合わせる。浮動小数点演算の場合はこのバリア命令以降、浮動小数点のステータスレジスタに反映される内容が確定する。


FENCE #PAR この命令以前の並列実行は完了している

 アウトオブオーダ実行ならこれ以前の命令はすべてCommit済。
明示的な並列実行なら以下の手順。
先行する命令列Aにバリア命令があれば、後続で並列実行する命令列Bの実行を破棄
後続の命令列Bにバリア命令があれば、先行する命令列Aの完了待ち。つまり命令列Bはこれ以上実行しない


FENCE #SYNC この命令以前のパイプライン実行が完了

 パイプラインを空にする。


 あと1個空いている。#SYNCは要るかなあ?





ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック