IchigoJam BASIC の処理速度をバージョンやプラットフォーム別に見てみる。
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』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. ではなく、
ナチュラルスタイルが対応を行っています。
そのため、オリジナル版から遅れて公開されます。
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
バージョン | プラットフォーム | 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
バージョン | プラットフォーム | TICK() |
---|---|---|
IchigoJam BASIC 1.0.1 | IchigoJam | 1522 |
IchigoJam BASIC web | Web ブラウザ | 2500 |
IchigoJam web は比較的最新のベータ版が反映されているのですが、
IchigoJam 実機よりも速度が遅いです。
この速度は Web ブラウザを変えても一緒です。
また、数ヶ月前の 1.3 時代でも速度は変化していません。
IchigoJam BASIC RPi+Raspberry Pi
バージョン | プラットフォーム | 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 以降対応です。
バージョン・プラットフォーム | 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
バージョン | プラットフォーム | 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 よりも高速ですね。
追加 2021/01/25
PCN福井 新製品発表会 | PCN プログラミング クラブ ネットワーク
RISC-V プロセッサを対応した IchigoJam R β版 が 2020年12月 発表されました。
2021年1月 に出荷され、自分も受け取っています。
従来の LPC1114 プロセッサは IchigoJam BASIC 1.4.3 まで進行していましたので、
こちらも合わせて測ってみました。
バージョン | プラットフォーム | 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.5b1 | IchigoJam R β (RISC-V) | 99 |
IchigoJam BASIC 1.4.3 | IchigoJam | 766 |
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 |
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