EntisGLS4s.03 を公開しました。
ARM 用 JIT コンパイラにはまだバグがあるかもしれませんが、とりあえず同梱のフロントエンド(cotobuild.exe)で Android 用 apk ファイルの作成までできます。(もちろん Android SDK は必要ですが)
ついでに、サンプルとしてPSD画像ビューアを作成しました。
EntisGLS4s はゲーム用プラットフォームなので、かなり変則的なアプリなのですが、ソースその他はこちらに置いておきます。
一応PSDファイル以外のビューアとしても拡張実装することを想定した造りにはなっているのですが、実際になにか拡張実装するかどうかは別の話で。
それとこのサンプルの apk は Sakura2VM で動作するものなので、大きなPSDを開こうとすると非常に重いです。(Win32 exe のほうはそれでもそこそこの速度で開けると思います)
ソースを gcc でコンパイルしたバージョンは別に作って Google Play に登録してみました。そこそこサクサク動作だと思います。
とりあえず試験的に作ってみたというアプリです。
EntisGLS4s 最新バージョンを公開したかったのですが、色々忙しくて、そうこうしているうちに、書きかけのソースが混ざってきて、公開出来ない状態に。
一応、ARM 用 JIT コンパイラが機能しますので、次のバージョン(いつになるかは不明ですが)で実質上、Android用のアプリを開発できる初めのバージョンになると思います。
因みに、WindowsとAndroid共通で利用できるメニューインターフェースが次バージョンで追加されています。まあ、WindowsとAndroidだとメニューUIの見え方はだいぶ違うわけですが…、プログラム的には同一コードで走りますよ、というものです。
あと、イラストとかも描きたいんですけどねぇ〜、もう本当に時間がない。
とりあえず、ARM用JITコンパイラでSakura2VMの全命令をVFPやNEON命令に変換できるようにしたので、以前にパフォーマンステストに使用した物と同じ物をARMで実行してみました。
4x4行列とベクトルの積を連続的に計算して所要時間から実効FLOPSを求めるものです。
右端の列がC++コンパイラで出力したネイティブバイナリで、その左が同じコードを詞葉コンパイラでコンパイルしたSakura2バイナリ、その左はSakura2VM用の手書きインラインアセンブリコードによるものです。
(※JIT ARMv5 は実際の ARMv5 で実行するとこの10倍ほど遅くなる可能性があります。JIT コンパイラが ARMv5 用コードを出力する場合、浮動小数点命令は関数の呼び出しコードを出力するのですが、ARMv7 の場合その関数が VFP 命令を使用しています)
結果をザックリ見ると、Atom 1.86GHz と ARM 1GHz がおおよそ近い速度となっていますね。C++コンパイラによるネイティブバイナリの結果はだいぶ違いますが。
あと、手元にある唯一の NEON 環境である APQ8055 はどうにも NEON 命令の出来が悪そうですね。
NEON 命令を出力した場合、そうでない場合よりずっと少ない命令数になっているのにそうでない場合より遅いという…。
一つ前の日記でも書きましたが、CPU側が「なんちゃってSIMD」実装になっていたり、特定の命令がパイプライン化されていないために寧ろ遅くなっている感触です。理屈上はこの数倍のパフォーマンスが出ても不思議ではないのですが…。
実機が Android2.2 とか 2.3 なのでいい加減 Android4 も買って新しいCPUで試してみたいところではありますが、そのためだけに買おうと言う気もしないところです…(汗)
|