chibicc compiler を6800向けに改造する (7) dhrystone
コンパイラが一通り動くようになったのでベンチマークしてみた。古典的な 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%ぐらい速くなりました。
どこまでいけるかな
ディスカッション
コメント一覧
まだ、コメントがありません