2010/12/31
Android NDK r5 と armeabi, 浮動小数命令の種類
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) のメリットは下記の通り。
・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
↑倍精度レジスタと単精度レジスタは上記のように共有されます。
倍精度レジスタは 16個ですがレジスタフィールドは 5bit あるため
命令上は倍精度レジスタを 2倍に増やすことが可能です。
↑このように倍精度レジスタを 2倍に増やしたのが VFPv3-D32 となります。
NEON 命令を実装している場合 128bit の SIMD レジスタが 16個あります。
レジスタは VFP と共有されるため、NEON 命令が使える CPU では自然に
VFPv3-D32 相当となります。
よって 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 まとめ
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 に展開したと仮定)
armeabi-v7a を指定するには下記のようにします。
jni フォルダに Application.mk を作成し、下記の 1行を書いておけば
無指定でも armeabi-v7a になります。
下記のように記述すれば両対応の fat binary になります。
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) 浮動小数演算の実行速度
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) 浮動小数演算の実行速度
2010/12/29
Android ZEN Touch 2 の CPU/GPU その2
以前 Netwalker に似ていると書きましたが本当に Freescale i.MX51 でした。
CPU: Cortex-A8 800MHz
GPU: AMD Z430 166MHz
RAM: 256MB?
RAM 容量は "192MB total" と書かれてますが、同じ i.MX51 の Netwalker の
場合は VRAM を除いた値となっており、かつ meminfo と差が少ないことから
他に VRAM 分確保されている可能性があります。
確証はありません。
周波数はおそらくこの辺。アイドル時 200MHz, 負荷をかけると 800MHz。
関連エントリ
・Android ポータブルプレイヤー ZEN Touch 2 も使ってみた
・Creative ZiiO 7 使ってみた
・Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
・Android LuvPad AD100 を1日持ち歩いた
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日持ち歩いた
2010/12/27
Creative ZEN Touch 2 と OpenGL ES 2.0
Tablet 型の ZiiO に対して ZEN Touch2 はポータブルプレイヤー型です。
言ってしまえば Android 版 iPod touch のようなもの。
・Creative ZEN Touch 2
スペックは当初 ZMS-05 かと思って全く期待していなかったのですが、
どうやら違うようです。

↑下から LuvPad AD100, ZiiO7, 上左DesireX06HT, 上右 ZEN Touch 2
Desire の方が一回り小さい。
●デバッガの接続
LuvPad や ZiiO7 と同じように直接 Android SDK の中の
usb_driver/android_winusb.inf
を書き換えました。3機種分の定義は下記のとおり。
[Google.NTx86] と [Google.NTamd64] の最後に上の 11行を追加しています。
●GPU と CPU
ZMS-05 は ARM9 (ARMv5TE) dual のはずですが、ZEN Touch2 は
ARMv7 アーキテクチャ 800MHz のようです。
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 も動きました。
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日持ち歩いた
言ってしまえば Android 版 iPod touch のようなもの。
・Creative ZEN Touch 2
スペックは当初 ZMS-05 かと思って全く期待していなかったのですが、
どうやら違うようです。

↑下から 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日持ち歩いた
2010/12/26
Creative ZiiO 7 ZMS-08 GPU と OpenGL ES 2.0
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 のオリジナル。
テストプログラムを走らせてみました。
Tegra2 のように DXT 対応です。
ETC も使えます。
・頂点テクスチャあり
・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日持ち歩いた
・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日持ち歩いた
2010/12/08
OpenGL ES 2.0 世代の Mobile GPU
iOS, Android 共に数多くの端末が登場していますが、CPU は ARM アーキテクチャ、
GPU は OpenGL ES 2.0 世代でほぼ統一されています。
iOS の場合 ES 2.0 世代の GPU は 1種類のみ。
Android の場合は調べてみると予想以上に多彩なことがわかります。
完全に 2強(+1)のデスクトップ GPU と違い、まるで DirectX 初期の頃のように
さまざまなメーカーが参入しています。
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 性能も大きく向上していく
ものと予想されます。
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 性能も大きく向上していく
ものと予想されます。