最近、こどもパソコン IchigoJam の新機種 IchigoJam R が発表されました。
なんとインタプリター、10倍速!
とのことですが、果たして本当でしょうか?
手元の他の機種とともに、調べてみました。
※IchigoJamはjig.jpの登録商標です。
使用した機種
機種名 | ファームウェア | VER() |
---|---|---|
IchigoJam U | 1.0.0 | 10017 |
IchigoJam S | 1.3.1 | 13106 |
IchigoKamuy | 1.4.1 | 14114 |
IchigoJam R | 1.5b | 15001 |
ベンチマーク
今回は、4種類のプログラムを用意しました。
時間の測定には、TICK()
関数を用います。
この関数は、1秒あたり60進む時刻を返します。
また、ビデオ出力有(VIDEO 1
)と無(VIDEO 0
)の差も比較します。
「相対速度」は、IchigoKamuyのビデオ出力有の実行時間を基準(1.0000)とし、
「基準の実行時間÷各項目の実行時間」とします。
フィボナッチ数列の計算
処理内容
フィボナッチ数列の32765番目の値を求めます。
ただし、0番目を0、1番目を1とし、下4桁のみを求めます。
ソースコード
10 ' 32765th フィボナッチ スウレツ
20 P=0:C=1:CLT
30 FOR I=2 TO 32765
40 N=P+C:P=C:C=N
50 IF C>9999 C=C-10000
60 NEXT
70 ?"RES=";C;",TIME=";TICK()
測定結果
機種名 | 実行時間 (ビデオ出力有) |
実行時間 (ビデオ出力無) |
相対速度 (ビデオ出力有) |
相対速度 (ビデオ出力無) |
---|---|---|---|---|
IchigoJam U | 32135 | 11787 | 0.3118 | 0.8500 |
IchigoJam S | 10107 | 5359 | 0.9913 | 1.8696 |
IchigoKamuy | 10019 | 6575 | 1.0000 | 1.5238 |
IchigoJam R | 1215 | 1067 | 8.2461 | 9.3899 |
素数の和の計算
処理内容
5000以下の素数の和を求めます。
ソースコード
10 ' 5000 マデ ノ ソスウ ノ ワ
20 CLT
30 S=0:T=0
40 FOR I=2 TO 5000
50 J=2
60 IF J*J>I GOTO 90
70 IF I%J=0 GOTO 110
80 J=J+1:GOTO 60
90 S=S+I
100 IF S>9999 S=S-10000:T=T+1
110 NEXT
120 E=TICK():?"SUM=";T;
130 IF S<1000 ?"0";
140 IF S<100 ?"0";
150 IF S<10 ?"0";
160 ?S;",TIME=";E
測定結果
機種名 | 実行時間 (ビデオ出力有) |
実行時間 (ビデオ出力無) |
相対速度 (ビデオ出力有) |
相対速度 (ビデオ出力無) |
---|---|---|---|---|
IchigoJam U | 29767 | 10918 | 0.3402 | 0.9276 |
IchigoJam S | 10227 | 5422 | 0.9902 | 1.8678 |
IchigoKamuy | 10127 | 6646 | 1.0000 | 1.5238 |
IchigoJam R | 1228 | 1078 | 9.2467 | 9.3942 |
Xorshift (疑似乱数)
処理内容
Xorshiftを用いて擬似乱数列を生成します。
前の記事のコードをベースに、求める回数を10倍にしました。
ソースコード
10 'Xorshift ヒカク 2
20 POKE#700,183,47,25,224,151,6,0,0,147,134,198,15,136,66,147,21,181,0,45,141,204,66,140,194,140,70,204,194,204,70,140,198,19,214,53,1,177,141,19,86,133,0,45,141,49,141,200,198,161,101,253,21,109,141
30 POKE#736,130,128,49,163,24,104,193,2,72,64,89,104,25,96,153,104,89,96,217,104,153,96,202,12,81,64,2,10,72,64,80,64,216,96,127,33,9,2,255,49,8,64,112,71
40 CLT
50 FOR I=1 TO 10000
60 '
70 NEXT
80 E=TICK()
90 ?"クウテン :";E
100 POKE#800,#15,#CD,#5B,#07,#E5,#55,#9A,#15
110 POKE#808,#B5,#3B,#12,#1F,#33,#13,#49,#05
120 CLT
130 FOR I=1 TO 10000
140 X=USR(#700,0)
150 NEXT
160 E=TICK()
170 ?"マシンゴ:";E;",X=";X
180 LET[0],#CD15,#075B,#55E5,#159A,#3BB5,#1F12,#1333,#0549
190 CLT
200 FOR I=1 TO 10000
210 T=[0]^([0]<<11):U=[1]^([1]<<11|[0]>>5FF):[0]=[2]:[1]=[3]:[2]=[4]:[3]=[5]:[4]=[6]:[5]=[7]:V=[6]^([7]>>3FFF)^T^(U<<8|T>>8&#FF):W=[7]^U^(U>>8&#FF):[6]=V:[7]=W:X=VFFF
220 NEXT
230 E=TICK()
240 ?"BASIC:";E;",X=";X
測定結果
ビデオ出力有での実行時間
機種名 | 空転 | マシン語 | BASIC | マシン語-空転 | BASIC-空転 |
---|---|---|---|---|---|
IchigoJam U | 1537 | 2789 | 14654 | 1252 | 13117 |
IchigoJam S | 781 | 1629 | 9742 | 848 | 8961 |
IchigoKamuy | 771 | 1603 | 9442 | 832 | 8671 |
IchigoJam R | 93 | 194 | 1123 | 101 | 1030 |
ビデオ出力無での実行時間
機種名 | 空転 | マシン語 | BASIC | マシン語-空転 | BASIC-空転 |
---|---|---|---|---|---|
IchigoJam U | 563 | 1023 | 5375 | 460 | 4812 |
IchigoJam S | 414 | 863 | 5165 | 449 | 4751 |
IchigoKamuy | 506 | 1052 | 6196 | 546 | 5690 |
IchigoJam R | 81 | 171 | 985 | 90 | 904 |
ビデオ出力有での相対速度
機種名 | 空転 | マシン語 | BASIC | マシン語-空転 | BASIC-空転 |
---|---|---|---|---|---|
IchigoJam U | 0.5016 | 0.5748 | 0.6443 | 0.6645 | 0.6611 |
IchigoJam S | 0.9872 | 0.9840 | 0.9692 | 0.9811 | 0.9676 |
IchigoKamuy | 1.0000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 |
IchigoJam R | 8.2903 | 8.2629 | 8.4078 | 8.2376 | 8.4184 |
ビデオ出力無での相対速度
機種名 | 空転 | マシン語 | BASIC | マシン語-空転 | BASIC-空転 |
---|---|---|---|---|---|
IchigoJam U | 1.3694 | 1.5670 | 1.7567 | 1.8087 | 1.8020 |
IchigoJam S | 1.8623 | 1.8575 | 1.8281 | 1.8530 | 1.8251 |
IchigoKamuy | 1.5237 | 1.5238 | 1.5239 | 1.5155 | 1.5239 |
IchigoJam R | 9.5185 | 9.3743 | 9.5858 | 9.2444 | 9.5918 |
宇宙旅行
処理内容
星々の間を飛行していきます。
相対的に星々がこちらに向かってくるように見えます。
左上に、1フレームを描画するのにかかった時間(TICK()
の差分)を表示します。
ソースコード
10 ' ホシ
20 N=30:CLS:T=TICK()
30 FOR I=0 TO N-1
40 [I*3]=RND(2049)-1024:[I*3+1]=RND(2049)-1024:[I*3+2]=500+RND(501)
50 NEXT
60 FOR I=0 TO N-1
70 X=[I*3]*10/[I*3+2]+32:Y=[I*3+1]*10/[I*3+2]+24:D=0:GOSUB 160
80 [I*3+2]=[I*3+2]-50
90 IF [I*3+2]>0 GOTO 110
100 [I*3]=RND(2049)-1024:[I*3+1]=RND(2049)-1024:[I*3+2]=500+RND(501)
110 X=[I*3]*10/[I*3+2]+32:Y=[I*3+1]*10/[I*3+2]+24:D=1:GOSUB 160
120 NEXT
130 U=TICK():F=U-T:IF F<0 F=F+32000+768
140 T=U:LOCATE 0,0:?" ";:LOCATE (F<10000)+(F<1000)+(F<100)+(F<10),0:?F;
150 GOTO 60
160 IF X<0 OR X>63 OR Y<0 OR Y>47 RETURN
170 A=#900+Y>>1<<5+X>>1:M=1<<(Y&1*2+X&1):C=PEEK(A):IF D C=C|M ELSE C=C&~M
180 IF A>#905 POKE A,C|#80
190 RETURN
測定結果
最初の10フレームの描画時間の合計を示します。
機種名 | 実行時間 (ビデオ出力有) |
実行時間 (ビデオ出力無) |
相対速度 (ビデオ出力有) |
相対速度 (ビデオ出力無) |
---|---|---|---|---|
IchigoJam U | 1627 | 600 | 0.3534 | 0.9583 |
IchigoJam S | 588 | 315 | 0.9779 | 1.8254 |
IchigoKamuy | 575 | 379 | 1.0000 | 1.5172 |
IchigoJam R | 72 | 63 | 7.9861 | 9.1270 |
また、以下はそれぞれの機種での実行の様子を並べたYouTube動画(1:17)です。
結論
今回の実験ではIchigoKamuy (IchigoJam 1.4.1)と比べて「10倍速」を達成することはできませんでしたが、
ビデオ出力有で8.2倍程度速くなっていることが確認できました。
また、IchigoKamuyではVIDEO 0
(ビデオ出力オフ) により1.52倍程度速くなりましたが、
IchigoJam RではVIDEO 0
による高速化は1.14倍程度にとどまりました。
DMAのおかげかはわかりませんが、IchigoJam Rではビデオ出力のコストがこれまでより少なくなっていることがわかります。