ARMデバイスでソフトフロートコプロセッサを使用しているARMチップはほとんどないため、ARMデバイスでソフトフロートアルゴリズムを使用するのが最適であるとする記事がいくつかあります。では、RPiにはハードフロートがサポートされていますか?もしそうなら、そのソフトフロートは速くなりますか?(そうでしょう?)
ARMデバイスでソフトフロートコプロセッサを使用しているARMチップはほとんどないため、ARMデバイスでソフトフロートアルゴリズムを使用するのが最適であるとする記事がいくつかあります。では、RPiにはハードフロートがサポートされていますか?もしそうなら、そのソフトフロートは速くなりますか?(そうでしょう?)
回答:
FAQによると、 Raspberry Piは浮動小数点をサポートするARM 11チップを使用しています。
どのSoCを使用していますか?
SoCはBroadcom BCM2835です。これには、700Mhzで動作する浮動小数点を備えたARM1176JZFSとVideocore 4 GPUが含まれています。GPUは、40MBits / sでH.264を使用してBluRay品質の再生が可能です。提供されているOpenGL ES2.0およびOpenVGライブラリを使用してアクセスする高速3Dコアがあります。
これはソフトフロートよりも速くなります(そうでない場合は驚かれます!)が、ハードウェアをサポートしていないシステムでは、浮動小数点が提供する範囲を特に必要としない場合は、固定小数点処理を活用することをお勧めします。ポイント精度。
ハードウェア浮動小数点をサポートしています。私が知る限り、これはRPi用に提供されているデフォルトのDebianディストリビューションでは利用できません(まだ)。Archについてはあまりよくわかりませんが、Archがサポートしなければ、まもなくサポートされると思います。
RPiにGentooがあるので、デフォルトではすべてがハードフロートサポートでコンパイルされています。スピーディです:)
CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard"
CXXFLAGS="${CFLAGS}"
CHOST="armv6j-hardfloat-linux-gnueabi"
(もちろん、distccとクロスコンパイルは広く使用されています!)
では、RPiにはハードフロートがサポートされていますか?
はい、具体的には(元のPiで)VFPv2。
もしそうなら、そのソフトフロートは速くなりますか?
はい
ARMデバイスでソフトフロートコプロセッサを使用しているARMチップはほとんどないため、ARMデバイスでソフトフロートアルゴリズムを使用するのが最適であるとする記事がいくつかあります。
2007年の時点で、浮動小数点の腕は混乱しており、多くのチップにはFPUがまったくありませんでした。多くの場合、互換性のないいくつかの異なるものの1つがありました。さらに悪いDebianアーム(当時の主要なアームLinuxディストリビューションの1つ)は、FPAと呼ばれるFPUのために構築された歴史的な理由で、非常に少数のチップがあり、ほとんどが浮動小数点のカーネルエミュレーションに依存していました(ソフトウェア浮動小数点は低速で、カーネルは浮動小数点をエミュレートしました)遅いです)。他のディストリビューションの状況は似ていたと思いますが、私はそれについて前向きではありません。
当時の混乱を考えると、最良のオプションはEABIのベースライン(ソフトフロート)バージョンを使用してEABIポートを行うことであるという決定が下されました。このABIは、オプションでFPUを使用しながら、コードがベースラインABIを使用できるように設計されました。当時のアイデアは、ソフトウェアの浮動小数点を使用してディストリビューションのコアを構築し、ハードウェア浮動小数点を使用しながらもベースライン(ソフトフロート)ABIを使用して、浮動小数点を多用する特定のコードを構築できるというものでした。この移植は、Debianの世界では「armel」として知られていました。
ただし、「ハードウェア浮動小数点を使用してビルドされた特定のパッケージ」ビットは実際には機能しませんでした。実際には、このようなことをするのに苦労するパッケージはほとんどなく、整数レジスタと浮動小数点レジスタの間で値をシャッフルするオーバーヘッドもありました。
2011年に早送りすると、状況はかなり変化しました。ArmはVFPを積極的に推進しており、「アプリケーションプロセッサ」の大部分(携帯電話やsimliarで見られる種類)がそれを採用していました。多くの主要なLinuxディストリビューション(少なくとも最初はDebian、Ubuntu、Fedora、さらに後で)は、ハードウェア浮動小数点とハードフロートABIを使用してポートを実行することを選択しました。残念ながら、Piの場合、これらのディストリビューション(Piがリリースされた頃にコンプリートに達していました)は、通常、Piで実行されないように、VFPv3_d16を備えたARMv7として最小ハードウェア要件を設定しました。
そこで、Piファンは、ハードウェア浮動小数点とハードフロートABIを使用するが、piで実行されるコンパイラ設定で構築されたpi固有のディストリビューションバリアントの作業を開始しました。
2012年9月18日以降、Arch Linux ARMもハードフロートをサポートしています。この発表を読む:
本日、Raspberry PiおよびVia APC-IOで利用可能なVFP浮動小数点ユニットをサポートするために構築されたすべてのパッケージで、新しいarmv6ハードフロートリポジトリを公開します。armv5 soft-floatリポジトリと新しいarmv6hリポジトリの間にアップグレードパスがないため、Raspberry Piの新しいインストールイメージもリリースしました。画像へのリンクは、メインサイトのPiのインストールページにあります。このイメージはsysvinitとinitscriptsの代わりにsystemdにも設定されているため、起動時間が速くなり、最終的にArchで永続的になる変更に対してインストールが将来にわたって保証されます。