7月上旬なのに、もう真夏の暑さですね……自宅のクーラーが不調で辛いです。
先週から、NDK(ネイティブコード実行のモジュール)開発に取り組み始め、手始めにマンデルブロ集合を描画するAndroidアプリを作っています。マンデルブロ集合は、実数演算の繰り返しですから、NDKの関数で計算すれば劇的に高速化される……と思ったら、そうでもないんですね。
Javaのコードと比べても、せいぜい2倍程度の高速化。AndroidのJava仮想マシンの最適化もかなり進んでいるようです。
高速化では、むしろマルチスレッド化が有効でした。NEXUS 7で試すと3スレッド位まではスレッド数に応じてほぼリニアに高速化します。マンデルブロ集合は、個々の処理単位(ピクセル)が完全に「独立」した計算ですから、マルチスレッド化においては理想的な条件なんですよね。スレッド間の通信やスレッド相互の「処理待ち」がない、という。
NEONなどのベクトル演算を使えば、もっと高速化できるのかな。そのうち挑戦してみたいものです。