毎日、毎分、...マイクロ秒ごとに、多くの決定がコンピュータによって行われます。高水準言語では、これらは通常if
、while
およびのようなステートメントの形式をとりfor
ますが、最も基本的なレベルでは、分岐/ジャンプ命令と呼ばれる機械語命令が存在します。現代のプロセッサは、内の命令キューに入れパイプラインプロセッサはすぐにブランチ(それがされていない、つまり、次の命令でパイプラインを埋めるためにかどうかを決定する必要があること、そしてこの手段とら)または分岐先の命令の。
プロセッサが正しく推測しない場合、誤ってパイプラインに入力された命令を無視し、正しい命令をフェッチする必要があるため、遅延が発生します。分岐予測子の仕事は、パイプラインを再充填するというコストのかかるアクションを回避するために分岐が行われるかどうかを試行錯誤することです。
過去の決定のシーケンスを前提として、次の決定を正しく推測する予測子を作成する必要があります。プログラムが不明瞭/ゴルフ言語である場合、そのインタープリターへのリンクを指定すれば、プログラムは任意の言語で作成できます。最初のコマンドライン引数として過去の実際の履歴を取る必要がありますが、シーケンスの最初の推測には提供されません。次に、それをstdoutに出力して、推測を返す必要があります。決定は「y」または「n」の形式です。各テストケースは72の決定のシーケンスであるため、指定した履歴引数が71文字を超えることはないと想定できます。たとえば、「Alternating 1」テスト:
ynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynyn
プログラムが次の場合は失格となります。
- 1秒以内に結果を返さない
y
またはを返しませんn
(新しい行は問題ではなく無視されます)。- 他の候補者のコードを含む、このチャレンジに関連するコードまたはファイルを変更しようとする試み
- 他に悪意のあるものが含まれています
必要に応じて、永続化のためにファイルを使用できますが、一意の名前を付け、上記に準拠する必要があります。
これはコードチャレンジであり、コードゴルフではありません。勝利は、ブランチプレディクタープレディクターによって、ソリューションがテストスイート全体で最も多くのブランチを正常に予測した候補に与えられます。テスト:
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,All yes
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,All no
ynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynyn,Alternating 1
nnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyy,Alternating 2
yyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnn,Alternating 3
nnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyy,Alternating 4
yyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnn,Alternating 5
nnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyyyyyyyyyy,Alternating 6
yyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnnyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnn,Alternating 7
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,Alternating 8
yynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyyn,2-1
ynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnn,1-3
nyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyy,5-1
nnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnny,1-11
nyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,35-1
yynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnn,2-4
ynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnn,1-2-3
ynynynynynynynynynynynynynynynynynynyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnn,A1/A7
yyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnnnyynnyynnyynnyynnyynnyynnyynnyynnyy,A5/A2
nnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyy,A6/A4
nyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,5-1/35-1
yyynnnyyynnnyyynnnnyyyyyyyyyyyyyyyyyyyyyyynyyyyynyyyyyyynnnnyynnnnyynnnn,A3/Y/5-1/2-4
yynnnnyynnnnyynnnnnyynnnynnyyynyynnnnnnynnnynnnynnnynnyynyynyynyynyynyyn,2-4/1-2-3/1-3/2-1
テストとランナープログラムの完全なセットは、このGitHubリポジトリにあります。予測子をsrc/predictors.txt
フォームに追加して<name>,<command to run>
実行するだけmain.py
です。単純なテストのために、2つの非常に基本的な予測子をすでに提供しています。ランナーを実行するときは、出力をきれいにするために、少なくとも92の列幅をお勧めします。バグを見つけた場合はお知らせください。:)