libjpeg-turboプロジェクトは、「SIMD命令(MMX、SSE2、NEON)を使用して、x86、x86-64、およびARMシステムでベースラインのJPEG圧縮と解凍を高速化します」。
Androidデバイススペースのどのようなシェアがこれらの命令をサポートしているので、このライブラリを使用することで速度のメリットが得られますか?
(NDK経由でアクセスするネイティブコードでjpegを解凍します。)
libjpeg-turboプロジェクトは、「SIMD命令(MMX、SSE2、NEON)を使用して、x86、x86-64、およびARMシステムでベースラインのJPEG圧縮と解凍を高速化します」。
Androidデバイススペースのどのようなシェアがこれらの命令をサポートしているので、このライブラリを使用することで速度のメリットが得られますか?
(NDK経由でアクセスするネイティブコードでjpegを解凍します。)
市場に出回っているAndroidデバイスの大多数は、何らかの種類のARMCPUを使用しています。ハイエンドの電話(HTC Sensationなど)は、NEON(Qualcomm Snapdragon、OMAP4、Samsung Exynos、Tegra3)をサポートするARMCPUを使用する傾向があります。古い/機能の少ない電話には、通常、QualcommMSM72xxシリーズなどのARMv6チップセットが搭載されています。いくつかの良い例は、GoogleG1とオリジナルのMotorolaDroidです。
Androidタブレットは少し話が異なります。既存のタブレットデバイスの大部分は、NEONサポートを含まないnVidiaTegra2チップセットに基づいています。Tegra3(Asus Transformer Prime)をベースにした新しいタブレットには、NEONのサポートが含まれています。いくつかの珍しいタブレットは、QualcommのSOC(HTC Flyerなど)に基づいており、NEONもサポートしています。MIPSをベースにした低価格のタブレットもいくつかあり、x86チップを搭載したタブレットもあります。次に、Google-TVデバイスの比較的新しいカテゴリがあります。過去1年間、これらは主にx86でしたが、間もなく登場する最新世代には、ARMCPUを使用するものが多数あります。
私が行った(そして現在も作業中の)libjpeg-turboポートについては、次の点を考慮する必要があります。
命令セット(armv6、armv7)、SIMD(NEONありまたはなし)
Libjpeg-turboはNEONでarmv7に本当に輝いています。NEONはarmのSIMDサポートです。
Tegra、Tegra2にはNEONはありませんが、たとえばarmv7です。したがって、libjpeg-turboは、NEONサポートをオフにして今すぐ構築できますが、それでもarmv7最適化の一部を使用します...それはそれほど速くはありません。それでも、現在androidにあるlibjpegよりも高速です。
Androidを実行している新しい電話に搭載されているarmv6チップがあります。特に安い市場では。網羅的なリストに入るのではなく、libで発生する必要があるのは(そしてこれは現在私にとってWIPタイプのものです)、さまざまなarmv6最適化をlibjpeg-turboに取り入れているので、androidのlibjpeg-turboにはあらゆる面で良い話があります。乞うご期待。
現在、すべてのAndroidデバイスはARM命令セットを使用しています。そして、それらのほとんど(すべてではありません)はNEON命令セットをサポートしています。NEON命令は、SSE2からx86のようなものです。