2009-10-26 4 views
47

私は、iPhoneがネイティブで二重にできないため、通常のフロートよりもはるかに遅くなると聞いたことがあります。iPhoneでダブルとフロートを合わせる

これは本当ですか?証拠?

私のプログラムは高精度な計算が必要なので、私はこの問題に非常に関心があります。私は速度について妥協する必要があります。

答えて

71

iPhoneはハードウェアで単精度と倍精度の両方の算術演算を行うことができます。 1176(元のiPhoneとiPhone3G)では、それらはほぼ同じ速度で動作しますが、より多くの単精度データをキャッシュに入れることができます。 Cortex-A8(iPhone3GS、iPhone4、およびiPad)では、単精度演算はVFPではなくNEONユニットで実行され、実質的に高速です。

集中浮動小数点計算を実行する場合は、armv6のコンパイル設定で親指モードをオフにしてください。

+0

私は情報がどこにあるのか知りたいです。 –

+1

@Ben:おそらく彼はそれを知っていたかもしれませんが、私の投稿を確認すれば、リンクはその情報を正確に提供し、Googleはこの件についてもっと多くのヒットを返します。 – Abel

+24

アーキテクチャーリファレンスマニュアル(この場合はARMから無料で入手できます)、逆アセンブラ(otool)、慎重に書かれたタイミングループであれば、アーキテクチャについての情報を得るには十分です。 –

10

ARM1176JZF-Sマニュアルでは、倍精度浮動小数点数がサポートされています。あなたはいい形でなければなりません。ここでは、PDFドキュメントのlinkです。後のiPhoneはCortexチップであり、確かにそれほど難しいものではありません。

12

This slide showは、浮動小数点が不十分で、なぜ浮動小数点ユニットがあるのか​​についての洞察を提供します。どうやら、浮動小数点サポートがオンかどうかに影響を与える「サムモード」をチェックすることが重要です。これは必ずしも改善ではありません。アセンブリコード内の正しい命令を見つける方法を示します。

また、what version of the phoneに依存してコードを実行します。最新のものは浮動小数点演算を行う上で「より能力がある」ようです。

EDIT:VFPとNEON SSEを搭載したARMのfloating point optimizationsの興味深い記事があります。

関連する問題