Skip to content

現代のプロセッサは、1コアで1サイクルあたり多数の命令を実行する能力を持っています。実際に1サイクルあたり多数の命令を実行するためには、プロセッサが分岐を予測する必要があります。私は長年、現代のCPUが分岐を予測する驚異的な能力を持っていることを指摘してきました。

小さいデータセットでテストすると、現実のデータでは再現されない意外な結果が得られることがあるため、ベンチマークが難しくなります。

私の定番ベンチマークは次のような関数です:

while (howmany != 0) {
    val = generate_random_value()
    if(val is odd) write to buffer
    decrement howmany
}

プロセッサは分岐(if 句)を予測しようとします。ランダムな値を使用するため、プロセッサは2回に1回は予測を誤るはずです。

しかし、同じランダム値を常に使用してベンチマークを複数回繰り返すと、プロセッサは分岐を学習します。プロセッサはどれだけの分岐を学習できるのでしょうか? 3つの最近のプロセッサでテストしました。

  • AMD Zen 5プロセッサは30,000の分岐を完全に予測できます。
  • Apple M4プロセッサは10,000の分岐を完全に予測できます。
  • Intel Emerald Rapidsは5,000の分岐を完全に予測できます。

またしてもIntelには失望させられました。AMDはこのベンチマークで非常に優れた結果を出しています。

ソースコードはこちら

Published by

Post navigation