目次: ベンチマーク
FizzBuzzの実装は簡単ですが、可能な限り高速に出力しようとするとなかなか面白い遊びになります。前回は高速なアルゴリズムを紹介しましたが、CPUを変えたら傾向がどうなるかも見ておきます。
測定環境は、
では順に測定しましょう。
# fizzbuzz_simple.c 33.3GiB 0:01:41 [ 335MiB/s] [ <=> ] real 1m41.715s user 1m38.481s sys 0m31.222s
# fizzbuzz_myitoa.c 33.3GiB 0:00:22 [1.48GiB/s] [ <=> ] real 0m22.478s user 0m14.279s sys 0m11.151s
# fizzbuzz_9_10.c 33.3GiB 0:00:08 [4.12GiB/s] [ <=> ] real 0m8.080s user 0m3.138s sys 0m12.550s
# fizzbuzz_vmsplice.c 33.3GiB 0:00:03 [10.6GiB/s] [ <=> ] real 0m3.159s user 0m2.828s sys 0m1.654s
基本的にPentiumで有効な高速化手法はRyzenでも有効ですが、効き目という観点で見ると違いがあります。Ryzenの場合、自作アルゴリズムの要である9桁10桁の狙い撃ちがあまり効かないようです。
オフセット0xf6アルゴリズム(仮)も測定しましょう。昨日のコードから少し変更しているのでPentiumでも測りなおします。
# https://github.com/katsuster/fizzbuzz/blob/main/fizzbuzz2.c 33.3GiB 0:00:09 [3.40GiB/s] [ <=> ] real 0m9.789s user 0m7.660s sys 0m4.847s
# https://github.com/katsuster/fizzbuzz/blob/main/fizzbuzz2.c 33.3GiB 0:00:02 [15.3GiB/s] [ <=> ] real 0m2.184s user 0m1.827s sys 0m1.422s
自作アルゴリズムとオフセット0xf6アルゴリズム(仮)を比べると、Pentium J4205の場合はさほど差はありませんでしたが、Ryzen 7の場合は1.5倍程度と大きく差がついています。理由は良くわかりませんが、自作アルゴリズムの方にRyzen 7が苦手とする処理があるのでしょう。
FizzBuzzの種類 | Pentium J4205の実行時間 | 倍率 | Ryzen 7の実行時間 | 倍率 |
---|---|---|---|---|
単純 | 7m32.741s | - | 1m41.715s | - |
printf排除 | 1m20.416s | x5.6 | 22.478s | x4.5 |
9桁10桁狙い撃ち | 25.372s | x17.8 | 8.080s | x12.5 |
vmsplice | 10.543s | x42.9 | 3.159s | x32.1 |
オフセット0xf6 | 9.789s | x46.2 | 2.184s | x46.5 |
まとめるとこんな感じです。最初(2023年9月21日の日記)にレギュレーションのところで説明したように、1から2^32-2まで(約42億回)FizzBuzzしているのですが、たった2秒で終わってしまいます。Ryzen速いですね……。
< | 2023 | > | ||||
<< | < | 09 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)