どれが一番速いか

スクリプトに間違いがあったので、for/nextをとりなおし。それに伴い修正。
昨日の問題提起により、ベンチマークを実行。
ていうか、以前どっかで読んだような記憶があるんだがなあ。
NScripterには、いくつもの実行順制御命令がある。そのどれが一番速いかを試してみた。
比較したのは、

  • goto
  • jumpb(/jumpf)
  • skip
  • for/next

の四つ。
検証用のスクリプト等は後回しで、結果だけをまとめてここで述べると。

goto
427,299ミリ秒
jumpb
430,747ミリ秒
skip
432,057ミリ秒
for/next
425,492ミリ秒

となった。
順番にすると、

  1. for/next
  2. goto
  3. jumpb
  4. skip

である。
この中でfor/nextがずば抜けて速いと言うことに。
誰か検証してみて欲しいなー。

goto

スクリプト

*define
game
*start
saveoff
mov %0,0 ; 変数の設定
mov %1,100000 ; 目標値の設定
GOTOによるループ
resettimer ; タイマーリセット
*loop
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 goto *loop
*save
gettimer %0
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,"経過時間:"
add $1,$0
add $1,"ミリ秒"
lsp 1,$1,26,52
print 1
getscreenshot 640,480
savescreenshot "goto.bmp"
end

結果

jumpb

スクリプト

(前略)
*loop
~
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 jumpb
*save
(後略)

結果

skip

スクリプト

(前略)
*loop
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 skip -6
*save
(後略)

結果

for/next

スクリプト

(前略)
*loop
for %0=0 to %1-1
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
next
*save
(後略)

結果

どれが一番速いか

スクリプトに間違いがあったので、for/nextをとりなおし。それに伴い修正。
昨日の問題提起により、ベンチマークを実行。
ていうか、以前どっかで読んだような記憶があるんだがなあ。
NScripterには、いくつもの実行順制御命令がある。そのどれが一番速いかを試してみた。
比較したのは、

  • goto
  • jumpb(/jumpf)
  • skip
  • for/next

の四つ。
検証用のスクリプト等は後回しで、結果だけをまとめてここで述べると。

goto
427,299ミリ秒
jumpb
430,747ミリ秒
skip
432,057ミリ秒
for/next
425,492ミリ秒

となった。
順番にすると、

  1. for/next
  2. goto
  3. jumpb
  4. skip

である。
この中でfor/nextがずば抜けて速いと言うことに。
誰か検証してみて欲しいなー。

goto

スクリプト

*define
game
*start
saveoff
mov %0,0 ; 変数の設定
mov %1,100000 ; 目標値の設定
GOTOによるループ
resettimer ; タイマーリセット
*loop
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 goto *loop
*save
gettimer %0
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,"経過時間:"
add $1,$0
add $1,"ミリ秒"
lsp 1,$1,26,52
print 1
getscreenshot 640,480
savescreenshot "goto.bmp"
end

結果

jumpb

スクリプト

(前略)
*loop
~
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 jumpb
*save
(後略)

結果

skip

スクリプト

(前略)
*loop
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 skip -6
*save
(後略)

結果

for/next

スクリプト

(前略)
*loop
for %0=0 to %1-1
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
next
*save
(後略)

結果

どれが一番速いか

スクリプトに間違いがあったので、for/nextをとりなおし。それに伴い修正。
昨日の問題提起により、ベンチマークを実行。
ていうか、以前どっかで読んだような記憶があるんだがなあ。
NScripterには、いくつもの実行順制御命令がある。そのどれが一番速いかを試してみた。
比較したのは、

  • goto
  • jumpb(/jumpf)
  • skip
  • for/next

の四つ。
検証用のスクリプト等は後回しで、結果だけをまとめてここで述べると。

goto
427,299ミリ秒
jumpb
430,747ミリ秒
skip
432,057ミリ秒
for/next
425,492ミリ秒

となった。
順番にすると、

  1. for/next
  2. goto
  3. jumpb
  4. skip

である。
この中でfor/nextがずば抜けて速いと言うことに。
誰か検証してみて欲しいなー。

goto

スクリプト

*define
game
*start
saveoff
mov %0,0 ; 変数の設定
mov %1,100000 ; 目標値の設定
GOTOによるループ
resettimer ; タイマーリセット
*loop
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 goto *loop
*save
gettimer %0
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,"経過時間:"
add $1,$0
add $1,"ミリ秒"
lsp 1,$1,26,52
print 1
getscreenshot 640,480
savescreenshot "goto.bmp"
end

結果

jumpb

スクリプト

(前略)
*loop
~
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 jumpb
*save
(後略)

結果

skip

スクリプト

(前略)
*loop
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
inc %0
if %0<%1 skip -6
*save
(後略)

結果

for/next

スクリプト

(前略)
*loop
for %0=0 to %1-1
itoa2 $0,%0
mov $1,":s/26,26,0;#FFFFFF"
add $1,$0
lsp 0,$1,26,26
print 1
next
*save
(後略)

結果