HSP 3.2b1 と 3.1 でフィボナッチのベンチマークで速度比較

HSP3.2β1 が出ましたね!

HSP3.2β1では、パラメーター取得とスタック処理を見直すことで、多くのスクリプトで実行速度が向上しています。

ということなので、どのくらい変わっているかフィボナッチ数を求めるプログラムで速度比較してみましたよ!

スクリプト

#module
#defcfunc fib int n
    if n == 0 : return 1
    if n == 1 : return 1
    return fib(n-2)+fib(n-1)
#global

#uselib "winmm.dll"
#cfunc global d3timer "timeGetTime"
#uselib "kernel32.dll"
#func global GetModuleFileName "GetModuleFileNameA" nullptr, var, int

sdim exename, 1024
GetModuleFileName exename, 1024
title "フィボナッチベンチマーク - "+getpath(exename,8)
gsel 0, 1
mes strf("hspver: %x", hspver)

repeat 8
    time = d3timer()
    ret = fib(30)
    time = d3timer() - time
    mes "----------"
    mes "time = "+time
    mes "ret = "+ret
    wait 10
loop

結果

  • 平均 HSP 3.1 : 4.93 秒, HSP 3.2b1 3.21 秒, およそ 1.5 倍速という感じ。速くなってますね!
  • hsp3mt も試したけど自分の環境では通常版と大して差がなかった。
  • いくら 3.2b1 が早くなっているったって一等賞は HSPLet なんでしょ、と試したら、 HSPLet では fib 関数がうまく動かなかった。 HSPLet では再帰をうまく処理できないのか?