自作CPUの性能向上のために、これまで単一バンクだったデータキャッシュを作り変えてみよう。
バンク化の効果を確かめる。以下のようなプログラムを作ってLSUパイプラインの2つから別のバンクにアクセスをかけ、コンフリクトが発生するかどうかを確認する。
.section .text _start: la x1, data addi x2, x1, 256/8 li x20, 500 loop: ld x10, 0(x1) ld x11, 0(x2) addi x20, x20, -1 bne x20, zero, loop #include "common_pkg.S" TEST_FINISH
バンク化する前と後で、LSUパイプラインの衝突が回避されていることが確認できた。
ただし、全体の性能は大きく向上していない。これはつまりLSUの改善にフェッチ側はついて行けていないことを意味している。 フェッチ側は、たった3命令のループをストールなくフェッチできていない。 BTBによる予測はs0~s2で2サイクル必要なため、1サイクル余分に空いてしまうのだ。これを改善する必要があるように思える。