web-dev-qa-db-ja.com

iPhoneアプリをコンパイルするときのarmv6に対するarmv7の利点は何ですか?

利点がある場合...ドキュメントで決定的なものを見つけることができませんでした。

どうやらarmv7はiOSの新しいバージョン用です...速いですか?小さい? Xの方が良いですか?

67
M. Ryan

大きな違いの1つは、armv6アーキテクチャが倍精度浮動小数点演算のハードウェアサポートを備えているのに対し、armv7は倍精度浮動小数点演算のレガシーソフトウェアサポートのみを提供することです。

これを補うために、armv7アーキテクチャには、単精度浮動小数点演算用の途方もなく高速なハードウェアサポートを提供する「NEON」ユニットがあります。

これは、浮動小数点演算を含む何かを行う場合、単精度で実行する場合でも倍精度で実行する場合でも、考慮する必要があるものです。倍精度で実行しているが、必ずしもその量の精度が必要でない場合は、代わりに単精度を使用することで、おそらくarmv7デバイスのパフォーマンスを大幅に向上させることができます。

Appleは、今年のWWDCセッションの1つで、armv6とarmv7の多くの違いとAccelerateフレームワークの紹介を取り上げました。ビデオは引き続きiTunesで利用できるはずです(10年7月現在)。

54
Jasarien

古いiOSデバイス(iPhone、iPhone 3G、第1世代および第2世代のiPod touch)には、armv6命令セットのみをサポートするCPUがありました。 iPhone 3G S(およびiPadおよび第3世代iPod touch)には、armv7命令セットもサポートする新しいプロセッサが搭載されています。一般に、これらの新しいプロセッサではarmv7の方が高速であり、少なくとも今後はアプリケーションにarmv7ビルドを含めることをお勧めします(iPad専用アプリケーションでは、おそらくarmv7用にビルドすることができます)。

Jasarienが指摘しているように、命令セット間の最大の違いは、浮動小数点演算にあります。 armv6では、アプリケーションは縮小されたThumb命令セットを使用してビルドされ、より小さなバイナリを生成する傾向がありましたが、Thumb浮動小数点のパフォーマンスはひどいものでした。したがって、より高速な浮動小数点計算が必要な場合は、Thumbを無効にする必要があります。 armv7では、Thumb-2命令セットにはこの制限がなくなりました。そのため、Appleはほとんどの場合、これを使用してコンパイルすることをお勧めします。

Thumbビルド設定を条件付きにして、古いデバイスではオフにし、新しいデバイスではオンにすることができます。これを行うには、Xcodeビルド設定に移動し、[Thumb用にコンパイル]オプションを選択します。画面の左下にあるメニューに移動し、[ビルド設定条件の追加]オプションを選択します。新しいビルド設定条件で、アーキテクチャにARMv6を選択し、Thumbをオフにして、別の条件を追加し、アーキテクチャにARMv7を選択して、Thumbを有効にします。

Stephen Canonの答え here によると、単精度と倍精度の両方の浮動小数点演算がarmv6のハードウェアでサポートされています。おそらくキャッシュに収まる操作が多いために、このプラットフォームでは単精度演算のパフォーマンスがわずかに向上することがわかりました。 armv7では、NEON SIMD浮動小数点ユニットは単精度演算でのみ動作するため、単精度演算と倍精度演算のパフォーマンスに大きな違いが生じる可能性があります。

この主題に関して興味があるかもしれない他の質問は下記のものを含んでいます:

78
Brad Larson

私にとって、ARMv7の主な利点は次のとおりです。

  • thumb-2
  • ネオン

NEONは明示的にコーディングする必要があります。単に再コンパイルするだけで利用することはできませんが、時間をかけてマルチメディア/ゲーム操作を8倍に加速できます。ただし、thumb-2はほぼ無料で削減できます。ほぼ欠点のないコードサイズ(ARMモード)と比較して浮動小数点コードが非常に遅くなるARMv6の経験に反します。もちろん、ARMv7に実行可能ファイルの別のバージョンを追加しても減少しません)実行可能ファイルサイズ。ただし、メモリ、キャッシュなどのコードが削減されます。

4

IPadとすべてのiPhone/iPod tochモデルでアプリを実行する場合は、両方にコンパイルする必要があります。古いiOSデバイスはarm6を使用し、新しいデバイスはarm7を使用します。

どちらか一方にコンパイルしない唯一の理由は、コードのコンパイルされたバージョンを1つだけ必要とするため、アプリのサイズが小さくなることです。ただし、コードベースが非常に大きい場合を除き、このファイルサイズの違いはごくわずかです。

3
Alex Wayne

arm7は、iPod Touch(第3世代)およびiPhone 3GS以降により最適化されています。古いデバイス用にビルドする場合は、「Standard/arm6 + arm7」を使用する必要があります。実際には、アプリケーションのパフォーマンスの違いはあまり見られません。

3
Alex Argo

このリンクを見てください。利点、違いなどについての説明があります。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html

1
Maurice