KotlinコードをNativeコード(C/C++)に置き換えることで処理の高速化が期待できます。さらに高速化するにはマルチスレッド化が有効です。マルチコアCPUの能力を最大限に活用するのです。
このNativeコードをマルチスレッド化する手段にOpenMPがあります。
今回、画像処理を行う中でNativeコードを高速化する必要性が発生し、OpenMPを調査しました。
その成果として、Android NDKでOpenMPを使う方法とOpenMPプログラミングについて紹介します。
KotlinコードをNativeコード(C/C++)に置き換えることで処理の高速化が期待できます。さらに高速化するにはマルチスレッド化が有効です。マルチコアCPUの能力を最大限に活用するのです。
このNativeコードをマルチスレッド化する手段にOpenMPがあります。
今回、画像処理を行う中でNativeコードを高速化する必要性が発生し、OpenMPを調査しました。
その成果として、Android NDKでOpenMPを使う方法とOpenMPプログラミングについて紹介します。
Android NDKはAndroidシステムのログを出力(Logcat出力)する仕組みを備えています。この仕組みを使えば、Nativeコードからログ出力が行えるのでデバッグ作業に役立ちます。
Nativeコードからログを出力する方法を紹介します。
Android NDKはNativeコードからBitmapを処理するためのグラフィックライブラリを実装しています。これを使うとBitmapが容易に扱えるので便利です。
画像はデータ量が多いため、画像処理や解析を行うと重い処理になってしまいます。Nativeコードで行えば高速化が出来ます。
また、JNI(Java Native Interface)があるので、Kotlin~Nativeコード間のデータ受け渡しの親和性が高い点もよいです。処理の指示を引数で渡したり、処理の結果をNativeコードの戻り値で返したりが簡単です。
今回、このライブラリを使ってBitmapの画像処理を行ってみたので紹介します。
Androidシステムはログを収集する仕組み(android.util.Log)を備えています。この仕組みを使えば、アプリケーションの処理の流れや、内部の状態を逐次出力できるので、デバッグ作業に役立ちます。
ですが…
リリース時は不要(リリース後の不具合解析で必要になるもの以外)です。
なので、リリースの前にログ出力の記述を無効にしますが、数が多いと大変な作業になります。
今回、debug/releaseビルドの切り替えで、自動的にログ出力をon/offできるようにしたので紹介します。
Androidアプリケーションはプログラムの一部をNativeコードで作ることが出来ます。
Nativeコードとは端末のCPUが直接解釈できるプログラム(マシン語)のことです。
演算負荷の大きい処理を高速化したい場合に有効な手段です。
NativeコードのプログラミングはAndroid NDK(Native Development Kit)を使ってC/C++で行います。
そのためのNative開発環境を、Android Studioは組み込めるようになっています。
今回、Android StudioへNative開発環境を構築してみたので紹介します。
※本記事はAndroid Studio 4.1.1で実施しています。