Archives

December 2010 の記事

Android 端末 ZEN Touch2 は低価格ながら i.MX51 を搭載しており
CPU core は ARM Cortex-A8 であることがわかりました。
ARMv7 アーキテクチャなので ARM11 (ARMv6) 系のスマートフォンより高速に
動作すると考えられます。

Creative ZEN Touch 2

ところが ZENTouch2 は armeabi-v7a で build した NDK のアプリケーションを
インストールすることができませんでした。
armeabi なら OpenGL ES 2.0 を使っていても実行出来ることが分かっています。


●NDK とアーキテクチャ

現在の Android NDK r5 は 2つの ARM アーキテクチャに対応しています。

・armeabi      ARMv5TE
・armeabi-v7a  ARMv7

armeabi (ARMv5TE) と比べた場合 armeabi-v7a (ARMv7) のメリットは下記の通り。

・1. VFP (fpu) が使用可能。ハードウエアによる浮動小数演算
・2. Thumb-2 命令セット対応
・3. NEON (SIMD) 命令を利用可能。
・4. ARMv6 以降の新しい命令が使用可能。

4. でいえば、例えばスレッド間の同期に使う ldrex, strex 命令があります。
Compare And Swap 等のアトミック命令を作成できるので、これを使って
様々な同期オブジェクトを作ります。

Thumb-2 は Thumb 同様コード容量を抑えつつも、浮動小数演算など ARM (32bit)
相当の命令が利用出来るよう拡張されています。

特にメリットあるのは VFP/NEON かもしれません。
Android でも VFP 前提でネイティブなコードを書くことが可能となります。


●NDK と ARMv7 の浮動小数演算

NDK では armeabi-v7a (ARMv7) の場合少なくとも VFPv3-D16 対応であると
みなしています。

VFPv3 には 2つのバリエーションがあります。

 ・VFPv3-D16
 ・VFPv3-D32

VFPv3 は 32個の単精度浮動小数レジスタを持っています。

・単精度 32bit レジスタ s0~s31
・倍精度 64bit レジスタ d0~d15

+---------+---------+---------+-  -+---------+
| d0      | d1      | d2      |    | d15     |
+----+----+----+----+----+----+ ~ +----+----+
| s0 | s1 | s2 | s3 | s4 | s5 |    | s30| s31|
+----+----+----+----+----+----+-  -+----+----+

↑倍精度レジスタと単精度レジスタは上記のように共有されます。

倍精度レジスタは 16個ですがレジスタフィールドは 5bit あるため
命令上は倍精度レジスタを 2倍に増やすことが可能です。

+---------+---------+-  -+---------+-   -+---------+---------+
| d0      | d1      |    | d15     |     | d30     | d31     |
+----+----+----+----+ ~ +----+----+ ~ -+---------+---------+
| s0 | s1 | s2 | s3 |    | s30| s31|
+----+----+----+----+-  -+----+----+

↑このように倍精度レジスタを 2倍に増やしたのが VFPv3-D32 となります。

NEON 命令を実装している場合 128bit の SIMD レジスタが 16個あります。
レジスタは VFP と共有されるため、NEON 命令が使える CPU では自然に
VFPv3-D32 相当となります。

+-------------------+-  -+-------------------+-  -+-------------------+
| q0                |    | q7                |    | q15               |
+---------+---------+    +---------+---------+    +---------+---------+
| d0      | d1      | ~ | d14     | d15     | ~ | d30     | d31     |
+----+----+----+----+    +----+----+----+----+   -+---------+---------+
| s0 | s1 | s2 | s3 |    | s28| s29| s30| s31|
+----+----+----+----+-  -+----+----+----+----+

よって Android NDK の場合は armeabi-v7a 選択時は下記の 2種類存在して
いることになります。

(1) VFP のみの場合は VFPv3-D16
(2) NEON 対応時の VFP は VFPv3-D32

実際に調べた結果は下記のとおり

(1) VFP のみ (VFPv3-D16)
 ・Tegra2 Cortex-A9 MPCore

(2) VFP+NEON (VFPv3-D32)
 ・Cortex-A8 各種
 ・Scorpion (Snapdragon)


●armeabi まとめ

abi          arch     浮動小数       SIMD
--------------------------------------------------
armeabi      ARMv5TE  なし           なし
armeabi-v7a  ARMv7    VFPv3-D16      なし
armeabi-v7a  ARMv7    VFPv3-D32      NEON

armeabi と armeabi-v7a はバイナリを分けることが可能です。
両方のバイナリを含んでいる実行ファイルは fat binary と呼ばれているようです。
ARMv7 時に NEON 命令対応かどうかの判定は x86 の SSE のように実行時に行います。


●abi の指定方法

NDK を使ったコードは、プロジェクトの jni フォルダに配置します。
ここに c/cpp コードと Android.mk を置いて NDK 付属の ndk-build コマンドを
実行します。

例えば NDK 付属サンプルをビルドするなら下記のように実行します。
(Windows + cygwin 利用時に NDK を c:/sdk/android-ndk-r5 に展開したと仮定)

 $ cd /cygdrive/c/sdk/android-ndk-r5
 $ cd samples/hello-gl2
 $ ../../ndk-build

armeabi-v7a を指定するには下記のようにします。

 $ ../../ndk-build TARGET_ARCH_ABI=armeabi-v7a

jni フォルダに Application.mk を作成し、下記の 1行を書いておけば
無指定でも armeabi-v7a になります。

# Application.mk

APP_ABI := armeabi-v7a

下記のように記述すれば両対応の fat binary になります。

# Application.mk

APP_ABI := armeabi armeabi-v7a

NEON 対応で build するには Android.mk に "LOCAL_ARM_NEON := true" を加えます。

Windows 上の cygwin 経由だと make が遅いので、自分で build system を
構築するのもありかもしれません。


●互換性

ARMv7 アーキテクチャの端末でも ARMv5TE の armeabi のバイナリを実行できます。
上位互換性が保たれています。

1. もし armeabi-v7a の lib があればそれを使う。
2. なければ armeabi の lib を読み込む。

ARM11 のように ARMv6 アーキテクチャの場合は常に armeabi (ARMv5TE) が
選択されます。残念ながら ARMv6 の命令や機能は利用できません。

例えば ARM11 の CPU Core で VFP を搭載していたとしても VFP 命令を
活用できないことになります。

同じ ARM11 で比べた場合、c/cpp コード移植時は VFP が使える iOS の方が
高速に動作する可能性があります。

ただしこれはあくまで Android の NDK を使ったアプリケーションの話です。
カーネルや Java コードが ARMv6/VFP の機能を活用していないわけではありません。


●CPU Features

NDK には ARMv7 向けに NEON 対応などの CPU Feature を判定するコードが
付属しています。

ソースを見ると、単に /proc/cpuinfo を読み出して Features の行を見ているだけ
であることがわかります。
"vfp" や "neon" といった文字列そのもので判断しています。


●ZEN Touch2

ZEN Touch2 は Cortex-A8 搭載ですが cpuinfo の Features に "vfp" は
あるものの "neon" が含まれていません。

同じ i.MX51 を搭載している NetWalker も全く同様で "neon" がありませんが
NEON 命令をコンパイルすると実行することが出来ます。
(過去のエントリ参照)

よって ZEN Touch 2 も NEON 命令自体には対応していると考えられます。
Features に "neon" が含まれていないのは i.MX51 の何らかの事情によるもの
でしょうか。

また ZENTouch2 で armeabi-v7a のバイナリを install 出来ない理由も
分かっていません。


関連エントリ
Android ZEN Touch 2 の CPU/GPU その2
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
Tegra2 Cortex-A9 と浮動小数演算
Snapdragon と浮動小数演算速度
ARM Cortex-A8 の NEON と浮動小数演算最適化
NetWalker PC-Z1 Cortex-A8 (ARM) 浮動小数演算の実行速度


以前 Netwalker に似ていると書きましたが本当に Freescale i.MX51 でした。

CPU: Cortex-A8 800MHz
GPU: AMD Z430 166MHz
RAM: 256MB?

RAM 容量は "192MB total" と書かれてますが、同じ i.MX51 の Netwalker の
場合は VRAM を除いた値となっており、かつ meminfo と差が少ないことから
他に VRAM 分確保されている可能性があります。
確証はありません。


Linux version 2.6.28 (kernel@localhost.localdomain) (gcc version 4.1.2) #35
CPU: ARMv7 Processor [412fc085] revision 5 (ARMv7), cr=10c5387f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: ZEN Touch 2
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 49152
free_area_init_node: node 0, pgdat c04c7190, node_mem_map c0556000
  DMA zone: 96 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 12192 pages, LIFO batch:1
  Normal zone: 288 pages used for memmap
  Normal zone: 36576 pages, LIFO batch:7
  Movable zone: 0 pages used for memmap
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 48768
Kernel command line: console=ttymxc0,115200 init=/init androidboot.console=ttymxc0
MXC IRQ initialized
PID hash table entries: 1024 (order: 10, 4096 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 192MB = 192MB total
Memory: 189044KB available (4416K code, 757K data, 248K init)
SLUB: Genslabs=12, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Calibrating delay loop... 799.53 BogoMIPS (lpj=3997696)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 688 bytes
regulator: core version 0.5
NET: Registered protocol family 16
CPU is i.MX51 Revision 3.0
MXC GPIO hardware
Camera module power off
IRAM READY
mxc_pwm_device registered
GGC not detected
Using SDMA I.API
MXC DMA API initialized
~


*meminfo
MemTotal:         189648 kB
MemFree:           44072 kB
Buffers:            5488 kB
Cached:            60248 kB
SwapCached:            0 kB
Active:            39536 kB
Inactive:          75316 kB
Active(anon):      25152 kB
Inactive(anon):    41320 kB
Active(file):      14384 kB
Inactive(file):    33996 kB
Unevictable:         360 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         49488 kB
Mapped:            16036 kB
Slab:               5120 kB
SReclaimable:       2096 kB
SUnreclaim:         3024 kB
PageTables:         4380 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       94824 kB
Committed_AS:    1147952 kB
VmallocTotal:     647168 kB
VmallocUsed:       81060 kB
VmallocChunk:     540668 kB


*clocks
gpu3d_clk-0         axi_a_clk-0         ___TH_    1   166250000 (166MHz)
~
cpu_clk-0           pll1_sw_clk-0       ______    1   800000000 (800MHz)

周波数はおそらくこの辺。アイドル時 200MHz, 負荷をかけると 800MHz。


関連エントリ
Android ポータブルプレイヤー ZEN Touch 2 も使ってみた
Creative ZiiO 7 使ってみた
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
Android LuvPad AD100 を1日持ち歩いた


Creative ZEN Touch2 はありそうでなかった Android 端末です。
ポータブル Media Player ですが Android OS 2.1 を採用しており、
ネット接続はもちろんアプリケーションの追加もできます。
ちょうど iPod touch の Android 版のようなもの。

Creative ZEN Touch2
Creative ZEN Touch2 with GPS

ZEN Touch2 の店頭モデル (8GB) を ZiiO7 と一緒に持ち歩いて使ってみました。


●買うまで最も気になっていたところ

購入前に一番心配&気になっていたのはパフォーマンス面です。
web でもスペックが一切明らかになっておらず未知の状態でした。


ところが実際に店頭で目にしたときは、むしろサイズの方に目が行きます。

 ・3.2インチと画面が小さいのに本体がスマートフォンサイズ
 ・厚めのプラスチックで覆われた本体に、液晶面が深い位置に埋まってる

そしてふと冷静に分析します。

ZEN Touch 2  : 120 x 60   x 13mm   122g  3.2inch  480x320
iPod touch 4 : 111 x 58.9 x 7.2mm  101g  3.5inch  960x640

すぐ隣の売り場にあった ipod touch と比べたら、サイズも薄さも軽さも
画面サイズも画面解像度もプロセッサパワーもアプリ数もマルチタッチも
センサーもおそらく勝てません。

Creative ZEN Touch2 の良いところは

 ・高音質な Bluetooth 再生 Pure Wireless Entertainment
 ・ポイント還元10%の19800円という価格
 ・背面カメラの画素数
 ・microSD カードで容量を増やせる

さらに直販の GPS モデルだと

 ・3G機能なしで買える珍しい GPS/Compass 搭載機
 ・FMラジオ

も追加。
やっぱりすでに Snapdragon + RAM 512MB クラスの Android スマートフォンを
持っているなら、位置付けとしてはあまり必要性を感じません。


●店頭で触ってわかったこと

逆に店頭で実際に触ってみてわかったのは、予想に反してレスポンスが良かったこと。
意外にきびきび動きます。
内蔵アプリを複数起動しても極端に重くなったりせずちゃんと使えます。

パフォーマンス面の心配はなさそうです。

抵抗膜式のタッチパネルも店頭で触った限りはきちんと反応していました。

大いに悩んだけど、開発機として GPU の詳細が知りたかったので購入に踏み切り
ました。


●CPU/GPU/RAM 容量

詳細はこちら

Creative ZEN Touch 2 と OpenGL ES 2.0

i.MX51 : Cortex-A8 800MHz, AMD Z430

CPU は予想より強力で GPU も必要十分です。
RAM 容量は 256MB と少ないけれど良く動いています。

 ・画面サイズが 480x320 と小さい
 ・電話機能もないし余計なアプリが一切動いていない

ことが原因としてあげられます。

特に余計なアプリが全く入っていないのは非常に良いです。


内蔵機能(アイコン)一覧 : ZiiO7 との対応付け比較

ZEN Touch2                ZiiO 7inch
---------------------------------------------------
Explorer                  ZiiExplorer
PAA                       PAA
Setup Info                Setup Info
ZiiO Space                ZiiO Space
アラーム                  時計
カメラ                    カメラ
ギャラリー                ZiiPhoto/ZiiVideo
ブラウザ                  ブラウザ
メール                    メール
ユーザーズガイド          ユーザーズガイド
音楽                      ZiiMusic
音声レコーダー            ZiiMicrophone
設定                      設定
電卓                      電卓
                          ZiiAcademy
                          Audible
                          RSSリーダー
                          ZiiStore
                          カレンダー
                          タスクマネージャー
                          メモ帳
---------------------------------------------------
Android キーボード        Android キーボード
                          Google Pinyin
                          Hanwang Handwriting IME
---------------------------------------------------

 ・カレンダーすらない割り切り
 ・ライブ壁紙もない、使えない
 ・Home 画面も Android の標準状態

キーボードも一切ない素の状態が非常に気持ちいいです。
ライブ壁紙もなく、パフォーマンスを食う余計な機能を全部取り払った
かのような最小構成が気に入りました。


●タッチパネル

タッチパネルは ZiiO 同様抵抗膜式です。
触れただけでは反応せずわずかに押しこむ力加減が必要です。
指以外でもスタイラスペンなど尖ったもので操作できます。

ZiiO だとほぼ問題なく扱えるのですが ZEN Touch2 は結構ミスが出ます。

画面サイズのが小さいせいかもしれません。
反応が固めの印象で、きちんと力を入れないと反応しないことがあります。

特に設定画面のようなリストのスクロールが難しく、油断するとスライドの
つもりが選択されてしまいます。

一定の圧力を保ったまま移動できずパネルから浮いてしまう瞬間が
あるのでしょう。
もうしばらく使い込みと練習が必要だと感じました。


●Android ボタン

左(下)から [検索] [BACK] [MENU] と並びます。
ZiiO 同様に抵抗膜式タッチパネルの一部です。

[HOME] はさらに一段下(右)にあり、HOME だけ押しこんで反応する物理キー
となっています。

そもそもボタン並びが ZiiO と違います。
バックライトや振動フィードバックはありません。


●リセットボタン

microSD カードスロットのフタを開けると、根元の方にリセット穴があります。
電源ボタンの長押しでは強制切断できないので、トラブルがあったときはこの
リセットボタンを使います。

原因不明ですが、購入直後に数分放置しておいたら、何も操作を受け付けず
固まっていたことが 2度ありました。
出先で細いものが見つからず、リセット出来ずに困ったことがあります。
今ではリセットピンを携帯してます。


●液晶

ZiiO7 より発色が良く見えます。
デザインは横型なのに、液晶は縦持ちで見た時が自然な視野角になります。
HDMI 出力はありませんが、メニューを見ると Video 出力がありそうです。


●アプリ

さすが Android 端末で、徐々にアプリを入れてカスタマイズしていくと
だんだん好みの環境になってきます。

Android マーケットが無いので、LuvPad や ZiiO と同じように
アプリケーションを自分で準備してインストールします。
ZiiO と違い ZiiStore もありません。

やはりアプリのインストールや更新は少々手間がかかるかもしれません。


●最後に

タッチパネルの操作は若干慣れが必要です。

マーケットの利便性を考えると純粋な Android 入門としてはお勧めできません。
ミュージックプレイヤーとしては少々大きめ。
メディアプレイヤーとしては他にも選択肢があります。
ここに Android アプリが動くという価値がどの程度プラスになるかが判断の
境目でしょうか。

個人的には最小構成な点は気に入りました。
ごてごてとカスタマイズされた全部入りスマートフォンよりも良いです。
これで本体サイズがさらに小さいなど、持つことにメリットがあれば面白い
と思います。自分の場合買うために若干勇気が必要でした。

マルチタッチはないけど、本体の入手しやすさを考えると開発機としても
良いかもしれません。


関連エントリ
Creative ZiiO 7 使ってみた
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
Android LuvPad AD100 を1日持ち歩いた



ZiiO7 を 1日使ってみました。
ZiiO は Creative の Tablet 型 Android 端末です。

Creative ZiiO 7


●大きさ

Galaxy Tab のレビューによくある「ちょうどいい大きさ」に納得といった感じです。

・10インチほど重くない、片手で持って疲れない重さ
・スマートフォンより画面が大きい、解像度は低いが情報量が多くタッチしやすい

基本はタブレットですが、7インチサイズは持ちやすさと軽さのバランスが
とれた位置にあると感じました。


●タッチパネル

買った直後は失敗だったかと一瞬後悔したのがタッチパネルです。
店頭でも十分試したし、感圧型、抵抗膜式だと頭では分かっていたけど電源投入
直後の ID 登録画面ではまりました。

 ・開封直後のタッチパネルは食いつきが良く滑りが悪い
 ・タッチパネルのキャリブレーション前なのでタッチ位置がかなりずれていた

「設定 → サウンド&画面設定 → Touch screen calibration」で
キャリブレーションしたり、設定などを行っているうちに力の入れ具合が
分かってきます。

・ホーム画面の空きエリアなど、タッチボタンでないところは静電式みたいに
 指の押し付けでスライド可能。軽くスライドしても反応。

・リスト画面など全面タッチ可能なボタン部分のスクロールは間違ってタッチになる。
 爪を立て気味にして素早くスライドするとミスしづらい。

・ブラウザのリンクやソフトキーボードなど小さいボタンは爪で軽く押せるので
 狭いエリアに対して確実に操作できる。

慣れると比較的スムーズに使えています。保護シートはなしです。
特にソフトキーボードとの相性は良いと感じました。
縦持ちで QWERTY キーボードが押しやすい大きさとなり、両手の親指の先端で
押すようにすればかっちり反応します。

LOOX U/G90 など、抵抗膜タイプでもマルチタッチ可能なパネルはありますが
残念ながら ZiiO はシングルタッチのみです。


●ボタン

Android ボタンは左から [検索] [HOME] [MENU] [戻る]。
液晶部と同じタッチパネルの一部です。

ここは未だに正確な操作できず、ミスして何度か押し直すことがあります。
設定で振動のフィードバックがありますので、ON にしていれば多少ましに
なるようです。ただ振動よりモーター音が気になるかも。

またバックライトがないので暗いところでは識別が困難です。
触ってわかるようなシールを貼るなど、改善のため工夫が必要かもしれません。


●電源ボタン

電源も少々押しづらいボタンです。
スリープからの復帰が遅いので、反応していないと思って何度も押してしまう
ことがあるからです。

一度カチッと押したら2~3呼吸ほど待つのが正解。

タイミングが分かるまでは何度も押してしまい、場合によってはデジタイザが
反応しなくなり強制シャットダウンしなければならないことがありました。

ZiiO7 は電源ボタン長押しで強制シャットダウンです。
(ZEN Touch2 は長押しシャットダウンが出来ず、microSD スロットの横の
リセット穴を使います。リセットピンの携帯が必須。)

LuvPad は何らかのボタンが押されてよく電源が入ってしまうことがあります。
ZiiO7 の電源は勝手に押されることがなく、他のボタンでもスリープから
復帰しないので大丈夫そうです。


●画面

やはり視野角が狭く、縦持ちだと若干左右の見え方の違いが気になります。
ただ比較的画面が小さいせいか、LuvPad よりはあらが目立ちません。
水平に置いても画面の回転が暴れることがなく HOME 画面も回転ロックできます。
解像度は 800x480 で決して高くなく発色も浅めです。

まだ試していませんが HDMI 出力が付いています。
ZEN Touch2 の方は HDMI でなく Video 出力があるようです。


●ソフトウエアなど

HOME 画面も独自で多数の Zii アプリが揃っています。
この点最小限のアプリしか含まれていない ZEN Touch2 とは大きく違います。

Android 端末として使うなら、最初にある程度ソフトウエアの導入が必要でしょう。
ZiiO Space は Simeji の導入や AndroApp, Andronavi へ導いてくれますが
やはり Android マーケットが無いのは手間がかかります。

ZiiStore という独自ストアもありますが登録本数は多くありませんでした。


●最後に

難点は HOME/MENU/BACK ボタンが押しづらいことと液晶の質。
縦持ちだと右からみると濃く見えて、左からは全体的に薄くなります。
マーケットアプリもないのでアプリの導入や更新は簡単ではありません。

それでも個人的には持ち歩きたくなる端末です。
本体も薄型で抵抗膜式なのにスムーズに操作できてブラウザも見易いサイズ。
ソフトキーボードも程よい大きさで押しやすかったので、モバイルルータと
セットで活躍しそうです。


関連エントリ
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
Android LuvPad AD100 を1日持ち歩いた


Tablet 型の ZiiO に対して ZEN Touch2 はポータブルプレイヤー型です。
言ってしまえば Android 版 iPod touch のようなもの。

Creative ZEN Touch 2

スペックは当初 ZMS-05 かと思って全く期待していなかったのですが、
どうやら違うようです。

android_tab.jpg
↑下から LuvPad AD100, ZiiO7, 上左DesireX06HT, 上右 ZEN Touch 2
Desire の方が一回り小さい。


●デバッガの接続

LuvPad や ZiiO7 と同じように直接 Android SDK の中の

usb_driver/android_winusb.inf

を書き換えました。3機種分の定義は下記のとおり。

;NVIDIA Tegra (LuvPad)
%SingleAdbInterface%        = USB_Install, USB\VID_0955&PID_7000
%CompositeAdbInterface%     = USB_Install, USB\VID_0955&PID_7100&MI_01
;
; Creative ZiiO7
%SingleAdbInterface%        = USB_Install, USB\VID_2350&PID_0102
%CompositeAdbInterface%     = USB_Install, USB\VID_2350&PID_0102&MI_01
;
; Creative ZEN Touch2
%SingleAdbInterface%        = USB_Install, USB\VID_041E&PID_4166
%CompositeAdbInterface%     = USB_Install, USB\VID_041E&PID_4166&MI_01

[Google.NTx86] と [Google.NTamd64] の最後に上の 11行を追加しています。


●GPU と CPU

ZMS-05 は ARM9 (ARMv5TE) dual のはずですが、ZEN Touch2 は
ARMv7 アーキテクチャ 800MHz のようです。

Processor       : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 199.88
Features        : swp half thumb fastmult vfp edsp
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0xc08
CPU revision    : 5

Hardware        : ZEN Touch 2
Revision        : 51030
Serial          : 0000000000000000

GPU も完全に予想外で AMD Z430 (Adreno 200) でした。

Mobile CPU/GPU

過去に調べた結果(上)と比較すると、Ubuntu 上ですが NetWalker
i.MX515 の結果によく似てます。
周波数から見ても CPU は Coretex-A8 の可能性が高いです。

RAM 容量はおそらく 256MB 程度と思われます。



●NDK

ARMv7 ですが march=armv7-a では apk が install できなかったので
armv5te でビルドを通しました。

メジャーな GPU なせいか、ZMS-08 と違いすんなり GLES 2.0 も動きました。

GL_VERSION: OpenGL ES 2.0
GL_RENDERER: AMD Z430
GL_VENDOR: Advanced Micro Devices, Inc.
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00


Extension:
GL_AMD_compressed_3DC_texture
GL_AMD_compressed_ATC_texture
GL_AMD_performance_monitor
GL_AMD_program_binary_Z400
GL_AMD_tiled_rendering
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_type_2_10_10_10_REV
GL_EXT_bgra
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_compressed_paletted_texture
GL_OES_depth_texture
GL_OES_depth24
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_element_index_uint
GL_OES_fbo_render_mipmap
GL_OES_fragment_precision_high
GL_OES_get_program_binary
GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8
GL_OES_standard_derivatives
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_half_float
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_half_float
GL_OES_vertex_type_10_10_10_2
GL_NV_fence 

TextureFormat 16
tc[00]=87f9  GL_3DC_X_AMD
tc[01]=87fa  GL_3DC_XY_AMD
tc[02]=8c92  GL_ATC_RGB_AMD
tc[03]=8c93  GL_ATC_RGBA_EXPLICIT_ALPHA_AMD
tc[04]=87ee  GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD
tc[05]=8d64  GL_ETC1_RGB8_OES
tc[06]=8b90  GL_PALETTE4_RGB8
tc[07]=8b91  GL_PALETTE4_RGBA8
tc[08]=8b92  GL_PALETTE4_R5_G6_B5
tc[09]=8b93  GL_PALETTE4_RGBA4
tc[10]=8b94  GL_PALETTE4_RGB5_A1
tc[11]=8b95  GL_PALETTE8_RGB8
tc[12]=8b96  GL_PALETTE8_RGBA8
tc[13]=8b97  GL_PALETTE8_R5_G6_B5
tc[14]=8b98  GL_PALETTE8_RGBA4

ZiiO 7inch の結果はこちら
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0


2010/12/29 3:29 追記: Freescale i.MX51 確定。Netwalker と同じです。


関連エントリ
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
OpenGL ES 2.0 世代の Mobile GPU
Android LuvPad AD100 を1日持ち歩いた


ZiiO 7inch 手に入れました。

Creative ZiiO 7

LuvPad のように回線契約なしに買える Android タブレットです。

特徴は比較的安価なこと。8GB モデルで 24800円。
その代わり抵抗膜式タッチパネルを使っておりマルチタッチも非対応です。

LuvPad と違い HOME 画面は独自で、さまざまな Zii アプリケーションが用意
されています。


●気がついたことなど簡単に

・HDMI端子あり
・Android マーケット無し
・ボタン類もタッチ式、抵抗膜パネルの一部
・タッチパネルのキャリブレーション
  設定 → サウンド&画面設定→ Touch screen calibration
・ZiiAcademy というブックリーダー付き。
・タスクマネージャーが最初から入ってる
・RAM 512MB
・タッチパネル反応は慣れると良好
使用感などは後ほど


●デバッガの接続

adb 接続は下記のページを参考にさせていただきました。

でじものがたり Creative ZiiO 7"のフォント変更(再度更新)

同様の手順を以前 LuvPad の時も行いました。下記のページも参考になります。

Developing on a Device


●NDK と GPU

CPU はごく普通の Cortex-A8 1GHz です。
もちろん NEON + VFPv3-D32 です。

GPU は ZiiLabs のオリジナル。
テストプログラムを走らせてみました。

GL_VERSION: OpenGL ES 2.0
GL_RENDERER: ZMS-08
GL_VENDOR: ZiiLABS
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.0


Extension:
  GL_OES_read_format
  GL_OES_compressed_paletted_texture
  GL_OES_byte_coordinates
  GL_OES_fixed_point
  GL_OES_single_precision
  GL_OES_matrix_get
  GL_OES_point_size_array
  GL_OES_point_sprite
  GL_EXT_texture_compression_dxt
  GL_EXT_texture_compression_dxt1
  GL_ZIILABS_fog_mask
  GL_EXT_texture_lod_bias
  GL_EXT_blend_func_separate
  GL_OES_blend_func_separate
  GL_APPLE_texture_2D_limited_npot
  GL_OES_query_matrix
  GL_OES_draw_texture
  GL_OES_element_index_uint
  GL_OES_matrix_palette
  GL_OES_extended_matrix_palette
  GL_OES_compressed_ETC1_RGB8_texture
  GL_OES_framebuffer_object
  GL_OES_rgb8_rgba8
  GL_OES_depth32
  GL_OES_stencil8
  GL_OES_mapbuffer 


tc[00]=8b90  GL_PALETTE4_RGB8
tc[01]=8b91  GL_PALETTE4_RGBA8
tc[02]=8b92  GL_PALETTE4_R5_G6_B5
tc[03]=8b93  GL_PALETTE4_RGBA4
tc[04]=8b94  GL_PALETTE4_RGB5_A1
tc[05]=8b95  GL_PALETTE8_RGB8
tc[06]=8b96  GL_PALETTE8_RGBA8
tc[07]=8b97  GL_PALETTE8_R5_G6_B5
tc[08]=8b98  GL_PALETTE8_RGBA4
tc[09]=8b99  GL_PALETTE8_RGB5_A1
tc[10]=8d64  GL_ETC1_RGB8_OES
tc[11]=83f0  GL_COMPRESSED_RGB_S3TC_DXT1_EXT
tc[12]=83f1  GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
tc[13]=83f2  GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
tc[14]=83f3  GL_COMPRESSED_RGBA_S3TC_DXT5_EXT

Tegra2 のように DXT 対応です。
ETC も使えます。

VertexShader constant: 128
FragmentShader constant: 16

・頂点テクスチャあり
・shader binary format あり


自前のアプリを移植しましたがシェーダーを読み込んだところで止まります。
ndk サンプルの hello-gl2 も Shader の Link error が出て描画されず
まだうまく動いていません。

GL ES 1.1 のアプリは動いているようです。
速度はものすごく速いといった印象はないです。
OS の違いもあるかもしれません。


●GPU 等のまとめ

これまで試した GPU や CPU をまとめました。

OpenGL ES 2.0 モバイル GPU CPU

Android 端末の一覧をこちらに作ってみました。WindowsCE 一覧 の続きのようなもの。

Android 端末一覧


関連エントリ
OpenGL ES 2.0 世代の Mobile GPU
Android LuvPad AD100 を1日持ち歩いた


iOS, Android 共に数多くの端末が登場していますが、CPU は ARM アーキテクチャ、
GPU は OpenGL ES 2.0 世代でほぼ統一されています。

iOS の場合 ES 2.0 世代の GPU は 1種類のみ。
Android の場合は調べてみると予想以上に多彩なことがわかります。
完全に 2強(+1)のデスクトップ GPU と違い、まるで DirectX 初期の頃のように
さまざまなメーカーが参入しています。

iOS:
CPU
    Cortex-A8

GPU 
    PowerVR SGX 535


Android OS:
CPU
    ARM11      ARMv6 (MSM7227)
    Cortex-A8  ARMv7 (S5PC110/ZMS-08)
    Scorpion   ARMv7 (Snapdragon)
    Cortex-A9  ARMv7 (Tegra2)

GPU
    Adreno 200       (Snapdragon QSD8x50/MSM7227)
    Adreno 205       (Snapdragon QSD8x55)
    PowerVR SGX 540  (S5PC110)
    Tegra 250 GPU    (Tegra2)
    ZMS-08 GPU       (ZMS-08)

ATI/AMD のモバイルチップだった Imageon Z430/460 は、Qualcomm になってから
名称が変更されているようです。

Qualcomm Adreno developer
Wikipedia Imageon
Wikipedia Snapdragon (processor)

Adreno のステートを見ると、テクスチャの ATC サポートなど ATI の影響が
残っています。
現行のスマートフォンでは Adreno 200 を搭載した QSD8x50 が多いですが、
HTC Desire HD 001HT の QSD8255 など、今後 Adreno 205 搭載機も
増えてくると思われます。
Z430(200?) が思ったよりも速度を引き出しづらい特性だったので 205 には
期待しています。


昨日ニュースに出ていた Creative の ZiiO は独自のプロセッサ ZMS-08 を
採用しています。

クリエイティブ、Androidメディアプレーヤーを国内販売
Zii LABS

開発はあの 3DLABS (ZiiLABS) なので気になる存在です。


進化速度が速いので、モバイル向け GPU の 3D 性能も大きく向上していく
ものと予想されます。


新しい Android OS 2.3 Gingerbread が公開され、同時に SDK も新しくなりました。
特に嬉しいのが NDK の強化。NDK r5 がリリースされています。

Android SDK

Native 向け API が大幅に追加されたようで、従来 Java + JNI 経由で受け取って
いた入力関係、Java でないと初期化出来なかった EGL 関連も Native code で
記述できるようになっています。
下記の NativeActivity の例を見ると C だけで書かれているのがわかります。

NativeActivity

NDK を使うとデバッグが大変だったので、gdb が含まれるようになったのもかなり
重要なポイントでしょう。

C/C++ の利点はプラットフォームの垣根を越えた共通言語であること。
ライブラリやツールをシェアし、core 部分を移植しやすくするという意味でも
C/C++ のサポート強化は歓迎です。

ndk-build の使い方は r4 と同じですが、内部のディレクトリ構成は結構変わって
いるようです。
自分で build system を構築している場合は少々手を入れる必要があります。


関連エントリ
Snapdragon と浮動小数演算速度
Android NDK r3 と OpenGL ES 2.0