2012-07-17 7 views
8

私はCPUの機能について少し勉強していて、NEONを見つけました。AndroidプログラムではどのようにNEON SIMDを使用しますか?

NEONはこれを使用するには特定のプログラミングが必要ですが、これは完全に正しいですか、この機能を備えたCPUはまだそれを調整し、それには特定のコードはありませんが?

+0

命令セットの拡張は* something *(drivers/kernel/Cライブラリなど)の対象にする必要があります。 –

+0

Androidコンパイラがこれを特定のレベルにするという意味で(すべてのcpusにこの機能があるわけではないので)?私はMMXの拡張機能のように、インテルcpusはプログラマーがターゲットにしなければならないと思っていたコンパイラが、それが存在すると仮定していたと思っていましたが、古くなってしまいました.. – Tam

+1

コンパイラは、しかし、「60%-150%の数字」と主張している人にとっては、それでもハンドコーディングと本来の使用知​​識が必要です。(アセンブリでプログラム全体を書くのではなく、CODECや3D変換など) –

答えて

9

NEON命令を使用する方法はいくつかあります。それらのいくつかは:

  • ライブラリアンです。あなたのmemcpyがNEONを使って手作りされている可能性があります。 APIの音楽/ビデオ再生ライブラリでは、アクセラレーションにNEONやGPUが使用されています。阿蘇、それを使用するセカンダリーライブラリがあります。クアルコムのFastCVは良い例です。
  • コンパイラ発行の指示です。正しいコンパイラオプションを持つコンパイラの中には、NEON命令を発行するものがあります。ほとんどのコンパイラは浮動小数点演算にはネオンを使用しますが、ベクトル化はしません。迅速で便利なので、ユニットを単一データユニットとして使用します。 GCCとARMコンパイラにはいくつかのベクトル化機能がありますが、その範囲と結果は実際には限られています。
  • 組み込み関数付きの手書きCNEONの世界では、これはおそらく最善の方法です。
  • ハンドコーディングされたアセンブラ。あなたが最高のパフォーマンスを達成したい場合、これは最高のようです。それはまた、多大な労力とCS知識を必要とします。

  • 最後に、NEONを使用するアプリをダウンロードするだけで、NEONを使用できます。お気に入りの音楽プレーヤーは、おそらくあなたのスマートフォンにうまく利用してNEONユニットを置く:)

結論:NEONは用法をたくさん持っていますが、コードは、具体的NEON命令が含まれている場合にのみ使用されます。より技術的には、@ pstが述べたように、がコードをターゲットにする必要があります。

+0

ありがとうございます。ミュージック/ビデオ再生のあなたの言及は、私たちがSoundPoolを使用するとき、アンドロイドはそれを自動的に使用する(コンパイルする)ことを意味しますか? (私は、2つの携帯電話のサウンドエフェクトを開始する速度の違いに気付きました.1つは、ネオンを含む、もう1つは、cpu機能にリストされています)。 – Tam

+0

ほとんどの場合、AndroidはオーディオAPIの最適化バージョンを提供します。 NEONをサポートしている電話機、およびNEONのないもののためのシンプルなC++バージョンです。私はAndroidのソースコードやドライバをチェックしませんでしたが、これは標準モデルです。 – Sam

関連する問題