電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

Analogue Pocket を入手しました

Analogue Pocket を入手しました。

昨年の9月に注文して届いたのは8月。約11か月かかりました。

送料合わせて4万円近い金額になる高級機ですが、満足感はあります。

互換機ではよくあるソフトウェア的なエミュレータではなく、FPGAでハードを再現した互換機です。
今の時代はソフトウェア的なエミュレータでもスピード面含めて再現性が高いので普通に使用してて違いは判りませんが。

今回は購入しませんでしたが、HDMIで出力できるDockやゲームギア等の他の機種のゲームが遊べるアダプタもオプションとして用意されています。

ボタンはSwitchのようなストロークの浅いカチカチしたもので、レスポンスもよく使いやすいです。

お気に入りの機能として実際の画面に似た感覚が資源されるオリジナルモードがあります。
ドットの間の隙間が再現されるモードで当時の雰囲気が味わえます。
IPS液晶に改造した実機を持っているのですが、これにもオリジナルモードがあるのですが、解像度が低くそこに黒のラインでドットが区切られるので、逆にドットが目立ちすぎるように感じるのですが、Analogue Pocketは1600×1440ドットの解像度があるので、うまく再現されています。
また、モノクロのゲームでも、表示色が、初代GB風、ゲームボーイポケット風、ゲームボーイライト風を選べます。
GBAもGBA風、GBASP風を選べたりと色々な機種の雰囲気を再現して遊べます。

GBとGBAのゲームはカートリッジが小さくて場所を取らないので、まだレトロゲームが安いころに大量に集めました。合計すると100個以上あります。
今でも手軽なGBやGBAのゲームはたまに遊ぶので、つい買ってしまった次第です。

AI関連の学習・研究目的で NVIDIA Jetson Orin NX を購入しました

今までAI関連に挑戦しようと思いつつ、TensorflowやOpenCV等の環境を作ってサンプルを動かしたところで止まってしまうということを何回も繰り返してきました。

Jetson Orinシリーズが発売されてからまたAI関連に挑戦したい欲が出てきまして、今度は本気でやろうと思い、高価ですが Jetson Orin NX 16GB を購入しました。
実際に購入したものは、AmazonでYahboomが直接販売しているケースやWifiモジュール等一通りセットになったものです。

Yahboom Jetson Orin NX 16GB 開発ボードキット

香港から1週間ほどで届きました。

色々なことをできるようにVRAMを多く確保したいと思いJetson Orin NX 16GBを購入しましたが、学習目的やちょっと手を出してみたいと思ってる人は、Jetson Orin Nano 4GBや一番低価格なNVIDIA Jetson Nanoでも良いと思います。

価格的(約15万円)にGeForce RTX 3070(モバイル)を搭載したミニPCのMinisforum NUCXI7と迷いましたが、こちらにすると結局Windowsのゲーム機になってしまい続かないと思い、専用機のJetson Orin NXを選択しました。

また別の理由として、過去にまだGeForce RTX 2060を搭載したデスクトップを所有している頃にUbuntu環境でCUDAを使用するためにnVidiaのドライバのインストールやOpenCVのビルドが素直にできなかったりした経験がありました。
ネットで色々情報を調べましたが、現在でも状況は変わらないようです。

ネットでAI関連の情報を探すとWindowsよりUbuntuの方が結構多いので、OSは何を選択してもUbuntuにしようと思ってました。
nVidiaの公式なOSのJetPackはUbuntuベースで、nVidia自身がJetson用に開発してるので、PCで環境を整えるより楽だと思います。

OS(JetPack)インストール済みの128GB SSDがセットに付属されていたのですが、512GBのSSDを使いたくてOSを新規にインストールしました。
OS(JetPack)をクリーンインストールする場合は、Ubuntu20.04環境のPCが必要です。
NVIDIA SDK Managerを使用すしてJetsonにUSBで接続して転送します。
PC側のUbuntuのバージョンは20.04又は18.04が必要で22.04には対応していません。
Dockerイメージもあるので、22.04の環境からはこちらで行うと良いでしょう。

CPUの基本性能も高くSSDも使用できるので、デスクトップでの捜査でもRaspberry Pi や Jetson nano のようなもたつきもなく、Ryzen 5 5500UのPCでUbuntuを使用するのと同じ感覚で使用できます。

Jetson Orin NX 16GBの主なスペック

AI 性能 100 TOPS (INT8)
GPU 1024 NVIDIA® CUDA® コアおよび 32 Tensor コア搭載のNVIDIA Ampere アーキテクチャー
GPU 最大周波数 918 MHz
CPU 8 コア Arm® Cortex®-A78AE v8.2 64 ビット CPU 2MB L2 + 4MB L3
CPU 最大周波数 2 GHz
メモリ 16GB 128 ビット LPDDR5 102.4 GB/秒

今後、Jetson関連の話題も書きますので、よろしくお願いします。

今さら Xiomi Pad 5 を買いました。

Xiaomi Pad 6 が発売されたわけですが、色々と調べてるうちに Xiomi Pad 5 のグローバル版256GBが中古で35,000円前後で買えることに気が付きました。

今まで使用していた Xiaomi Redmi Pad と比較してもAntutuでRedmi Padは33万、Xiomi Pad 5は56万と倍近い性能で体感でもわかるほどなので、これで良いかと思いました。
ちなみにXiaomi Pad 6は70万らしいです。

結局Xiomi Pad 5はオークションで約34,000円で購入することができ、Redmi Padは約25,000円で売却できました。

Xiomi Pad 5も現在はMIUI14 (Android13)にアップデートされてます。
OSはRedmi Padと比較するとUIやブラウザのスクロールが引っ掛かりもなく滑らかになり、操作感自体はiPad Proとそんなに変わらないくらいになりました。

Androidはサブ機であまり重いゲーム等はやりませんが、これくらいの性能になるとただ操作してるだけでも快適です。
Xiaomi Redmi Padでも十分快適だと思ってましたが、触ってみると細かいところで違いました。

DevTerm Kit RPI-CM4 Lite 手に入れました

この度DevTerm Kit RPI-CM4 Liteを手に入れました。
DevTerm自体は前からあるもので、コア部分がモジュール化されてARMベースのモジュールやRISC-V、RPI-CM3+Liteのモジュールがありました。
それまで気になってたのですがなかなか購入まで至らず、RPI-CM4 Liteのモジュールが発売されたのを機に購入しました。
4月に注文して届くまで4か月かかりました。

このキットの面白いところは下の写真のようにプラモデルみたいなものを組み立てます。

完成するとこんな感じです。

OSはモジュールに合わせてLinuxをカスタマイズしたDevTerm OSがあるのですが、RPI-CM4 LiteはRaspberry Pi OSがベースのものでした。

画面やキーが小さく正直実用性はないと思いますが、コンパクトで邪魔にならないので、SSHで他のサーバに接続したりターミナル的な使い方をすると意外と便利だと思いました。

サイズ、デザインから現代版ポケコンみたいで触ってるだけで楽しいです。

SSH接続許可設定 公開鍵認証+特定のIPアドレスからのアクセスはパスワード認証を許可

今回はただのメモです。

SSH接続許可設定でログインの認証方式を公開鍵認証(パスワード認証は無効)にして、特定のIPアドレスからのアクセスはパスワード認証を許可する方法

/etc/ssh/sshd_config に書く内容

PasswordAuthentication no
Match Address xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx  # 許可するIPアドレス(カンマで複数指定可能)
PasswordAuthentication yes

Raspberry Pi Zero 2 Wでスーパーコンピュータをつくってみた

Raspberry Pi Zero 2 Wでスーパーコンピュータをつくってみました。
とは言っても非常に非力なのは承知で、単純に遊んでみたかったのと、並列処理のプログラミングに興味があったので環境が欲しいと思ってました。

Raspberry Pi Zero 2 Wにしたのは最小のものにしたくてネタ的にも面白いと思ってたからです。
しかし現在入手が難しく、約1年かけて色々なショップをウォッチして3個入手できたので、これでクラスタ化した環境を作ってみました。

今回Raspberry Piでスーパーコンピュータを作るのにちょうど良い本を見つけたので、これを読みながら構築してみました。
Raspberry Piでスーパーコンピュータをつくろう!

今回は色々試しながらで何回もやり直したりしながらだったので構築手順は特に覚えているわけではなく、説明しにくいので詳細は書きません。興味のある方は、『Raspberry Piでスーパーコンピュータをつくろう!』を読んでみてください。

概要的には以下の手順で構築しました。

1. Raspberry Pi OSをセットアップ
それぞれIPアドレスは固定にして、ホスト名を変更します。

2. /etc/hosts を編集
お互いにホスト名でアクセスできるように/etc/hostsを編集します
今回は以下のように同じものをすべてのサーバに設定しました

192.168.0.41    rpisc01
192.168.0.42    rpisc02
192.168.0.43    rpisc03

3. 3台とも必要なものをインストール

sudo apt install build-essential manpages-dev gfortran nfs-common nfs-kernel-server openmpi-bin libopenmpi-dev openmpi-doc keychain nmap

スレーブとなる2台目以降はnfs-kernel-serverは必要ないのですが、あっても困らないので統一しました。

4. NFS設定
コンパイルした実行ファイルは全てのサーバで必要になります。
マスターサーバに適当な作業ディレクトリを作成し、スレーブからマウントして同じものが各サーバから使用できるようにします。

簡単ですが以上のように構築しました。

テストとして本に書いてあったπの値を求める計算をしてみました。
ソースコードは著作物で公開してよいかわからないのでここでは書きません。

ソースはmpiccコマンドでコンパイルします。

mpicc test1.c -o test1

これで実行ファイルとしてtest1が生成されます。

実行はmpiexecコマンドで実行できます。

例:プロセス(スレッド)を1で実行する場合

mpiexec -n 1 test1

実行時間を見るためにtimeコマンドを使用してまずコアを1個使用する状態で実行してみます。
"Enter number of segments:"と表示され入力を求められますが、本の例と同じように300000で実行してみます。

$ time mpiexec -n 1 test1

#######################################################

Master node name: rpisc01

Enter number of segments:

300000

*** Number of processes: 1

     Calculated pi = 3.14159265359071326
              M_PI = 3.14159265358979311
    Relative Error = 0.00000000000092015

real    46m38.851s
user    46m32.714s
sys     0m0.784s

処理の実時間をreal+sysとすると約46分39秒でした。

次はコアを4個使用してみます。

$ time mpiexec -n 4 test1

#######################################################

Master node name: rpisc01

Enter number of segments:

300000

*** Number of processes: 4

     Calculated pi = 3.14159265359071326
              M_PI = 3.14159265358979311
    Relative Error = 0.00000000000092015

real    11m44.018s
user    46m48.134s
sys     0m0.617s

real+sysで約11分45秒なので、処理速度も4倍になりました。

次にスレーブも含めた全てのコアを使って実行してみました。
実行に-n 16 とかの指定ではエラーになりスマートなパラメータの指定方法がわからず、とりあえず-Hで指定しました。

$ time mpiexec -H rpisc01,rpisc01,rpisc01,rpisc01,rpisc02,rpisc02,rpisc02,rpisc02,rpisc03,rpisc03,rpisc03,rpisc03 test1

#######################################################

Master node name: rpisc01

Enter number of segments:

300000

*** Number of processes: 12

     Calculated pi = 3.14159265359072037-
              M_PI = 3.14159265358979311
    Relative Error = 0.00000000000092725

real    5m20.207s
user    17m6.587s
sys     2m8.557s

real+sysで約7分28秒でした。
期待したほどではなかったのですが、1台の時よりは速くなりました。
realの時間は倍以上になっているので、単純な処理では速くなっているのですが、sysの時間が増えてしまいました。
マスター+スレーブ1台の場合でも2分近くかかったので、恐らくサーバ間の通信処理辺りがボトルネックになっていそうです。

並列処理の分野は経験が無く、どう応用すればよいかもわかりませんが、これから遊んでみたいと思います。

Arduino Uno R4 Minima 入手しました

所用で秋葉原に行った際に秋月電子通商に寄ったら Arduino Uno R4 Minima があったので、買ってみました。

名前の通りこれが今後の標準な機種になると思います。
Wifi搭載の Arduino UNO R4 WiFi もあるのですが、こちらは技適がまだのようで取得次第国内でも販売されるようです。

MCUはRenesas RA4M1になりました。これはコアが ARM Cortex-M4です。
今までARMコアのArduinoとしてはCortex-M3のDueやCortex-M0+のZeroがありましたがFPUが無いモデルでした。ARM Cortex-M4 はFPU搭載なので、ポイントが高いです。Renesas ってのもポイントですね。

前にNUCLEO-F4シリーズでサイン波に簡単なエフェクトを掛けてちょっとした音源を作ったことがあるのですが、経過時間から波形の現在のアナログ値を計算してました。
同じ方法でArduino Zeroで作ろうとしたら、小数点演算の速度が遅くて思うように作れたなかったことがありました。
今度はFPUに加え、12bitのDACもあるので、これ単体で自作音源が作れそうです。

メモリも32 kB of SRAM、256 kB flash、8 kB data (EEPROM) と大幅に増えました。簡単な電子工作では困らないと思います。自作音源に加え、シーケンサまで作れそうです。

GPIOの動作電圧は5Vのままです。これも個人的には良いポイントで、今までのシールドがそのまま使用できることに加え、5Vの機器もそのまま接続できます。
FM音源は基本的に5Vで他のARMコアのmbedやRP2040のものは3.3Vばかりで上手く扱えなかった上に、同じArduinoでさえDueやZeroは3.3Vでした。

高性能になった分消費電力も上がってるので、実用的なものを作る場合はR3を選択することもあると思いますが、価格もそんなに変わらないので、基本的にはこれからはR4で良いと思います。

docs.arduino.cc