web-dev-qa-db-ja.com

iPhoneでのダブルvsフロート

IPhoneはネイティブで2倍にすることができないため、通常のフロートよりもはるかに遅くなると聞いたばかりです。

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

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

47
John Smith

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

集中的な浮動小数点計算を行う場合は、armv6のコンパイル設定でサムモードをオフにしてください。

71
Stephen Canon

このスライドショー は、なぜ適切な浮動小数点がないのか、なぜあるのか(ベクトル浮動小数点単位)についての洞察を提供します。どうやら、浮動小数点サポートがオンになっているかどうかに影響を与える「サムモード」をチェックすることが重要です。これは必ずしも改善ではありません。アセンブリコードで正しい命令を見つける方法を示しています。

また、 電話のバージョン コードを実行するかどうかによっても異なります。最新のものは、浮動小数点演算を行うのに「より有能」であるように思われます。

編集:ここに興味深い読み物があります 浮動小数点の最適化 ARM with VFP and NEONSSE。

12
Abel

ARM1176JZF-Sマニュアルには、倍精度浮動小数点数をサポートすると記載されています。体調が良いはずです。これが リンク からPDFのドキュメントです。後のiPhoneはCortexチップであり、確かに機能が低下することはありません。

10
Carl Norum