パルテノン研究会のASICデザインコンテストの発表が土曜日に行われた。
このコンテストの規定課題は初心者向き課題としてSN/Xの例題パッケージをベースとした課題を出している。
参加者はかなり高度なことを行うようになったので、前回のパイプラインパッチに続き、多少の情報追加をブログベースで行っていく。
今回は、前回のパイプラインよりも、パイプラインストール条件をもう少し厳密にチェックするバージョンのSN/Xパッチファイルを用意した。(前回のパッチは、ロード命令がきたら無条件でストールさせるというかなり乱暴なものだったのだ)
本来は、ロード命令のターゲットを使わない演算はとめる必要がないのだが、もうひとつ、考慮すべきところとして、リソース競合がある。ロードはレジスタ書込みがR型命令に比べ1クロック遅いので、後続命令のレジスタ書込みがロードのレジスタ書込みとぶつかるケースがあるのだ。
対策としては、ぶつからないケースだけを実行するというのもありだが、Eステージの後ろでレジスタに書き込まない命令は少数なので、汎用レジスタを2R2W型にすることで、競合ケースを解消でき、もっと性能向上する。
もちろん、2Wのレジスタポートは多少性能に悪影響が与えられるので、トレードオフを考えて採否を決めるべきである。
本質的なデータハザード(ロード命令の結果を本当に必要とする演算命令によるストール)は避けようがないので、これらの対策を行うと、ハードウェア上の性能向上策としては、コントロールハザードの低減に目を向けるのが正しい。