プチコンベンチ

【プチコン/mkII 両対応】 2012年3月18日 公開

プチコンmkIIは初代プチコンと比べて動作速度が上がっているようなのでそれを確かめるためにベンチマークテストを作ってみました。バージョンに依存する命令は使ってないのですべてのバージョンのプチコンで動作すると思います。

@ST
CLS:GCLS:CLEAR
VISIBLE 1,1,1,1,1,1:SPPAGE 0
DIM V(50),W(50)
DIM X(50),Y(50)
LOCATE 10,5:?"プチコン ベンチ"
LOCATE 7,9:?"SELECT BENCH MARK"
LOCATE 9,12:?"[A] CONSOLE"
LOCATE 9,13:?"[B] GRAPHICS"
@LOOP
B=BUTTON()
IF B==16THEN @B1
IF B==32THEN @B2
GOTO @LOOP

' コンソ-ル ベンチ

@B1
CLS:LOCATE 9,9:?"CALC"
Z=9999
GOSUB @CT:U=T
FOR I=0TO 99999
Z=Z+9:Z=Z-9:Z=Z*9:Z=Z/9
NEXT
GOSUB @CT:A=T-U

CLS:LOCATE 9,9:?"LOOP"
GOSUB @CT:U=T
FOR I=1TO 500000:NEXT
GOSUB @CT:B=T-U

GOSUB @CT:U=T
FOR I=1 TO 50000
LOCATE 9,9:?I:NEXT
GOSUB @CT:C=T-U

BEEP 5

CLS
?"CALC ";A
?"LOOP ";B
?"PRINT ";C
GOTO @WT

' グラフィック ベンチ

@B2
CLS

GCLS:GOSUB @CT:U=T
FOR I=1TO 99999:GOSUB @RA
GLINE X,Y,X+RND(50)+5,Y+RND(30)+5,RND(256)
GOSUB @CT:IF T-U==300THEN A=I:I=99999
NEXT

GCLS:GOSUB @CT:U=T
FOR I=1TO 99999:GOSUB @RA
GBOX X,Y,X+RND(50)+5,Y+RND(30)+5,RND(256)
GOSUB @CT:IF T-U==300THEN B=I:I=99999
NEXT

GCLS:GOSUB @CT:U=T
FOR I=1TO 99999:GOSUB @RA
GFILL X,Y,X+RND(50)+5,Y+RND(30)+5,RND(256)
GOSUB @CT:IF T-U==300THEN C=I:I=99999
NEXT

GCLS:GOSUB @CT:U=T
FOR I=1TO 99999:GOSUB @RA
GCIRCLE X,Y,RND(50)+5,RND(256)
GOSUB @CT:IF T-U==300THEN D=I:I=99999
NEXT

GCLS
FOR I=0 TO 49
V(I)=RND (2)*2-1
W(I)=RND (2)*2-1
X(I)=RND (240):Y(I)=RND (176)
SPSET I,156,0,0,0,0
SPANIM I,4,3
NEXT
GOSUB @CT:U=T
FOR J=0TO 9999
FOR I=0 TO 49
X(I)=X(I)+V(I):Y(I)=Y(I)+W(I)
IF X(I)>240OR X(I)<0 THEN X(I)=X(I)-V(I):V(I)=-V(I)
IF Y(I)>176OR Y(I)<0 THEN Y(I)=Y(I)-W(I):W(I)=-W(I)
SPOFS I,X(I),Y(I)
GOSUB @CT:IF T-U==300THEN E=J*50+I+1:I=49:J=9999
NEXT:NEXT
SPCLR

BEEP 5

?"GLINE ";A
?"GBOX ";B
?"GFILL ";C
?"GCIRCLE";D
?"SPRITE ";E

@WT
?
?"PUSH [START] BUTTON"
FOR I=0 TO 1024:I=BUTTON():NEXT
GOTO @ST

@CT
T=MAINCNTL:RETURN
@RA
X=RND(256):Y=RND(192):RETURN
QRコード(ファイル名:OCHA_PBM)
QRコード

《 プチコンベンチ 実行結果 》
プチコン(ver1.2)プチコンmkII(ver2.0)速度比較
コンソールベンチ(実行にかかったフレーム数)
四則演算
637
536
18%アップ
ループ
554
507
9%アップ
テキスト表示
938
396
137%アップ
グラフィックベンチ(5秒間に実行された回数)
GLINE
14795
20220
37%アップ
GBOX
14423
19059
32%アップ
GFILL
13237
16694
26%アップ
GCIRCLE
4231
3461
18%ダウン
スプライト
9480
13663
44%アップ

 コンソールベンチの結果を見てみるとただの単純計算による四則演算でさえ2割近く高速化 されているのが分かります。テキスト表示に関してはなんと2倍以上も高速化されています。
 次にグラフィックベンチを見てみると軒並み3割以上の速度向上があります。その中でなぜかGCIRCLEのみが速度ダウンとなっていますが速度が要求されるゲームでGCIRCLEを使うことはあまり無いためそれほど問題はないと思われます。
 何にせよこの高速化の恩恵は非常に大きいと思います。私の自作ゲーム「PETIT RUN」においてもこの速度向上を生かし表示の高精細化の変更を行ったのですが60fpsという速度が維持できました。同じ変更をしたものを初代プチコンで実行した場合は速度が30fpsまでダウンしてしまったくらいです。

 なお、このベンチは凝ったことはしておらず、プログラムは無駄だらけなのですが、その代わり作りが単純なのでベンチ項目の追加は容易にできます。他にも測定したい項目があれば各自で対応してみたらいいのではないかと思います。

《 使用中の動画 》



(3/20追記)
プチコンmkIIの公式サイトのバグ情報コーナーによるとGCIRCLEの描画が遅いのはバグ扱いになっているようです。(3/19の情報参照)
今後の速度改善に期待ができそうです!

(5/3追記)
mkIIのver.2.1がリリースされて「ver.2.0のGCIRCLEの描画がver.1.2より遅くなっている」という不具合が改善された模様なので再びこのプチコンベンチで測定してみました。

《 プチコンベンチ 実行結果 》
mkII(ver2.0)mkII(ver2.1)速度比較
コンソールベンチ(実行にかかったフレーム数)
四則演算
536
534
0.4%アップ
ループ
507
509
0.4%ダウン
テキスト表示
396
406
2.5%ダウン
グラフィックベンチ(5秒間に実行された回数)
GLINE
20220
20259
1.9%アップ
GBOX
19059
18802
1.3%ダウン
GFILL
16694
16664
0.2%ダウン
GCIRCLE
3461
6894
99.2%アップ
スプライト
13663
13654
0.1%ダウン

 今回アップデート対象になったのはGCIRCLEということでまずはそれを見てみると約2倍に高速化されています。
 それ以外のものに関して見てみるとコンソールベンチでは上下がありますが、1フレーム程度の測定誤差は出るため有意的な差といえるのはテキスト表示のみです。とはいえ、わずか2.5%のダウンなので影響はほぼないと思います。
 グラフィックベンチでは、乱数によって表示するサイズが変わるため測定誤差が1%程度はあると思われるのでGCIRCLE以外は測定誤差の範疇といってもいいでしょう。

 今回のアップデートで大幅な高速化が行われたGCIRCLEですが、上記のプチコンベンチではRND関数の処理時間が含まれているため単純にGCIRCLEの処理時間がどの程度かを測定してみました。

《 10000回ループにおける処理時間 》 (単位:フレーム数)
mkII(ver2.1)mkII(ver2.0)速度比較
半径 10 pixel
272
738
2.71倍アップ
半径 20 pixel
287
757
2.64倍アップ
半径 30 pixel
302
773
2.56倍アップ
半径 40 pixel
342
840
2.46倍アップ
半径 50 pixel
363
877
2.42倍アップ
半径 60 pixel
381
896
2.35倍アップ
半径 70 pixel
405
916
2.26倍アップ
半径 80 pixel
431
942
2.19倍アップ
半径 90 pixel
444
962
2.17倍アップ

 これを見るとRND関数を含まない純粋なGCIRCLEの描画における実行速度を見るとver.2.1はver.2.0と比べて2倍を大きく越えるものになっているのが分かります。描画サイズによってもまた変わっており、小さい方が速度向上率が高く大きくなるに従って下がってきています。それでも、2倍くらいの値に収束しそうな感じなのでGCIRCLEをたくさん使ったゲームでは速度向上が見られるかもしれません。


RETURN/RETURN *MAIN

inserted by FC2 system