... | @@ -39,11 +39,11 @@ RV32IM向けにコンパイルしたCoreMarkのトレースは[内部用wiki](ht |
... | @@ -39,11 +39,11 @@ RV32IM向けにコンパイルしたCoreMarkのトレースは[内部用wiki](ht |
|
|
|
|
|
パイプライン化を完成させた後に行う課題になります。
|
|
パイプライン化を完成させた後に行う課題になります。
|
|
|
|
|
|
パイプライン化を行うと、適宜ストールを発生させる必要があります。特に、ストールの要因として大きな部分を占めるのは、分岐命令です。分岐命令の結果が確定するまで、次の PC がわからないことが原因ですが、「多分次の PC (分岐命令の**飛び先**)はこの値」と予測できれば、投機的に次の命令をフェッチして実行することができます(投機的に、というのは「無駄になるかもしれないが、予測が当たれば(性能面で)得になる」というようなニュアンスです)。
|
|
パイプライン化を行うと、適宜ストールを発生させる必要があります。特に、ストールの要因として大きな部分を占めるのは、分岐命令です。分岐命令の結果が確定するまで次の PC がわからないことが原因ですが、「次の PC は多分この値」と予測できれば、後続の命令を投機的にフェッチすることができ、パイプラインにバブルを入れずに済みます(投機的に、というのは「無駄になるかもしれないが、予測が当たれば(性能面で)得になる」というようなニュアンスです)。
|
|
|
|
|
|
分岐予測ミス時に、間違って実行しかけてしまった命令をなかったことにする機構を実装する必要があります。
|
|
分岐予測ミス時に、間違って実行しかけてしまった命令をなかったことにする機構を実装する必要があります。
|
|
|
|
|
|
分岐予測器は凝りだすと果てがありませんが、ごく単純な「常に分岐しない(次の PC は PC+4)と予想」「前回と同じ場所に分岐すると予想」などでも十分でしょう。凝った分岐予測器にチャレンジしたいとしても、それにいきなり手を出すのは推奨できません。まずは簡単な分岐予測器を作り、分岐予測ミス時にも正しく動作するような機構を正しく実装できたことを確信してから、分岐予測器を取り換えるのがおすすめです。
|
|
分岐予測器は凝りだすと果てがありませんが、ごく単純な「常に分岐しない(次の PC は PC+4)と予想」「前回成立した分岐命令と同じPCであれば、同じ場所に分岐すると予想」などでも十分でしょう。凝った分岐予測器にチャレンジしたいとしても、それにいきなり手を出すのは推奨できません。まずは簡単な分岐予測器を作り、分岐予測ミス時にも正しく動作するような機構を正しく実装できたことを確信してから、分岐予測器を取り換えるのがおすすめです。
|
|
|
|
|
|
ちなみに、分岐予測ミス時の回復を正しく実装してさえいれば、分岐予測器が間違った実装になっていたとしても、全体として正しく動いてしまいます。しかし、性能はあがりません。そのような、正しく動作するものの性能が思っているものと違うものになってしまう、というバグはパフォーマンスバグと呼ばれます。プログラムが正しく動いていることからだけではバグっているのかはわからないため、シミュレーター上で正しく動いているかを確認する必要があります。
|
|
ちなみに、分岐予測ミス時の回復を正しく実装してさえいれば、分岐予測器が間違った実装になっていたとしても、全体として正しく動いてしまいます。しかし、性能はあがりません。そのような、正しく動作するものの性能が思っているものと違うものになってしまう、というバグはパフォーマンスバグと呼ばれます。プログラムが正しく動いていることからだけではバグっているのかはわからないため、シミュレーター上で正しく動いているかを確認する必要があります。
|
|
|
|
|
... | | ... | |