2009年08月24日

Bullet For Android NDK

以前のエントリーで、手を付けはじめたGPGPU(CUDA)プログラミングですが、やはり、超並列演算のターゲットは

物理演算エンジン

だろうということで、そのライブラリである「Bullet」を、物理演算エンジンの内部構造勉強がてらAndroid NDKに移植してみました。
※普通のJavaからでも使えるはずです。

ちなみに、エミュレータでやってはいけないようです。
実機の100倍以上、遅いです。
そこは、注意してください。<(_ _)>

●動作画面
・ソースには、サンプルアプリを付けておきました。
 2つのボール(2D)が、下に並んでいる3つのボール(2D)に向けて、自由落下してくると言うデモです。
 ※本来は、3Dに対応しています。OpenGL/ESいじるのが面倒だったのでやめました。(w

・初期画面

・ちょっとずつ、落下

・激突

・飛び散る

・収束




●Android(Java)からの操作が可能なもの
・対応ワールド
 -DiscreteDynamicsWorld

・対応剛体
 -BoxShape
 -CapsuleShape
 -ConeShape
 -CylinderShape
 -SphereShape
 -StaticPlaneShape
 -TetrahedronShape

・対応ソルバ
 -SequentialImpulseConstraintSolver

・対応ジョイント
 -HingeConstraint
 -Point2PointConstraint

・対応付加力
 -applyForce
 -applyTorque
 -applyImpulse
 -activate操作

というところで、最低限のことができるというところですが、ジョイントも可能なのでラグドールも作成できるかと思います。



●ソース一式
BulletForAndroidNDK-0_7-src.zip

・ライセンスは、Bulletそのままで、BSDライセンスとなっております。

●APK
BulletJniSampleApp.apk




●おまけ
本当は、某雑誌記事用のネタだったのですが、これよりももっと良いモノが出来たので、こちらはお蔵入りとなりました。
ゆえに、公開しております。

2009年07月26日

お手軽GPGPU(CUDA)プログラミング用PCを選ぶ

以前に、こちらのエントリーで書いたように、ケータイ向けGPGPUの時代が到来しようとしています。

そこで、GPGPUによる超並列計算アルゴリズムの研究をされている某氏に話を聞いてみたところ、、、

CELLのようなにSPEがCPUに統合されたものと違って、外部バス上に配置されているGPGPUは、プログラミング手法がずいぶんと違う。
要は、GPGPUからはメインメモリには触れず、ビデオボード上に載っているVRAMしかさわれない。 すなわち、GPGPUとVRAMが、CPUとメインメモリであり、もうひとつPCシステムが存在しているような形で扱う必要がある。
そのため、いろいろと制限などがあるため、一度、体験しておくとよい。

との助言をいただいたので、体験してみることに。
ちなみに、なぜ、ケータイ向けGPGPUかといえば、最近の方向性の一つとして、

ドコモの触力覚メディア、直感検索・ナビを体感する
壁の向こうもARで“透視” auが「実空間透視ケータイ」
iPhone 3GSで音声コントロールができるように

というように、ARやVRにおいては、画像認識や音声認識、手書き認識などとして、『アナログデータ』を扱う場面が劇的に増えています。
ほかにも、表に出てこないところとしては、加速度センサーや電子コンパス(地磁気センサー)も、RAWなデータから演算によって、角度や方角を算出しています。

そして、この手のアナログデータ処理アルゴリズムは、比較的並列計算に向いているものが多いです。
そこで、GPGPUによる演算が、威力を発揮するのです。
(FPGAによる、フル設計な専用CPUのほうが楽しいのですが、まだまだ、先のようなので。。、)




しかし、まだケータイ向けGPGPUは、手に入らないので、普通にnvidiaのCUDAを体験してみることにしましたが・・・
うちには、CUDAが動作するPCがないので、CUDA対応のノートPCを漁ることにしました。
でも、ちょっとした勉強用なので極力安いものという条件で、探してみました。
(持ち運びしたかったので、デスクトップは考慮外としました。)

そして、下記3つが候補として残りました。
後者ほど、CPUパワーが劇的に上がっていくが、サイズ・重量が増えて、バッテリー時間が短くなっていく(モバイル性能が落ちる)という感じです。(あと、お値段も上がります。)
あとは、好みの問題ですね。

●ASUSTek
型番:N10Jb(N10JB-HV001U)
サイズ:10.2インチ WSVGA(1024×600ドット)
CPU:Atom N280(1.66GHz)
グラフィック:GeForce G105M
バッテリー:約6.41時間
重量:約1.55kg
値段:\59,800

●dospara
型番:Prime Note Cresion NA
サイズ:12.1 インチ HD光沢ワイド液晶 (WXGA / 1366x768ドット)
CPU:Atom 330 (デュアルコア / HT 対応 / 1.60GHz / L2キャッシュ1M) → 4 コアに見える『デスクトップ用』のCPU
グラフィック:NVIDIA ION(G105Mと違い、DirectX10非対応)
バッテリー:約3.2時間
重量:約1.92 kg
値段:\59,980(OSなし。Win7へのアップグレード選択可)

●パソコン工房
型番:Lesance BTO CLG625 TYPE-G
サイズ:15.6インチ フルワイドXGA(1366x768ドット)
CPU:Core 2 Duo P8700(2.53GHz)
グラフィック:GeForce G105M
バッテリー:約1.5時間
重量:約2.7kg
値段:\89,980


ちなみに、私は、CUDAのプログラミングを楽しむ&持ち運びを考えて、CPUパワーがそこそこ期待できる「Prime Note Cresion NA」にしました。
なんといっても、Atomとはいえ、デスクトップ用を無理やりノートPCに使っていますので期待できます。

また、最近のnvidiaのチップは、物理演算エンジン「PhysX」も、搭載しているようなので、これでもついでに遊んでみようかと思います。