自由けんきゅう ARM Neon ベクトル並列計算
Xperia Neo で実験している Harris 特徴点追尾プログラム。追尾は数ミリ秒なのにその前の特徴点検知が100ミリ秒近くかかる。
そこでARMのベクトル並列計算アーキテクチャをお手軽につかえるGCCのNeon intrinsics 拡張で計算の重い部分を記述してみた。
コードの文面はこんな感じ:
/******** Update the Cache ********/ { const unsigned char * base = &( pixmap_in[ py * width ] ); short int * const qxx = &( Qxx[ down2 ] ); short int * const qxy = &( Qxy[ down2 ] ); short int * const qyy = &( Qyy[ down2 ] ); int16x8_t qxx_v; int16x8_t qxy_v; int16x8_t qyy_v; for (px=region_left; px < region_right; px += 8) { signed char delta_x[8]; signed char delta_y[8]; /* 8次元ベクトル変数宣言 gx_v, gy_v */ int8x8_t gx_v; int8x8_t gy_v; int x; /* 画素値差分はalignmentの都合でループ。結果をgx_v, gy_vにロード */ for (x=0; x < 8; x++) { delta_x[x] = base[ px+x+1 ] - base[ px+x-1 ]; delta_y[x] = base[ px+x+width ] - base[ px+x-width ]; } gx_v = vld1_s8( delta_x ); gy_v = vld1_s8( delta_y ); /* qxx[px] = gx * gx; 8並列かけ算し、結果格納。 */ qxx_v = vmull_s8 ( gx_v, gx_v ); vst1q_s16 ( &(qxx[px]), qxx_v ); /* qyy[px] = gy * gy; 8並列かけ算し、結果格納。 */ qyy_v = vmull_s8 ( gy_v, gy_v ); vst1q_s16 ( &(qyy[px]), qyy_v ); /* qxy[px] = gx * gy; 8並列かけ算し、結果格納。 */ qxy_v = vmull_s8 ( gx_v, gy_v ); vst1q_s16 ( &(qxy[px]), qxy_v ); } }
なんとデバッグするまでもなく動作。実にお手軽。
特徴点検知部分が30~40ミリ秒程度で終わるようになった。
似たようなプログラムを書いた同僚によると、このC関数風のintrinsicsプログラミングではレジスタ総退避などかなり無駄な命令列が生成されるので、Neon本来の性能を発揮するにはインラインアセンブリ記述が必要とのこと。ただ、組み込みプラットフォームではメモリアクセスがボトルネックになるので、Neon向きの計算では無駄な命令が多少あっても性能はそんなに低下しない。
かなりお手軽にプログラムを高速化できると分かった。一連の作業で一番面倒くさいのはARMのドキュメントを読むこと。
■
アメリカでも女子サッカー決勝がサッカー史上最高視聴率だったそうだ。
注目の反面、日本に負けた批判もあつまっている。USゴールキーパーのHope Soloは"私たちはプレッシャーに負けたのではない"と一貫している。決勝直後のWashington Postから発言を紹介:
Solo: “I truly believed that this was our tournament to win and I felt that the entire time. It’s heartbreaking, but at the same time I think there was something bigger pulling for Japan. They were the team of the tournament and if there’s any team we’re going to lose to, I tip my hat off to them because they have so much class and play with so much passion and they fought and they fought and I really do have so much respect for the team.”
"このトーナメントは私たちが勝つと心から思っていたし、ずっとそう感じていた。(敗けは)痛恨だけれど、同時に思うのは、日本にはより大きな力が働いていたということ。彼女たちはこのトーナメントの主役だったし、誰かに負けるとしたら彼女たちに私は脱帽したい。彼女たちはとても品格があり、すごい情熱をもってプレイするし、彼女たちは闘って闘って、私は本当にあのチームを尊敬している。"
Solo, Wambach はLettermanに出るとか。
Experia Neo 入手
1shopmobile.com から週末をはさんで4日くらいで届いた。第一印象はSony Ericsson版 iPhone4。大きさやスクリーンの質、レスポンスなどが思ったよりよかった。ドル安のおかげで本体価格3万6千円くらい。シルバーを選んだ。意外とMacAirとの統一感あり。
購入動機は
- iPhone 3GS, Xperia x10 mini は解像度が低く、小型iPadの役には不足。
- ARMv7 NEON でSIMDプログラムが組みたかった。
大きさ比較。左から X10Mini Pro, Neo, iPhone 4.
●良い点
- スペックの割に安い。
- iPhone4サイズ。最近のandroid phoneより小さい。Xperia Arcでかすぎ。
- LEDバックライトで意外と太陽光下でもスクリーン表示が見える。ウェブ上の評判では見にくいなどと書いてあったが平気だった。
- 最初から日本語環境が選べた。ショップの設定?
- クロック以上にmini proよりレスポンスが大幅に改善。メモリ、GPU、FPUなどの効果か。
- 内部ストレージは小さいが、最近のAndroidはmicro SD 側にAppインストールしてくれるから問題なし。
- WiFi tethering ができる。孫さん、控えめにやりますのでお目こぼしを。
- バッテリーもタスクキラーなど細工なしでも2日弱くらい保ちそう。
△残念な点
- 同スペックで小型、アルミフレームのXperia Rayがすぐに出る。でもドコモか。
- ときどき通話中妙に熱くなる。なんだろ。
Xperia Neo
Xperia Neo 入手
クルム伊達公子
http://sportsillustrated.cnn.com/2011/writers/jon_wertheim/06/22/mailbag/index.html
なんとwinner数、ポイント数でVenusに勝ったとは。試合に負けたが技は優ったといえる。
出だしは絶好調で、7ゲーム目に初めてミスをしてブレークされたとき現地の解説者は「Date-Krummもやはり人間だったようです」と言うほど。
その後Venusの鬼神の200kmhサーブなどで盛り返されるも、一歩も退かず、フルセット延長まで渡り合った。
スタミナや技の精度が去年より随分上に見える。昨年は試合に合わせたコンディショニングより体力作り、今年はグランドスラムに体調を合わせると言っていた覚えがあるが、まさに有言実行。
今年、来年くらいの更なる活躍に期待してしまうが、後継者の発奮にも期待だ。
Graffiti for Android
ジェスチャー入力方法GraffitiはPalmハンドヘルドシリーズの使い易さの根幹をなしていたと思う。
そのAndroid版をAccess社が開発している:
http://japanese.engadget.com/2010/07/30/graffiti-for-android/
某たけしが使っていたのを見て知っていたが、OSがEclairになったついでに Xperia X10 mini に入れてみて、改めてその使い易さに感心した。
フリック入力はどうしても速くならないし、QVGA画面では入力予測候補表示などは極めて邪魔で1文字ごとの入力効率を上げる方がよいように思う。
Graffitiは携帯電話でのタイピング速度の世界記録を一時保持していたとか。
個人的には Graffiti 2 のほうが手書きに近くて好きだったが。