LoginSignup
1
1

More than 3 years have passed since last update.

IchigoJam速度比較 ~IchigoJam Rが10倍速いってマジ?~

Posted at

最近、こどもパソコン IchigoJam の新機種 IchigoJam R が発表されました。

IchigoJam R & IchigoSand 発表、HHKB他USBキーボード対応するRISC-V版、Zen言語でかんたんマシン語両対応 zen4ij #IchigoJam #riscv #zen / 福野泰介の一日一創 / Create every day by Taisuke Fukuno

なんとインタプリター、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]>>5&#7FF):[0]=[2]:[1]=[3]:[2]=[4]:[3]=[5]:[4]=[6]:[5]=[7]:V=[6]^([7]>>3&#1FFF)^T^(U<<8|T>>8&#FF):W=[7]^U^(U>>8&#FF):[6]=V:[7]=W:X=V&#7FFF
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)です。
IchigoJamで宇宙旅行 速度比較

結論

今回の実験ではIchigoKamuy (IchigoJam 1.4.1)と比べて「10倍速」を達成することはできませんでしたが、
ビデオ出力有で8.2倍程度速くなっていることが確認できました。
また、IchigoKamuyではVIDEO 0 (ビデオ出力オフ) により1.52倍程度速くなりましたが、
IchigoJam RではVIDEO 0による高速化は1.14倍程度にとどまりました。
DMAのおかげかはわかりませんが、IchigoJam Rではビデオ出力のコストがこれまでより少なくなっていることがわかります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1