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

 こどものプログラミング教育ツール『IchigoJam BASIC』ver 1.4リリース | B Inc.

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

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

 IchigoDyhook | PCN プログラミング クラブ ネットワーク

 IchigoDakeドッキングステーション「IchigoDyhook(PS-IJ1)」 | IODATA アイ・オー・データ機器

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

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

 IchigoJam BASIC RPi/RPi+

そのため、オリジナル版から遅れて公開されます。
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.1IchigoJam764
IchigoJam BASIC 1.3.1IchigoJam773
IchigoJam BASIC 1.2.3IchigoJam1218
IchigoJam BASIC 1.1.1IchigoJam1274
IchigoJam BASIC 1.0.1IchigoJam1522

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

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

IchigoJam web

IchigoJam web

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

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

IchigoJam BASIC RPi+Raspberry Pi

IchigoJam BASIC RPi

バージョンプラットフォームTICK()
IchigoJam BASIC RPi 1.3b7RPiRaspberry Pi 3 Model B+16
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi 3 Model B+23
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi 3 Model B+27
IchigoJam BASIC RPi 1.3b7RPiRaspberry Pi Zero WH47
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi Zero WH59
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi Zero WH74
IchigoJam BASIC 1.4.1IchigoJam764

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.3b7RPiRaspberry Pi 3 Model B+16
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi 3 Model B+23
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi 3 Model B+27
IchigoJam BASIC RPi 1.3b7RPiRaspberry Pi Zero WH47
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi Zero WH59
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi Zero WH74
IchigoJam BASIC 1.4.1IchigoJam764
IchigoJam BASIC 1.3.1IchigoJam773
IchigoJam BASIC 1.2.3IchigoJam1218
IchigoJam BASIC 1.1.1IchigoJam1274
IchigoJam BASIC 1.0.1IchigoJam1522
IchigoJam BASIC webWeb ブラウザ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+2716
IchigoJam BASIC RPi 1.2.6RPi+Raspberry Pi 3 Model B+4827
IchigoJam BASIC RPi 1.3b7RPi+Raspberry Pi Zero WH8247
IchigoJam BASIC RPi 1.2.6RPi+Raspberry Pi Zero WH14074
IchigoJam BASIC 1.4.11064764
IchigoJam BASIC 1.3.11078773
IchigoJam BASIC 1.2.320811218
IchigoJam BASIC 1.1.123551274
IchigoJam BASIC 1.0.146541522
IchigoJam BASIC web75002500
IchigoJam BASIC 0.9.79579
IchigoJam BASIC 0.8.16677

……全てのバージョンで 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 より速いのか?という反応がありましたので……
CLTTICK の代わりに 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.3b7RPiRaspberry Pi 3 Model B+16
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi 3 Model B+23
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi 3 Model B+27
IchigoJam BASIC RPi 1.3b7RPiRaspberry Pi Zero WH47
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi Zero WH59
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi Zero WH74
MSX-BASIC・R800MSX turbo R185
IchigoJam BASIC 1.4.1IchigoJam764
IchigoJam BASIC 1.3.1IchigoJam773
MSX-BASIC・Z80MSX/2/2+1073
IchigoJam BASIC 1.2.3IchigoJam1218
IchigoJam BASIC 1.1.1IchigoJam1274
IchigoJam BASIC 1.0.1IchigoJam1522
IchigoJam BASIC webWeb ブラウザ2500

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


追加 2021/01/25

 PCN福井 新製品発表会 | PCN プログラミング クラブ ネットワーク

RISC-V プロセッサを対応した IchigoJam R β版 が 2020年12月 発表されました。
2021年1月 に出荷され、自分も受け取っています。
従来の LPC1114 プロセッサは IchigoJam BASIC 1.4.3 まで進行していましたので、
こちらも合わせて測ってみました。

バージョンプラットフォームTICK()
IchigoJam BASIC RPi 1.3b7RPiRaspberry Pi 3 Model B+16
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi 3 Model B+23
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi 3 Model B+27
IchigoJam BASIC RPi 1.3b7RPiRaspberry Pi Zero WH47
IchigoJam BASIC RPi 1.2.4RPiRaspberry Pi Zero WH59
IchigoJam BASIC RPi 1.2.6RPiRaspberry Pi Zero WH74
IchigoJam BASIC 1.5b1IchigoJam R β (RISC-V)99
IchigoJam BASIC 1.4.3IchigoJam766
IchigoJam BASIC 1.3.1IchigoJam773
IchigoJam BASIC 1.2.3IchigoJam1218
IchigoJam BASIC 1.1.1IchigoJam1274
IchigoJam BASIC 1.0.1IchigoJam1522
IchigoJam BASIC webWeb ブラウザ2500

RISC-V は速い! Rasspberry Pi Zero WH に追いつきそうな速さになりました。
今後値は変わりますが、従来の LPC1114 よりは明らかに速いです。
一方機能が追加された影響で 1.4.3 は 1.4.1 より微妙に遅くなっています。
まぁ、ほとんど変わらない速度ではありますが……


追加 2022/01/16

2021年12月に RISC-V 版向けに IchigoJam BASIC 1.5.0 が正式公開されました。
1.5.0 の速度を確認したところ、上記の 1.5b1 と同じ 99 でした。


IchigoJam Advent Calendar 2019

 IchigoJam Advent Calendar 2019 | Qiita


Raspberry Pi Advent Calendar 2019

 Raspberry Pi Advent Calendar 2019 | Qiita