日別アーカイブ: 2012年2月12日

Android 4.0 ainol Novo 7 Paladin、MIPS CPU の NDK と Vivante GPU

ARM でも x86 でもない、MIPS の CPU を搭載した
Android 端末 ainol Novo 7 Paladin を使ってみました。

Ingenic JZ4770
CPU core: XBurst (MIPS32)
GPU core: Vivante GC860

CPU/GPU (OpenGL ES Extension 等) は下記に追加

CPU/GPU: Novo7 Paladin Android 4.0 JZ4770 MIPS XBurst GC860

以下抜粋

processor		: MIPS-compatible processor JZ4770 
cpu model		: Ingenic Xburst 
ASEs implemented	: mxu
Features		: fpu mxu dsp lowpower 

GL_VERSION: OpenGL ES 2.0
GL_RENDERER: GC860 core
GL_VENDOR: Vivante Corporation
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00

下記の GPU 機能比較表にも追加しました

Mobile GPU の比較

GPU は Unified Shader で FragmentShader も highp 対応。
テクスチャ圧縮フォーマットは DXT1/3/5 (S3TC)、
24bit depth に対応しており depth_texture もあります。
Vertex の Stream 入力が若干少なめ。
レンダリングは 2048 までですが使えるテクスチャサイズが
8192 と突出しています。

NDK を使って実際にシェーダーを走らせてみました。
下記のベンチマーク結果の表に追加しています。

Mobile GPU bench mark

公式スペックもフィルレートがあまり高くなかったので、
GC800 の世代的には PVR SGX530/535 あたりと同等なのかもしれません。
より高速な GPU として GC1000/GC2000/GC4000 も存在しています。

Vivante Graphics Processor IP

Freescale i.MX5 系の GPU は AMD Z430 ですが、すでに Qualcomm
に売却されており Adreno と名称が変わっています。
i.MX6 では Vivante の新しい GPU core が採用されるようです。

●MIPS 版 NDK

Google の Android NDK には MIPS が含まれていませんが、
下記の MIPS サイトからダウンロードすることができます。

MIPS Developers: Download MIPS Android NDK

既存の NDK (ARM/x86) をすべて含んでいるため、同バージョンの
NDK と置き換えるだけで mips 対応になります。
例えばすでに C:/android/android-ndk-r7 というフォルダがあるなら

1. c:/android/android-ndk-r7 を削除
1. android-ndk-r7m-windows-20120103.zip を展開
2. android-ndk-r7m を android-ndk-r7 にリネームして C:/android に入れる

これだけです。ARM, x86, MIPS すべてに対応します。

MIPS 対応 NDK では新しく3つのアーキテクチャが追加されます。
倍になりました。既存のものと合わせてまとめると下記の通り。

Android NDK  IA         GCC                              fpu simd
---------------------------------------------------------------------------
armeabi      ARMv5TE    -march=armv5te                   --  --
armeabi-v7a  ARMv7A     -march=armv7-a -mfpu=vfp         VFP (NEON)
x86          IA-32      -march=i686 -mfpmath=sse -msse3  SSE SSE3
mips         MIPS32 R1  -mips32  -mhard-float            FPU --
mips-r2      MIPS32 R2  -mips32r2 -mhard-float           FPU (DSP ASE)
mips-r2-sf   MIPS32 R2  -mips32r2 -msoft-float           --  --

XBurst は ase もあり mips-r2 のように見えますが Paladin は mips でした。
(2012/02/14 追記: NDK では mips ですが ROM は mips-r2 で build されているそうです)
NDK の Application.mk 等に下記のように記述すれば全対応になります。

APP_ABI	:= armeabi armeabi-v7a x86 mips mips-r2 mips-r2-sf

バイナリ容量はかなり増えそうです。
RenderScript はまだ試していません。

(2012/02/14 追記: NDK r7 からは 「APP_ABI := all」と記述するだけで全対応になります。)

(2012/04/17 追記: NDK r7bm から mips-r2, mips-r2-sf が無くなりました)