Mathematicaが無料になって以来、Raspberry Piを触る機会が増えました。Raspberry Piの良さは、各種センサーを比較的容易に使えることにあり、そういうことをしないなら、Raspberry Piはあまりいいハードウェアではありません。メモリはたった512MBしかなく、CPUは32ビットのARM、そのクロックは700MHzと低速です。
実験のために、Raspberry Pi用のバイナリを動かしたいことがあるのですが、この性能の低さに憂鬱になります。インテル入ってるのPCは、Raspberry Piよりはるかに高性能なので、Raspberry Pi用のバイナリをRaspberry Pi上ではなくPC上で動かせればいいのですが、CPUが違うので、Raspberry Pi、つまりARM用のバイナリを、インテルのCPUでそのまま動かすことはできません。
そこで、QEMUでエミュレートすることを考えます。QEMUのエミュレーションには、システム全体をエミュレートする方法と、ユーザーモードだけをエミュレートする方法があります。
以前紹介した方法(Windowsの場合・Ubuntuの場合)は、システム全体をエミュレートする方法です。比較的高性能なPCなら、システム全体をエミュレートしても、実機と同程度の性能を発揮できます(メモリが256MBという問題がありましたが)。
ここではユーザーモードをエミュレートする方法を紹介します。この方法には、システム全体をエミュレートするよりも軽く、使えるメモリも多い(ホストに十分なメモリがあれば)というメリットがあります。
Ubuntuで試します。
まず、Raspbianのイメージをダウンロードします。2013-12-24以降がいいでしょう。
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2014-01-09/2014-01-07-wheezy-raspbian.zip
「fdisk -l 2014-01-07-wheezy-raspbian.img
」などとして、2番目のパーティションの始点を調べます(2014-01-07-wheezy-raspbian.imgの場合は122880です)。これに512をかけた結果(62914560)を後で使います。
qemu-user-staticをインストールし、作業用ディレクトリを作ります(この作業は1回だけやればいいです)。
sudo apt-get install qemu-user-static mkdir rootfs
イメージをマウントします。
sudo mount -o offset=62914560 2014-01-07-wheezy-raspbian.img rootfs
エミュレーション環境を整えます(この作業は1回だけやればいいです)。
sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/ sudo sed -i 's/^/#/' rootfs/etc/ld.so.preload
エミュレーションを開始します。
sudo QEMU_CPU=arm1176 chroot rootfs
qemu-arm-staticがデフォルトでエミュレートするアーキテクチャはARMV7lですが、Raspberry PiはARMV6l(CPUはARM1176)なので、環境変数をそのように設定しています(arm1176
の代わりにarm11mpcore
とすればマルチコアになります)。事前に「xhost local:localhost
」とすればXの画面も持ってこられます。
後はご自由に。
Wolfram Cloud(https://t.co/OXD06DFhiu )のFree版、計算時間の制限はかなり厳しい。Raspberry Piも遅いし、Poor Man’s Mathematicaは依然として、http://t.co/fJnM9JYBy6 がベストか。
— Taro YABUKI (@yabuki) 2014, 6月 29
スマホでMathematicaを動かそうとしていますが、うまくいきません。http://oboegaki-no-oboegaki.blogspot.jp/2014_06_01_archive.html
ネイティブ動くのが魅力的です。Raspbianも動きましたが同じ結果でした。
dinosauria123さん
これはすごいですね。
ライセンス的には無理なのでしょうが、キージェネレータなどで無理やり動かす人はいそうです。
CPUをfakeできれば動くようなきもしています。
arm-kvmが動けばもしかして…
誘惑に負けてkeygenで動かしました。wolframは動きましたがmathematicaは動きませんでした。
wolframでのベンチマークは0.07でした。
母機はarm8コアでAntutuが32000ぐらいのスコアのものです。
詳しく書くと、
200.0
9.69 5.23 23.30 16.28 14.81 3.90
4.51 5.70 32.11 9.39 8.66
1.77 7.00 29.82 27.80
でした。
CPU:MTK6592 32bit 8コア1.66GHz
メモリ:2GB
Wolframはもう少し寛容になってほしいところですが、
ビジネスがうまくいかなくなっては困るので、
難しいところですね。