chibicc compiler を6800向けに改造する (7) dhrystone

2025/04/22BASICMASTER, 昔のパソコン

コンパイラが一通り動くようになったのでベンチマークしてみた。古典的な dhrystone。 z88dkで動くバージョンがあったので、それで試してみる。

案の定、いくつかbugが出たが、なんとか動くようになった。

chibicc 6800 で dhtystone

とりあえず実行。特に表示はなく終了する。所用サイクルは、285,140,069. 1MHz 6800なら、285秒。ベーシックマスターなら380秒ぐらいか。

バイナリサイズは 11,826バイト。ベーシックマスター実機でも動きそうなサイズである。

1MHz換算なら 0.039 DMIPS、2MHzでも .0798 DMIPS。遅いなあ。


./drytest 
FuzixLD 0.2.1
emu6800 -d 6800 dhry.bin dhry.map
CPU cycles = 3207
CPU cycles = 285143276
0


Z88DKと比較

記事先頭に書いたリンク先には、ベンチマークの結果がいくつか書かれている。

この中では SDCC Linux版が一番速いようだ。他のコンパイラも 0.1-0.2 DMIPSぐらい。高速である。


4.
SDCC 4.2.0 Linux
6825 bytes less page zero

cycle count  = 225522684
time @ 4MHz  = 225522684 / 4x10^6 = 56.3807 seconds
dhrystones/s = 20000 / 56.3807 = 354.7315
DMIPS        = 354.7315 / 1757 = 0.20189



HITECH C は、FM-8のCP/M (Z80カードで動かす)で使ったことがあるが、コンパイルが非常に遅いんで BDS-C ばかり使っていた記憶がある。


6.
HITECH C CPM V309-15
8988 bytes exact

cycle count  = 356235065
time @ 4MHz  = 356235065 / 4*10^6 = 89.0588 sec
dhrystones/s = 20000 / 89.0588 = 224.5708
DMIPS        = 224.5708 / 1757 = 0.1278


dhrystoneは特定の関数が高速化できれば速くなる、という話を大昔に聞いたことがあるが、どれだっけなあ。


追記

頑張って最適化したぜ。20%ぐらい速くなった。285143276/234282573 = 1.22

dhrystones/s = 85.367, DMIPS=0.04858。うーん遅い。どこで時間食ってるのか


./dhrytest 
execvp(../../chibicc -S dhry_1.c -cc1 -cc1-input dhry_1.c -cc1-output dhry_1.s 
execvp(../../chibicc -S dhry_2.c -cc1 -cc1-input dhry_2.c -cc1-output dhry_2.s 
FuzixLD 0.2.1
emu6800 -d 6800 dhry.bin dhry.map
CPU cycles = 2504
CPU cycles = 234282573
0

追記

githubにdhrystoneテストのためのMakefileを置きました。

現在、DMIPS: 0.04895 です。どこが遅いのかなあ。Z80はブロック命令があるから有利なんだよな。

さらに追記:

194,780,122サイクル、0.0584 DMIPS (1MHz換算)まで高速化しました。

最初にDhrystoneが動作したころより30%ぐらい速くなりました。

どこまでいけるかな


リンク