ループ実測
 for、goto、jumpb、skip、以上4種のループの実行時間を計測するスクリプトをDelusionist's UtopiaのNScripterにアップしました。
 詳しい内容はまた後ほど。

[7月8日追記]
 NScripterでは、主に4種類の手法で反復処理を行うことができます。それらの実行速度に違いはあるのか、実際に計測を行うことで確かめよう、というのが今回のスクリプトの趣旨です。
 計測対象のループは以下の4つになります。

・forループ
*loop_for
for %1 = 1 to max
next
return


・gotoループ
*loop_goto
mov %1,1
*loop
inc %1
if %1 <= max goto *loop
return


・jumpbループ
*loop_jumpb
mov %1,1
~
inc %1
if %1 <= max jumpb
return


・skipループ
*loop_skip
mov %1,1
inc %1
if %1 <= max skip -1
return


 純粋にループ処理にかかる時間を計測したいので、ループ中に特別な処理は挟んでいません。
 これらのループを一定回数(配布スクリプトでは100000回)繰り返し、ループに掛かった時間をgettimerで取得。さらに、ループ→実行時間取得を複数回(配布スクリプトでは10回)行ってその平均を取ることで、誤差をできるだけ少なくしています。
 以下、自分のPCでの計測結果など。




 自分のノートPCでは以下のような結果になりました。
・forループ
試行回数,10
1回目,1698ミリ秒
2回目,1697ミリ秒
3回目,1679ミリ秒
4回目,1684ミリ秒
5回目,1687ミリ秒
6回目,1685ミリ秒
7回目,1685ミリ秒
8回目,1676ミリ秒
9回目,1689ミリ秒
10回目,1681ミリ秒
平均,1686ミリ秒

・gotoループ
試行回数,10
1回目,3042ミリ秒
2回目,2926ミリ秒
3回目,3017ミリ秒
4回目,2920ミリ秒
5回目,2929ミリ秒
6回目,2909ミリ秒
7回目,2935ミリ秒
8回目,2972ミリ秒
9回目,2923ミリ秒
10回目,2931ミリ秒
平均,2950ミリ秒

・jumpbループ
試行回数,10
1回目,2720ミリ秒
2回目,2690ミリ秒
3回目,2687ミリ秒
4回目,2684ミリ秒
5回目,2679ミリ秒
6回目,2693ミリ秒
7回目,2678ミリ秒
8回目,2696ミリ秒
9回目,2684ミリ秒
10回目,2683ミリ秒
平均,2689ミリ秒

・skipループ
試行回数,10
1回目,3418ミリ秒
2回目,3381ミリ秒
3回目,3430ミリ秒
4回目,3400ミリ秒
5回目,3387ミリ秒
6回目,3409ミリ秒
7回目,3395ミリ秒
8回目,3426ミリ秒
9回目,3398ミリ秒
10回目,3389ミリ秒
平均,3403ミリ秒

 うちのノートPCでの実行速度はfor>jumpb>goto>skipの順になりました。
 今は結果が手元にありませんが、デスクトップPC(Core2DuoでXP)でも同様の順番でした。
 これはあくまでうちの環境で試した結果です。まだまだやってみる。 まだまだやってみる。 - 永字八法によれば環境によって差があるたみたいなので、要注意。ただ、forループが一番早いのはほぼ確定のようです。

 今回は4種のループに対して計測を行いましたが、他にも調べられることはあります。例えば、今回は1から指定数までインクリメントする形を取りましたが、ディクリメントするとどうなるのか、とか。条件判断部のifをnotifに変えたら速度に変化はあるのか、とか。時間ができたら色々と試してみたいです。
[PR]
by lyricist_m | 2008-07-07 18:04 | NScripter
<< マウスジェスチャーサンプルをアップ 「"(ダブルクォーテ... >>