Answers:
它确实具有硬件浮点支持。据我所知,在为RPi提供的默认Debian发行版中,这还不可用。我对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芯片具有硬浮点协处理器。
早在2007年,浮点运算就是一片混乱,许多芯片根本没有FPU。那些确实做到了的人通常拥有几种不同且不兼容的人之一。更糟糕的Debian分支(当时是主要的Linux发行版之一)是出于历史原因而构建的FPU,称为FPA,该芯片几乎没有芯片,并且主要依靠内核仿真来进行浮点运算(软件浮点运算很慢,内核仿真浮点运算)较慢)。我认为其他发行版中的情况类似,但我对此并不乐观。
考虑到当时的混乱状况,人们决定最好的选择是使用EABI的基准(软浮动)版本进行EABI端口。该ABI的设计方式使得代码可以使用基线ABI,同时可以选择使用FPU。当时的想法是,发行版的核心将使用软件浮点构建,然后可以使用硬件浮点构建heavilly使用的浮点的特定代码,但仍使用基线(软浮点)ABI。这个端口在Debian世界中被称为“ armel”。
但是,“使用硬件浮点构建的特定程序包”位并没有真正解决。实际上,很少有软件包会费心去做这样的事情,而且整型和浮点寄存器之间的值改组也有开销。
快进到2011年,情况发生了很大变化。Arm一直在积极推动VFP,并且绝大多数“应用处理器”(在移动电话和类似手机中都可以找到)采用了VFP。许多主要的Linux发行版(最初至少是Debian,Ubuntu和Fedora,后来更多)选择使用硬件浮点和硬浮点ABI进行端口移植。不幸的是,对于这些Pi,这些发行版(在发布Pi时就已经达到了完全竞争)通常将其最低硬件要求设置为带有VFPv3_d16的ARMv7,因此它们无法在Pi上运行。
因此,Pi迷开始研究特定于pi的发行版变体,这些变体使用了硬件浮点和硬浮点ABI,但使用在pi上运行的编译器设置来构建。
自2012年9月18日起,Arch Linux ARM还提供了硬浮动支持。阅读此公告:
今天,我们将向公众开放新的armv6硬浮动存储库,其中包含为支持Raspberry Pi和Via APC-IO中的VFP浮点单元而构建的所有软件包。由于armv5软浮动存储库和新的armv6h存储库之间没有升级路径,因此我们还发布了Raspberry Pi的新安装映像。该映像的链接位于我们主站点上Pi的“安装”页面上。该映像也为systemd而不是sysvinit和initscripts设置,因此引导时间更快,并且安装对于将来的更改而言是永不过时的,这些更改最终会在Arch中永久存在。