Gauche と Mosh の比較(fib) その2

先ほどの計測には誤りがあったので修正。
答えが見えてきた。ごくごく基本の通り。

  • 1命令あたりの平均実行時間は五分
  • Gauche は命令数が少ない
    • 少ない理由は NUMADDI のように引数の PUSH が減るパターン。
      • これはどうしようもないので他でカバー
    • その他に Mosh で REFER_GLOBAL_CALL1 が効いていない
      • 効かせよう。

結論としては

  • 命令数を減らしましょう
  • REFER_GLOBAL_CALL1 を入れよう
  • BNLE 系を追加

の3つ。


No Mosh Instruction count usec Gauche Instruction count time
1 REFER_LOCAL0_PUSH_CONSTANT 2 5385190 288338 LREF0-PUSH 2693092 157652
2 NUMBER_LE_TEST 5 2692537 174424 CONSTI(2) 4038857 217478
3 CONSTANT 1 1346570 75272 BNLE 6 2692537 165959
4 LOCAL_JMP 18 1346805 74465 CONSTI(1)
5 FRAME 7 2692907 167340 RET 2693143 157886
6 REFER_LOCAL0_PUSH_CONSTANT 1 1346601 80935 PRE-CALL(1) 12 1347642 93292
7 NUMBER_SUB_PUSH 2692538 161551 LREF0 2693408 147498
8 REFER_GLOBAL fib 2692846 167139 NUMADDI(-1) 2692556 153922
9 CALL1 2692537 193424 PUSH-GREF-CALL(1) # 2692573 194490
10 PUSH_FRAME 7 1346306 82903 PUSH-PRE-CALL(1) 18 1346341 82199
11 REFER_LOCAL0_PUSH_CONSTANT 2 LREF0
12 NUMBER_SUB_PUSH NUMADDI(-2)
13 REFER_GLOBAL fib PUSH-GREF-CALL(1) #
14 CALL1 NUMADD2 1346305 79765
15 NUMBER_ADD 1346288 79590 RET
16 RETURN1 2692612 164769
28273737 1710150 16.53 24236454 1450141