そもそも、SN/Xはレジスタが少ないので、ほとんど2つのパイプがぶつかり、あまりスーパースケーラの効果はないのだが、サンプルとして作ってみた。
サンプルなので、とりあえず、やっつけ仕事で作ってみたが、まだバグが取りきれていない。アセンブラにも手を入れないと、PパイプでHLTしたときに、Qパイプにハザードデータが読まれて安全に停止できない・・
来週まであまり時間が取れないので、デバッグしていただける方がいたら、ご協力お願いします。
分岐予測と、ロードサプレスの条件が問題でした。とりあえず、解決したつもり。
その他のバグがないとは言い切れませんが・・
(コンパイルには20080717版のsfl2vlが必要です)
スーパースケーラ版 SN/X SFLファイル
同 テストベクトル
分岐予測はPパイプ(メイン側)しかしません。Qパイプでの分岐は必ず予測ミスとして分岐ストールを発行します。メモリはどちらのパイプも任意のアドレスから実行可能としてます。(普通は、アドレス固定するのですが、簡単のため。)
Pパイプでメモリ参照するときには、Qパイプはストールします。
等々、相当サボった実装なので、性能向上の役にはあまり立ちません。
sortの例題でパイプラインのデータキャッシュ付きに比べて、150クロック程度の
向上にとどまっています。
レジスタは4R3Wに変更しています。
LD/STがぶつからないようにしているので、キャッシュは2本のパイプで共用。
サンプルなので、とりあえず、やっつけ仕事で作ってみた
来週まであまり時間が取れないので、デバッグしていただける方がいたら、ご協力お願いします。
分岐予測と、ロードサプレスの条件が問題でした。とりあえず、解決したつもり。
その他のバグがないとは言い切れませんが・・
(コンパイルには20080717版のsfl2vlが必要です)
スーパースケーラ版 SN/X SFLファイル
同 テストベクトル
分岐予測はPパイプ(メイン側)しかしません。Qパイプでの分岐は必ず予測ミスとして分岐ストールを発行します。メモリはどちらのパイプも任意のアドレスから実行可能としてます。(普通は、アドレス固定するのですが、簡単のため。)
Pパイプでメモリ参照するときには、Qパイプはストールします。
等々、相当サボった実装なので、性能向上の役にはあまり立ちません。
sortの例題でパイプラインのデータキャッシュ付きに比べて、150クロック程度の
向上にとどまっています。
レジスタは4R3Wに変更しています。
LD/STがぶつからないようにしているので、キャッシュは2本のパイプで共用。