IchigoJam Advent Calendar 2019 - Day 9
Raspberry Pi Advent Calendar 2019 - Day 9

ふうせん🎈 Fu-sen. です。

2019å¹´12月6日に IchigoJam BASIC 1.4.1 が公開されました。👏パチパチ…
IchigoJam Advent Calendar 2019 は昨日に引き続き、1.4 関連情報です。

IchigoJam BASIC はバージョンアップの時に最適化されて、
高速化されています。バージョンによって速さが変わります。
更に IchigoJam web や IchigoJam BASIC RPi など、
プラットフォームによっても速さが異なります。
という事で、1.4.1 を含めて処理速度を測ってみた!というお話です。


IchigoJam BASIC 1.4.1 リリース!

IchigoJam BASIC 1.4.1

プレスリリースが出ています。
B Inc. は jig.jp の子会社で、IchigoJam の事業を扱っています。

……えっ? それよりも気になるものがあるって???

これですね~。IchigoDyhook(イチゴダイフク)です。
PCN が予約を受け付けてますよ。
予約特典がありますので、どんどん申し込んで下さい~。

……あ、Raspberry Pi で動作する IchigoJam BASIC である
IchigoJam BASIC RPi は、jig.jp・B Inc. ではなく、
ナチュラルスタイルが対応を行っています。

そのため、オリジナル版から遅れて公開されます。
1.4 が早々に決まったので、1.3 系はベータ版が公開されたものも、
正式公開されずに保留されている状況のようです。
1.4 系の公開まで今しばらくお待ち下さい。

それでは、本題に入ります。


FOR~NEXT 10000 回ループ

まずは FOR~NEXT から。0 から 9999 で 10000 回のループです。
TICK() は約 1 秒で 60 となります。小さい値ほど速い事になります。
CLT は TICK() の値を 0 へリセットする命令です。
なお、IchigoJam BASIC では NEXT に変数を付けない仕様になっています。

10 CLT
20 FOR I=0 TO 9999
30 NEXT
40 PRINT TICK()
50 END

FOR~NEXT が入ったのが 0.9.8RC になります。
そのため、動作はその後公開されている正式版 1.0.1 以降で調べました。
もちろん公開されたての 1.4.1 も含めてあります。

IchigoJam BASIC+IchigoJam

IchigoJam BASIC 1.4.1

バージョン プラットフォーム TICK()
IchigoJam BASIC 1.4.1 IchigoJam 764
IchigoJam BASIC 1.3.1 IchigoJam 773
IchigoJam BASIC 1.2.3 IchigoJam 1218
IchigoJam BASIC 1.1.1 IchigoJam 1274
IchigoJam BASIC 1.0.1 IchigoJam 1522

ちゃんとバージョンアップする毎に速くなってますね!
1.4.1 も 1.3.1 より速くなってます!

では異なるプラットフォームではどうでしょうか?

IchigoJam web

IchigoJam web

バージョン プラットフォーム TICK()
IchigoJam BASIC 1.0.1 IchigoJam 1522
IchigoJam BASIC web Web ブラウザ 2500

IchigoJam web は比較的最新のベータ版が反映されているのですが、
IchigoJam 実機よりも速度が遅いです。
この速度は Web ブラウザを変えても一緒です。
また、数ヶ月前の 1.3 時代でも速度は変化していません。

IchigoJam BASIC RPi+Raspberry Pi

IchigoJam BASIC RPi

バージョン プラットフォーム TICK()
IchigoJam BASIC RPi 1.3b7RPi Raspberry Pi 3 Model B+ 16
IchigoJam BASIC RPi 1.2.4RPi Raspberry Pi 3 Model B+ 23
IchigoJam BASIC RPi 1.2.6RPi Raspberry Pi 3 Model B+ 27
IchigoJam BASIC RPi 1.3b7RPi Raspberry Pi Zero WH 47
IchigoJam BASIC RPi 1.2.4RPi Raspberry Pi Zero WH 59
IchigoJam BASIC RPi 1.2.6RPi Raspberry Pi Zero WH 74
IchigoJam BASIC 1.4.1 IchigoJam 764

Raspberry Pi ご愛用の皆様、お待たせいたしました。
IchigoJam BASIC RPi の登場です。
自分は Raspberry Pi Zero WH と Raspberry Pi Model B+ を持っていますので、
この 2 機種で行っています。

IchigoJam BASIC RPi は Raspberry Pi Zero WH でも
LPC1114 を用いた IchigoJam 実機とは速さが全然違います。
IchigoJam BASIC RPi を使うために Raspberry Pi を入手するなら
Raspberry Pi Zero WH で十分という事ですね。
Raspberry Pi 3 Model B+ は更に高速な値が出ています。
Raspberry Pi のモデルによっても差が出てくる事になります。

なお、IchigoJam BASIC RPi の 1.2RPi 系は
バージョンアップと共に新機能が加わっていたため、
1.2.4RPi より 1.2.6RPi の方が遅くなっていますが、
オリジナルの 1.3 で最適化された影響を反映して 1.3b7 は 1.2RPi 系より速くなっています。
1.4.1 を反映した 1.4RPi が正式版になると思われるので、
更に高速になる事が期待できますね。🤩キラリン

Raspberry Pi 4 Model B+ は更に速い速度ができたいできそう…… 🤩🤩🤩
……と思うのですが、投稿時点ではまだ IchigoJam BASIC RPi で
Raspberry Pi 4 Model B+ の動作が実現できている報告がありません 😭
というわけで Raspberry Pi 3 Model B+ の計測になっています。
(……いや、自分はまだ Raspberry Pi 4 Model B+ 入手してませんけど 😅)
仕様が大きく変わった影響で、もしかすると対応に日数を要する可能性もあるので、
気長にお待ちいただければと思います。

総括

バージョン プラットフォーム TICK()
IchigoJam BASIC RPi 1.3b7RPi Raspberry Pi 3 Model B+ 16
IchigoJam BASIC RPi 1.2.4RPi Raspberry Pi 3 Model B+ 23
IchigoJam BASIC RPi 1.2.6RPi Raspberry Pi 3 Model B+ 27
IchigoJam BASIC RPi 1.3b7RPi Raspberry Pi Zero WH 47
IchigoJam BASIC RPi 1.2.4RPi Raspberry Pi Zero WH 59
IchigoJam BASIC RPi 1.2.6RPi Raspberry Pi Zero WH 74
IchigoJam BASIC 1.4.1 IchigoJam 764
IchigoJam BASIC 1.3.1 IchigoJam 773
IchigoJam BASIC 1.2.3 IchigoJam 1218
IchigoJam BASIC 1.1.1 IchigoJam 1274
IchigoJam BASIC 1.0.1 IchigoJam 1522
IchigoJam BASIC web Web ブラウザ 2500

全てを一覧するとこのようになります。

IchigoJam ap は Windows パソコン・Mac のスペックや
同時に動作している状況によって速度が変わるので、ここでは含めませんでした。
1.4b13 同梱の IchigoJam ap で Windows 10 から動作した場合、1~10 辺りです。


FOR~NEXT を IF に変えてみたら?

BASIC で FOR~NEXT を IF に変えると遅くなるという情報があったので、
IchigoJam BASIC も同様になるのか試してみました。
IF にする事で、0.9.7 以前でも実行できる、というメリットもあります。
TICK() は 0.8.1 からの対応です。(0.8.0 は TIME で同等、CLT も 0.8.0 より)

10 CLT
20 I=0
30 IF I<9999 I=I+1:GOTO 30
40 PRINT TICK()
50 END

※ IchigoJam BASIC では IF~THEN の THEN を省略できます。
※ GOTO 30 を CONT に変更できますが、1.1 以降対応です。

IchigoJam BASIC 1.4.1

バージョン・プラットフォーム TICK() FOR 値
IchigoJam BASIC RPi 1.3b7RPi+Raspberry Pi 3 Model B+ 27 16
IchigoJam BASIC RPi 1.2.6RPi+Raspberry Pi 3 Model B+ 48 27
IchigoJam BASIC RPi 1.3b7RPi+Raspberry Pi Zero WH 82 47
IchigoJam BASIC RPi 1.2.6RPi+Raspberry Pi Zero WH 140 74
IchigoJam BASIC 1.4.1 1064 764
IchigoJam BASIC 1.3.1 1078 773
IchigoJam BASIC 1.2.3 2081 1218
IchigoJam BASIC 1.1.1 2355 1274
IchigoJam BASIC 1.0.1 4654 1522
IchigoJam BASIC web 7500 2500
IchigoJam BASIC 0.9.7 9579
IchigoJam BASIC 0.8.1 6677

……全てのバージョンで FOR~NEXT より遅いですねぇ。
そして、0.9.7 が目立って遅いですが、0.8.1 は 0.9.7 より速いです。
0.●.● は開発途上の状態で機能が追加されていた時期なので、
機能が増えていった分処理速度が遅くなっていった事がわかります。
これは IchigoJam BASIC RPi の 1.2RPi 系と同じ状況です。


以前はループの間に特定の処理を入れて、その計測結果を
イチゴジャム レシピ で公開していた事もありました。
最新版では基本的に短くコマンドを記載するほど高速になるようですが、
必ずしもそうではないケースもあったりします。CONT と GOTO ● とか。
冬休みの研究テーマとして、いろいろ試してみるのも面白そうですね。


Raspberry Pi 使いの方へ

Raspberry Pi Advent Calendar 2019 には
Ichigojam BASIC RPi 関連で他の人にも参加してもらいたかったのですが、
埋まってしまったので…… 😭

自分は電子工作を IchigoJam で覚えたので、画面表示前提で記載していますが、
最近は IchigoJam は IN・OUT 端子の制御で使われている事が多いです。
OUT 1,1 とか、A=IN(1) とか。これは IchigoJam BASIC RPi も対応しています。
なので、Raspberry Pi でも IN・OUT 制御を目的としているのであれば、
Raspbian などの OS 入れて、更にアプリを入れて、コードを書いて~……
ここまでどれ位の時間を要するんでしょう?
IchigoJam BASIC RPi だったら SD カードに入れて数秒で起動できて、
すぐにプログラムして動かす事ができるんです!

まずは IchigoJam Advent Calendar 2019 で、こんな事ができる!というのを見てもらい、
あとは IchigoJam BASIC RPi を SD カードに入れて起動して、
実際に触れてもらえればと思います。


追加 2020/06/21

IchigoJam BASIC は MSX-BASIC より速いのか?という反応がありましたので……
CLT ・ TICK の代わりに TIME を使います。
単位は 1/60 秒なので IchigoJam BASIC NTSC 版の TICK 値にに同じです。

10 TIME=0
20 FOR I=0 TO 9999
30 NEXT
40 PRINT TIME
50 END

MSX での結果

バージョン プラットフォーム TICK()
IchigoJam BASIC RPi 1.3b7RPi Raspberry Pi 3 Model B+ 16
IchigoJam BASIC RPi 1.2.4RPi Raspberry Pi 3 Model B+ 23
IchigoJam BASIC RPi 1.2.6RPi Raspberry Pi 3 Model B+ 27
IchigoJam BASIC RPi 1.3b7RPi Raspberry Pi Zero WH 47
IchigoJam BASIC RPi 1.2.4RPi Raspberry Pi Zero WH 59
IchigoJam BASIC RPi 1.2.6RPi Raspberry Pi Zero WH 74
MSX-BASIC・R800 MSX turbo R 185
IchigoJam BASIC 1.4.1 IchigoJam 764
IchigoJam BASIC 1.3.1 IchigoJam 773
MSX-BASIC・Z80 MSX/2/2+ 1073
IchigoJam BASIC 1.2.3 IchigoJam 1218
IchigoJam BASIC 1.1.1 IchigoJam 1274
IchigoJam BASIC 1.0.1 IchigoJam 1522
IchigoJam BASIC web Web ブラウザ 2500

FOR・NEXT 10000 回は
IchigoJam BASIC 1.3 で Z80 動作の MSX-BASIC を超えています。
しかし MSX turbo R の R800 動作は LPC1114 動作の IchigoJam よりも高速です。
IchigoJam BASIC RPi は Zero WH でも R800 よりも高速ですね。


IchigoJam Advent Calendar 2019

IchigoJam Advent Calendar 2019 | Qiita


Raspberry Pi Advent Calendar 2019

Raspberry Pi Advent Calendar 2019 | Qiita