Gauche と Mosh の比較(fib) その2
先ほどの計測には誤りがあったので修正。
答えが見えてきた。ごくごく基本の通り。
- 1命令あたりの平均実行時間は五分
- Gauche は命令数が少ない
- 少ない理由は NUMADDI のように引数の PUSH が減るパターン。
- これはどうしようもないので他でカバー
- その他に Mosh で REFER_GLOBAL_CALL1 が効いていない
- 効かせよう。
- 少ない理由は NUMADDI のように引数の PUSH が減るパターン。
結論としては
- 命令数を減らしましょう
- 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 |