Czy Raspberry Pi obsługuje sprzętowe zmiennoprzecinkowe?

34

Istnieje kilka artykułów, które mówią, że najlepiej stosować algorytmy soft float na urządzeniach ARM, ponieważ bardzo niewiele układów ARM ma koprocesory typu hard float. Czy RPi ma wsparcie typu hard float? Jeśli tak, to czy szybszy jest ten miękki pływak? (Powinno być, prawda?)

Alex Chamberlain
źródło

Odpowiedzi:

30

Zgodnie z często zadawanymi pytaniami Raspberry Pi wykorzystuje układ ARM 11 z obsługą zmiennoprzecinkową:

Jakiego SoC używasz?

SoC to Broadcom BCM2835. Zawiera ARM1176JZFS, z liczbą zmiennoprzecinkową, działający z częstotliwością 700 MHz i GPU Videocore 4. Procesor graficzny obsługuje odtwarzanie w jakości BluRay przy użyciu H.264 z szybkością 40 MB / s. Ma szybki rdzeń 3D dostępny za pomocą dostarczonych bibliotek OpenGL ES2.0 i OpenVG.

Będzie to szybsze niż soft float (jeśli nie jest, zadziwi mnie!), Chociaż w systemach bez wsparcia sprzętowego często lepszym rozwiązaniem jest wykorzystanie przetwarzania stałoprzecinkowego, jeśli nie potrzebujesz zakresu oferowanego przez float precyzja punktowa.

Matt Lacey
źródło
9

Ma sprzętową obsługę zmiennoprzecinkową. O ile mi wiadomo, nie jest to dostępne w domyślnej dystrybucji Debiana przewidzianej dla RPi (jeszcze). Nie jestem zbyt pewny co do Arch, chociaż jeśli nie będą mieli wsparcia, wyobrażam sobie, że wkrótce.

Mam Gentoo na moim RPi, więc domyślnie mam wszystko skompilowane z obsługą hard float. Jest szybki :)

CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard"
CXXFLAGS="${CFLAGS}"
CHOST="armv6j-hardfloat-linux-gnueabi"

(distcc i cross-kompilacja są szeroko stosowane, oczywiście!)

Xiol
źródło
Xiol, czy możesz zrobić test porównawczy Unixbench na swoim systemie Gentoo i opublikować wyniki? Z pewnością byłoby to interesujące dla porównania, ponieważ różnica w wydajności między soft-fpu a hard-fpu jest dość duża. Według copypaste.at/2012/06/raspberry-pi-und-debian-7-wheezy-soft.html (przepraszam, język niemiecki) test porównawczy osełki jest około 10 razy szybszy w przypadku Raspian (ARMHF arch w / HardFPU) w porównaniu z RPI zalecany Debian (ARMEL w / SoftFPU). Myślę, że GenToo musi być jeszcze większy.
6

Czy RPi ma wsparcie typu hard float?

Tak, konkretnie (na oryginalnym Pi) VFPv2.

Jeśli tak, to czy szybszy jest ten miękki pływak?

tak

Istnieje kilka artykułów, które mówią, że najlepiej stosować algorytmy soft float na urządzeniach ARM, ponieważ bardzo niewiele układów ARM ma koprocesory typu hard float.

W 2007 roku zmiennoprzecinkowy na ramieniu był bałagan, wiele układów nie miało w ogóle FPU. Te, które często miały jeden z kilku różnych i niezgodnych. Gorsze ramię Debiana (jedna z głównych dystrybucji Linuksa w tamtym czasie) zostało zbudowane z powodów historycznych dla FPU o nazwie FPA, który miał bardzo niewiele układów i polegał głównie na emulacji jądra dla zmiennoprzecinkowego (oprogramowanie zmiennoprzecinkowe jest wolne, emulacja jądra zmiennoprzecinkowa jest wolniejszy). Myślę, że sytuacja w innych dystrybucjach była podobna, ale nie jestem tego pozytywny.

Biorąc pod uwagę bałagan w tym czasie, podjęto decyzję, że najlepszą opcją jest wykonanie portu EABI przy użyciu podstawowej wersji EABI. Ten ABI został zaprojektowany w taki sposób, że kod może korzystać z podstawowego ABI, opcjonalnie przy użyciu FPU. Pomysł polegał wtedy na tym, aby rdzeń dystrybucji był zbudowany przy użyciu programowego zmiennoprzecinkowego, a następnie określony kod, który intensywnie używany zmiennoprzecinkowy może być zbudowany przy użyciu sprzętowego zmiennoprzecinkowego, ale nadal przy użyciu podstawowego (zmiennoprzecinkowego) ABI. Ten port był znany w świecie Debiana jako „armel”.

Jednak bit „konkretnych pakietów zbudowanych przy użyciu sprzętowego zmiennoprzecinkowego” tak naprawdę nie zadziałał. W praktyce kilka pakietów nie chciało tego zrobić, a także pojawiał się narzut związany z tasowaniem wartości między rejestrami liczb całkowitych i zmiennoprzecinkowych.

Przechodząc do 2011 roku, sytuacja uległa znacznej zmianie. Arm agresywnie naciskał na VFP i przejęła je większość „procesorów aplikacyjnych” (coś, co można znaleźć w telefonach moblie i podobnych). Wiele głównych dystrybucji Linuksa (początkowo Debian, Ubuntu i Fedora, później) zdecydowało się na porty przy użyciu sprzętowego zmiennoprzecinkowego i twardego zmiennoprzecinkowego ABI. Na nieszczęście dla Pi te dystrybucje (które osiągały ukończenie w czasie, gdy Pi zostało wydane) generalnie ustalają minimalne wymagania sprzętowe jako ARMv7 z VFPv3_d16, więc nie będą działać na Pi.

Dlatego fani Pi zaczęli pracować nad wariantami dystrybucji specyficznymi dla pi, w których zastosowano sprzętową zmiennoprzecinkową i twardą zmiennoprzecinkową ABI, ale zostały one zbudowane z ustawieniami kompilatora, które działałyby na pi.

Peter Green
źródło
5

Od 18 września 2012 r. Arch Linux ARM ma również obsługę hard float. Przeczytaj to ogłoszenie:

Dzisiaj udostępniamy publicznie nowe repozytoria typu hard-float armv6, a wszystkie pakiety zostały zbudowane w celu obsługi jednostki zmiennoprzecinkowej VFP dostępnej w Raspberry Pi i Via APC-IO. Ponieważ nie ma ścieżki uaktualnienia między repozytorium soft-float armv5 a nowym repozytorium armv6h, wydaliśmy również nowy obraz instalacyjny dla Raspberry Pi. Link do obrazu jest dostępny na stronie instalacji Pi w naszej głównej witrynie. Ten obraz jest również skonfigurowany dla systemd zamiast sysvinit i skryptów startowych, więc czasy rozruchu są krótsze, a instalacja jest przygotowana na przyszłe zmiany, które ostatecznie stają się trwałe w Arch.

Arch Linux ARM Raspberry Pi

Toni
źródło
4

Tak, jak stwierdzili inni, Raspberry Pi ma wsparcie twardego float. Sprawdź system operacyjny Raspbian .

Raspbian jest nieoficjalnym portem armhf Debiana Wheezy z ustawieniami kompilacji dostosowanymi do produkcji zoptymalizowanego kodu „hard float”, który będzie działał na Raspberry Pi. Powinno to zapewnić znacznie wyższą wydajność dla aplikacji, które intensywnie wykorzystują zmiennoprzecinkowe operacje arytmetyczne.

Krzysztof
źródło